diff --git a/website/apps/backend/config/app.yml b/website/apps/backend/config/app.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1899f5faae396e620c0f79637f4e237978259478
--- /dev/null
+++ b/website/apps/backend/config/app.yml
@@ -0,0 +1,2 @@
+# default values
+#all:
diff --git a/website/apps/backend/config/cache.yml b/website/apps/backend/config/cache.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9a80ccb475bc3073680a217abf08e0d4336e11e6
--- /dev/null
+++ b/website/apps/backend/config/cache.yml
@@ -0,0 +1,4 @@
+default:
+  enabled:     off
+  with_layout: false
+  lifetime:    86400
diff --git a/website/apps/backend/config/config.php b/website/apps/backend/config/config.php
new file mode 100644
index 0000000000000000000000000000000000000000..4038d49efd0b8fff128d9144c0a4aacb72da9b37
--- /dev/null
+++ b/website/apps/backend/config/config.php
@@ -0,0 +1,8 @@
+<?php
+
+// include project configuration
+include(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+// symfony bootstraping
+require_once($sf_symfony_lib_dir.'/util/sfCore.class.php');
+sfCore::bootstrap($sf_symfony_lib_dir, $sf_symfony_data_dir);
diff --git a/website/apps/backend/config/factories.yml b/website/apps/backend/config/factories.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5566c3683dcdd7dc7a8ad4603aa8afde30097083
--- /dev/null
+++ b/website/apps/backend/config/factories.yml
@@ -0,0 +1,35 @@
+cli:
+  controller:
+    class: sfConsoleController
+  request:
+    class: sfConsoleRequest
+  response:
+    class: sfConsoleResponse
+
+test:
+  storage:
+    class: sfSessionTestStorage
+
+#all:
+#  controller:
+#    class: sfFrontWebController
+#
+#  request:
+#    class: sfWebRequest
+#
+#  response:
+#    class: sfWebResponse
+#
+#  user:
+#    class: myUser
+#
+#  storage:
+#    class: sfSessionStorage
+#    param:
+#      session_name: symfony
+#
+#  view_cache:
+#    class: sfFileCache
+#    param:
+#      automaticCleaningFactor: 0
+#      cacheDir:                %SF_TEMPLATE_CACHE_DIR%
diff --git a/website/apps/backend/config/filters.yml b/website/apps/backend/config/filters.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4850f6fb987866797e7f7b50667658c113c5f2a6
--- /dev/null
+++ b/website/apps/backend/config/filters.yml
@@ -0,0 +1,10 @@
+rendering: ~
+web_debug: ~
+security:  ~
+
+# generally, you will want to insert your own filters here
+
+cache:     ~
+common:    ~
+flash:     ~
+execution: ~
diff --git a/website/apps/backend/config/i18n.yml b/website/apps/backend/config/i18n.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a3b0f2fe671244ca706c54cb7362ecc75e18a77d
--- /dev/null
+++ b/website/apps/backend/config/i18n.yml
@@ -0,0 +1,7 @@
+#all:
+#  default_culture:     en
+#  source:              XLIFF
+#  debug:               off
+#  cache:               on
+#  untranslated_prefix: "[T]"
+#  untranslated_suffix: "[/T]"
diff --git a/website/apps/backend/config/logging.yml b/website/apps/backend/config/logging.yml
new file mode 100644
index 0000000000000000000000000000000000000000..df5118079b33a1e12ac8470eb6692eb96f6f8f23
--- /dev/null
+++ b/website/apps/backend/config/logging.yml
@@ -0,0 +1,22 @@
+prod:
+  enabled: off
+  level:   err
+  rotate:  on
+  purge:   off
+
+#all:
+#  enabled: on
+#  level:   debug
+#  rotate:  off
+#  period:  7
+#  history: 10
+#  purge:   on
+#  loggers:
+#    sf_web_debug:
+#      class: sfWebDebugLogger
+#      param:
+#        condition: %SF_WEB_DEBUG%
+#    sf_file_debug:
+#      class: sfFileLogger
+#      param:
+#        file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log
diff --git a/website/apps/backend/config/routing.yml b/website/apps/backend/config/routing.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e77531a48094937d5502026d05a1c875ae466839
--- /dev/null
+++ b/website/apps/backend/config/routing.yml
@@ -0,0 +1,15 @@
+# default rules
+homepage:
+  url:   /
+  param: { module: default, action: index }
+
+default_symfony:
+  url:   /symfony/:action/*
+  param: { module: default }
+
+default_index:
+  url:   /:module
+  param: { action: index }
+
+default:
+  url:   /:module/:action/*
diff --git a/website/apps/backend/config/security.yml b/website/apps/backend/config/security.yml
new file mode 100644
index 0000000000000000000000000000000000000000..225dd93686ebc14ad0daf8853832b2192cdc3a54
--- /dev/null
+++ b/website/apps/backend/config/security.yml
@@ -0,0 +1,2 @@
+default:
+  is_secure: off
diff --git a/website/apps/backend/config/settings.yml b/website/apps/backend/config/settings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9bc9331fc646da8d01a38ec6c07fdd7f0a68ea7e
--- /dev/null
+++ b/website/apps/backend/config/settings.yml
@@ -0,0 +1,103 @@
+prod:
+  .settings:
+    no_script_name:           off
+
+dev:
+  .settings:
+    # E_ALL | E_STRICT = 4095
+    error_reporting:        4095
+    web_debug:              on
+    cache:                  off
+    no_script_name:         off
+    etag:                   off
+
+test:
+  .settings:
+    # E_ALL | E_STRICT & ~E_NOTICE = 2047
+    error_reporting:        2047
+    cache:                  off
+    web_debug:              off
+    no_script_name:         off
+    etag:                   off
+
+#all:
+#  .actions:
+#    default_module:         default   # Default module and action to be called when
+#    default_action:         index     # A routing rule doesn't set it
+#
+#    error_404_module:       default   # To be called when a 404 error is raised
+#    error_404_action:       error404  # Or when the requested URL doesn't match any route
+#
+#    login_module:           default   # To be called when a non-authenticated user
+#    login_action:           login     # Tries to access a secure page
+#
+#    secure_module:          default   # To be called when a user doesn't have
+#    secure_action:          secure    # The credentials required for an action
+#
+#    module_disabled_module: default   # To be called when a user requests 
+#    module_disabled_action: disabled  # A module disabled in the module.yml
+#
+#    unavailable_module:     default   # To be called when a user requests a page
+#    unavailable_action:  unavailable  # From an application disabled via the available setting below
+#
+#  .settings:
+#    available:              on        # Enable the whole application. Switch to off to redirect all requests to the unavailable module and action.
+#
+#    # Optional features. Deactivating unused features boots performance a bit.
+#    use_database:           on        # Enable database manager. Set to off if you don't use a database.
+#    use_security:           on        # Enable security features (login and credentials). Set to off for public applications.
+#    use_flash:              on        # Enable flash parameter feature. Set to off if you never use the set_flash() method in actions.
+#    i18n:                   off       # Enable interface translation. Set to off if your application should not be translated.
+#    check_symfony_version:  off       # Enable check of symfony version for every request. Set to on to have symfony clear the cache automatically when the framework is upgraded. Set to off if you always clear the cache after an upgrade.
+#    use_process_cache:      on        # Enable symfony optimizations based on PHP accelerators. Set to off for tests or when you have enabled a PHP accelerator in your server but don't want symfony to use it internally.
+#    compressed:             off       # Enable PHP response compression. Set to on to compress the outgoing HTML via the PHP handler.
+#    check_lock:             off       # Enable the application lock system triggered by the clear-cache and disable tasks. Set to on to have all requests to disabled applications redirected to the $sf_symfony_data_dir/web/arrors/unavailable.php page.
+#
+#    # Output escaping settings
+#    escaping_strategy:      bc        # Determines how variables are made available to templates. Accepted values: bc, both, on, off. The value off deactivates escaping completely and gives a slight boost.
+#    escaping_method:   ESC_ENTITIES   # Function or helper used for escaping. Accepted values: ESC_RAW, ESC_ENTITIES, ESC_JS, ESC_JS_NO_ENTITIES.
+#
+#    # Routing settings
+#    suffix:                 .         # Default suffix for generated URLs. If set to a single dot (.), no suffix is added. Possible values: .html, .php, and so on.
+#    no_script_name:         off       # Enable the front controller name in generated URLs
+#
+#    # Validation settings, used for error generation by the Validation helper
+#    validation_error_prefix:    ' &darr;&nbsp;'
+#    validation_error_suffix:    ' &nbsp;&darr;'
+#    validation_error_class:     form_error
+#    validation_error_id_prefix: error_for_
+#
+#    # Cache settings
+#    cache:                  off       # Enable the template cache
+#    etag:                   on        # Enable etag handling
+#
+#    # Logging and debugging settings
+#    web_debug:              off       # Enable the web debug toolbar
+#    error_reporting:        341       # Determines which events are logged. The default value is E_PARSE | E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR | E_USER_ERROR = 341
+#
+#    # Assets paths
+#    rich_text_js_dir:       js/tiny_mce
+#    prototype_web_dir:      /sf/prototype
+#    admin_web_dir:          /sf/sf_admin
+#    web_debug_web_dir:      /sf/sf_web_debug
+#
+#    # Helpers included in all templates by default
+#    standard_helpers:       [Partial, Cache, Form]
+#
+#    # Activated modules from plugins or from the symfony core
+#    enabled_modules:        [default]
+#
+#    # Charset used for the response
+#    charset:                utf-8
+#
+#    # Miscellaneous
+#    strip_comments:         on         # Remove comments in core framework classes as defined in the core_compile.yml
+#    autoloading_functions:  ~          # Functions called when a class is requested and this it is not already loaded. Expects an array of callables. Used by the framework bridges.
+#    timeout:                1800       # Session timeout, in seconds
+#    max_forwards:           5
+#    path_info_array:        SERVER
+#    path_info_key:          PATH_INFO
+#    url_format:             PATH
+#
+#    # ORM
+#    orm:                    propel
diff --git a/website/apps/backend/config/view.yml b/website/apps/backend/config/view.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e387514eece1a76b8126f25ed2b3bb6437c278ee
--- /dev/null
+++ b/website/apps/backend/config/view.yml
@@ -0,0 +1,17 @@
+default:
+  http_metas:
+    content-type: text/html
+
+  metas:
+    title:        symfony project
+    robots:       index, follow
+    description:  symfony project
+    keywords:     symfony, project
+    language:     en
+
+  stylesheets:    [main]
+
+  javascripts:    []
+
+  has_layout:     on
+  layout:         layout
diff --git a/website/apps/backend/lib/myUser.class.php b/website/apps/backend/lib/myUser.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c793028efdb00f31fcda12551cab5ead6c142c5
--- /dev/null
+++ b/website/apps/backend/lib/myUser.class.php
@@ -0,0 +1,5 @@
+<?php
+
+class myUser extends sfBasicSecurityUser
+{
+}
diff --git a/website/apps/backend/templates/layout.php b/website/apps/backend/templates/layout.php
new file mode 100644
index 0000000000000000000000000000000000000000..25c7b5a706fac80011a7283726b1a96553619915
--- /dev/null
+++ b/website/apps/backend/templates/layout.php
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<?php include_http_metas() ?>
+<?php include_metas() ?>
+
+<?php include_title() ?>
+
+<link rel="shortcut icon" href="/favicon.ico" />
+
+</head>
+<body>
+
+<?php echo $sf_data->getRaw('sf_content') ?>
+
+</body>
+</html>
diff --git a/website/apps/frontend/config/app.yml b/website/apps/frontend/config/app.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1899f5faae396e620c0f79637f4e237978259478
--- /dev/null
+++ b/website/apps/frontend/config/app.yml
@@ -0,0 +1,2 @@
+# default values
+#all:
diff --git a/website/apps/frontend/config/cache.yml b/website/apps/frontend/config/cache.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9a80ccb475bc3073680a217abf08e0d4336e11e6
--- /dev/null
+++ b/website/apps/frontend/config/cache.yml
@@ -0,0 +1,4 @@
+default:
+  enabled:     off
+  with_layout: false
+  lifetime:    86400
diff --git a/website/apps/frontend/config/config.php b/website/apps/frontend/config/config.php
new file mode 100644
index 0000000000000000000000000000000000000000..4038d49efd0b8fff128d9144c0a4aacb72da9b37
--- /dev/null
+++ b/website/apps/frontend/config/config.php
@@ -0,0 +1,8 @@
+<?php
+
+// include project configuration
+include(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+// symfony bootstraping
+require_once($sf_symfony_lib_dir.'/util/sfCore.class.php');
+sfCore::bootstrap($sf_symfony_lib_dir, $sf_symfony_data_dir);
diff --git a/website/apps/frontend/config/factories.yml b/website/apps/frontend/config/factories.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5566c3683dcdd7dc7a8ad4603aa8afde30097083
--- /dev/null
+++ b/website/apps/frontend/config/factories.yml
@@ -0,0 +1,35 @@
+cli:
+  controller:
+    class: sfConsoleController
+  request:
+    class: sfConsoleRequest
+  response:
+    class: sfConsoleResponse
+
+test:
+  storage:
+    class: sfSessionTestStorage
+
+#all:
+#  controller:
+#    class: sfFrontWebController
+#
+#  request:
+#    class: sfWebRequest
+#
+#  response:
+#    class: sfWebResponse
+#
+#  user:
+#    class: myUser
+#
+#  storage:
+#    class: sfSessionStorage
+#    param:
+#      session_name: symfony
+#
+#  view_cache:
+#    class: sfFileCache
+#    param:
+#      automaticCleaningFactor: 0
+#      cacheDir:                %SF_TEMPLATE_CACHE_DIR%
diff --git a/website/apps/frontend/config/filters.yml b/website/apps/frontend/config/filters.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4850f6fb987866797e7f7b50667658c113c5f2a6
--- /dev/null
+++ b/website/apps/frontend/config/filters.yml
@@ -0,0 +1,10 @@
+rendering: ~
+web_debug: ~
+security:  ~
+
+# generally, you will want to insert your own filters here
+
+cache:     ~
+common:    ~
+flash:     ~
+execution: ~
diff --git a/website/apps/frontend/config/i18n.yml b/website/apps/frontend/config/i18n.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a3b0f2fe671244ca706c54cb7362ecc75e18a77d
--- /dev/null
+++ b/website/apps/frontend/config/i18n.yml
@@ -0,0 +1,7 @@
+#all:
+#  default_culture:     en
+#  source:              XLIFF
+#  debug:               off
+#  cache:               on
+#  untranslated_prefix: "[T]"
+#  untranslated_suffix: "[/T]"
diff --git a/website/apps/frontend/config/logging.yml b/website/apps/frontend/config/logging.yml
new file mode 100644
index 0000000000000000000000000000000000000000..df5118079b33a1e12ac8470eb6692eb96f6f8f23
--- /dev/null
+++ b/website/apps/frontend/config/logging.yml
@@ -0,0 +1,22 @@
+prod:
+  enabled: off
+  level:   err
+  rotate:  on
+  purge:   off
+
+#all:
+#  enabled: on
+#  level:   debug
+#  rotate:  off
+#  period:  7
+#  history: 10
+#  purge:   on
+#  loggers:
+#    sf_web_debug:
+#      class: sfWebDebugLogger
+#      param:
+#        condition: %SF_WEB_DEBUG%
+#    sf_file_debug:
+#      class: sfFileLogger
+#      param:
+#        file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log
diff --git a/website/apps/frontend/config/routing.yml b/website/apps/frontend/config/routing.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1e088172184b8a1aacc12aead29c5cddbdec7a63
--- /dev/null
+++ b/website/apps/frontend/config/routing.yml
@@ -0,0 +1,39 @@
+# default rules
+homepage:
+  url:   /
+  param: { module: main, action: index }
+
+api_documentation_page:
+  url:   /documentation/api/:q
+  param: { module: api_documentation, action: index }
+
+about:
+  url:   /about
+  param: { module: main, action: about }
+
+download:
+  url:   /download
+  param: { module: main, action: download }
+
+manual:
+  url:   /documentation/manual
+  param: { module: manual, action: index }
+
+api_documentation:
+  url:   /documentation/api
+  param: { module: api_documentation, action: index }
+
+trac:
+  url:   /trac
+  param: { module: main, action: trac }
+
+default_symfony:
+  url:   /symfony/:action/*
+  param: { module: default }
+
+default_index:
+  url:   /:module
+  param: { action: index }
+
+default:
+  url:   /:module/:action/*
diff --git a/website/apps/frontend/config/security.yml b/website/apps/frontend/config/security.yml
new file mode 100644
index 0000000000000000000000000000000000000000..225dd93686ebc14ad0daf8853832b2192cdc3a54
--- /dev/null
+++ b/website/apps/frontend/config/security.yml
@@ -0,0 +1,2 @@
+default:
+  is_secure: off
diff --git a/website/apps/frontend/config/settings.yml b/website/apps/frontend/config/settings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6f500dcaf79a998f84a4d1bf3be30531a3353289
--- /dev/null
+++ b/website/apps/frontend/config/settings.yml
@@ -0,0 +1,103 @@
+prod:
+  .settings:
+    no_script_name:           on
+
+dev:
+  .settings:
+    # E_ALL | E_STRICT = 4095
+    error_reporting:        4095
+    web_debug:              on
+    cache:                  off
+    no_script_name:         off
+    etag:                   off
+
+test:
+  .settings:
+    # E_ALL | E_STRICT & ~E_NOTICE = 2047
+    error_reporting:        2047
+    cache:                  off
+    web_debug:              off
+    no_script_name:         off
+    etag:                   off
+
+#all:
+#  .actions:
+#    default_module:         default   # Default module and action to be called when
+#    default_action:         index     # A routing rule doesn't set it
+#
+#    error_404_module:       default   # To be called when a 404 error is raised
+#    error_404_action:       error404  # Or when the requested URL doesn't match any route
+#
+#    login_module:           default   # To be called when a non-authenticated user
+#    login_action:           login     # Tries to access a secure page
+#
+#    secure_module:          default   # To be called when a user doesn't have
+#    secure_action:          secure    # The credentials required for an action
+#
+#    module_disabled_module: default   # To be called when a user requests 
+#    module_disabled_action: disabled  # A module disabled in the module.yml
+#
+#    unavailable_module:     default   # To be called when a user requests a page
+#    unavailable_action:  unavailable  # From an application disabled via the available setting below
+#
+#  .settings:
+#    available:              on        # Enable the whole application. Switch to off to redirect all requests to the unavailable module and action.
+#
+#    # Optional features. Deactivating unused features boots performance a bit.
+#    use_database:           on        # Enable database manager. Set to off if you don't use a database.
+#    use_security:           on        # Enable security features (login and credentials). Set to off for public applications.
+#    use_flash:              on        # Enable flash parameter feature. Set to off if you never use the set_flash() method in actions.
+#    i18n:                   off       # Enable interface translation. Set to off if your application should not be translated.
+#    check_symfony_version:  off       # Enable check of symfony version for every request. Set to on to have symfony clear the cache automatically when the framework is upgraded. Set to off if you always clear the cache after an upgrade.
+#    use_process_cache:      on        # Enable symfony optimizations based on PHP accelerators. Set to off for tests or when you have enabled a PHP accelerator in your server but don't want symfony to use it internally.
+#    compressed:             off       # Enable PHP response compression. Set to on to compress the outgoing HTML via the PHP handler.
+#    check_lock:             off       # Enable the application lock system triggered by the clear-cache and disable tasks. Set to on to have all requests to disabled applications redirected to the $sf_symfony_data_dir/web/arrors/unavailable.php page.
+#
+#    # Output escaping settings
+#    escaping_strategy:      bc        # Determines how variables are made available to templates. Accepted values: bc, both, on, off. The value off deactivates escaping completely and gives a slight boost.
+#    escaping_method:   ESC_ENTITIES   # Function or helper used for escaping. Accepted values: ESC_RAW, ESC_ENTITIES, ESC_JS, ESC_JS_NO_ENTITIES.
+#
+#    # Routing settings
+#    suffix:                 .         # Default suffix for generated URLs. If set to a single dot (.), no suffix is added. Possible values: .html, .php, and so on.
+#    no_script_name:         off       # Enable the front controller name in generated URLs
+#
+#    # Validation settings, used for error generation by the Validation helper
+#    validation_error_prefix:    ' &darr;&nbsp;'
+#    validation_error_suffix:    ' &nbsp;&darr;'
+#    validation_error_class:     form_error
+#    validation_error_id_prefix: error_for_
+#
+#    # Cache settings
+#    cache:                  off       # Enable the template cache
+#    etag:                   on        # Enable etag handling
+#
+#    # Logging and debugging settings
+#    web_debug:              off       # Enable the web debug toolbar
+#    error_reporting:        341       # Determines which events are logged. The default value is E_PARSE | E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR | E_USER_ERROR = 341
+#
+#    # Assets paths
+#    rich_text_js_dir:       js/tiny_mce
+#    prototype_web_dir:      /sf/prototype
+#    admin_web_dir:          /sf/sf_admin
+#    web_debug_web_dir:      /sf/sf_web_debug
+#
+#    # Helpers included in all templates by default
+#    standard_helpers:       [Partial, Cache, Form]
+#
+#    # Activated modules from plugins or from the symfony core
+#    enabled_modules:        [default]
+#
+#    # Charset used for the response
+#    charset:                utf-8
+#
+#    # Miscellaneous
+#    strip_comments:         on         # Remove comments in core framework classes as defined in the core_compile.yml
+#    autoloading_functions:  ~          # Functions called when a class is requested and this it is not already loaded. Expects an array of callables. Used by the framework bridges.
+#    timeout:                1800       # Session timeout, in seconds
+#    max_forwards:           5
+#    path_info_array:        SERVER
+#    path_info_key:          PATH_INFO
+#    url_format:             PATH
+#
+#    # ORM
+#    orm:                    propel
diff --git a/website/apps/frontend/config/view.yml b/website/apps/frontend/config/view.yml
new file mode 100644
index 0000000000000000000000000000000000000000..07275ade6c9eb18d07eb3d65133062275ca82dfc
--- /dev/null
+++ b/website/apps/frontend/config/view.yml
@@ -0,0 +1,17 @@
+default:
+  http_metas:
+    content-type: text/html
+
+  metas:
+    title:        Doctrine - Open Source PHP 5 ORM
+    robots:       index, follow
+    description:  Doctrine is a Open Source OO PHP 5 ORM
+    keywords:     doctrine, php, database, orm
+    language:     en
+
+  stylesheets:    [main, layout]
+
+  javascripts:    []
+
+  has_layout:     on
+  layout:         layout
diff --git a/website/apps/frontend/lib/myUser.class.php b/website/apps/frontend/lib/myUser.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c793028efdb00f31fcda12551cab5ead6c142c5
--- /dev/null
+++ b/website/apps/frontend/lib/myUser.class.php
@@ -0,0 +1,5 @@
+<?php
+
+class myUser extends sfBasicSecurityUser
+{
+}
diff --git a/website/apps/frontend/modules/api_documentation/actions/actions.class.php b/website/apps/frontend/modules/api_documentation/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..d690832523186dff1a9e03de096aeb8979036d2e
--- /dev/null
+++ b/website/apps/frontend/modules/api_documentation/actions/actions.class.php
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * api_documentation actions.
+ *
+ * @package    doctrine_website
+ * @subpackage api_documentation
+ * @author     Your name here
+ * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
+ */
+class api_documentationActions extends sfActions
+{
+  /**
+   * Executes index action
+   *
+   */
+  public function executeIndex()
+  {
+    
+  }
+}
diff --git a/website/apps/frontend/modules/api_documentation/config/view.yml b/website/apps/frontend/modules/api_documentation/config/view.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b62a4f81668c04b616c4b6c2e21767f33416333f
--- /dev/null
+++ b/website/apps/frontend/modules/api_documentation/config/view.yml
@@ -0,0 +1,3 @@
+default:
+  stylesheets:    [main, layout, api_documentation]
+  layout:         api_documentation_layout
\ No newline at end of file
diff --git a/website/apps/frontend/modules/api_documentation/lib/helper/ApiDocumentationHelper.php b/website/apps/frontend/modules/api_documentation/lib/helper/ApiDocumentationHelper.php
new file mode 100644
index 0000000000000000000000000000000000000000..d3a35e94d6c887fafd234d2e2262b0f6910329b6
--- /dev/null
+++ b/website/apps/frontend/modules/api_documentation/lib/helper/ApiDocumentationHelper.php
@@ -0,0 +1,50 @@
+<?php
+function get_documentation($q)
+{
+  $docPath = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))).DIRECTORY_SEPARATOR.'api_documentation'.DIRECTORY_SEPARATOR.'trunk';
+  
+  if( $q )
+  {
+    $q = str_replace('-sep-', '/', $q);
+    return get_documentation_html($docPath.'/'.$q, $q);
+  } else {
+    return get_documentation_html($docPath.'/index.html', $q);
+  }
+}
+
+function process_documentation($html, $q)
+{
+  //preg_match_all('/a href="(.*)"/', $html, $matches);
+  preg_match_all('/<a\s[^>]*href=\"([^\"]*)\"[^>]*>/siU', $html, $matches);
+
+  $matchValues = $matches[1];
+  $matches = $matches[0];
+
+  foreach($matches AS $key => $match)
+  {
+    $value = $matchValues[$key];
+
+    if( $value[0] != '#' )
+    {
+      $urlQ = str_replace('../', '/', $value);
+      $urlQ = str_replace('/', '-sep-', $urlQ);
+
+      $html = str_replace($match, '<a href="'.url_for('@api_documentation_page?q='.$urlQ).'">', $html);
+    }
+  }
+  
+  return $html;
+}
+
+function get_documentation_html($path)
+{
+  ob_start();
+  if( file_exists($path) )
+  {
+    include($path);
+    $html = ob_get_contents();
+    ob_end_clean();
+
+    return process_documentation($html, $path);
+  }
+}
\ No newline at end of file
diff --git a/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php b/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..448d467ce2e278116e49e87deb816af12ff2e47f
--- /dev/null
+++ b/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php
@@ -0,0 +1,6 @@
+<?php
+use_helper('ApiDocumentation');
+
+$documentation = get_documentation($sf_request->getParameter('q'));
+
+echo $documentation;
\ No newline at end of file
diff --git a/website/apps/frontend/modules/main/actions/actions.class.php b/website/apps/frontend/modules/main/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..9638f9f0dde3f914dd21a6bdb8790ca0cbbb8887
--- /dev/null
+++ b/website/apps/frontend/modules/main/actions/actions.class.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * main actions.
+ *
+ * @package    doctrine_website
+ * @subpackage main
+ * @author     Your name here
+ * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
+ */
+class mainActions extends sfActions
+{
+  /**
+   * Executes index action
+   *
+   */
+  public function executeIndex()
+  {
+  }
+  
+  public function executeAbout()
+  {
+    
+  }
+  
+  public function executeDownload()
+  {
+    
+  }
+  
+  public function executeTrac()
+  {
+    $this->redirect('http://phpdoctrine.net/trac');
+  }
+}
diff --git a/website/apps/frontend/modules/main/templates/aboutSuccess.php b/website/apps/frontend/modules/main/templates/aboutSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..e421e39423e0f62f3765eb14ed51c052d22fdf9f
--- /dev/null
+++ b/website/apps/frontend/modules/main/templates/aboutSuccess.php
@@ -0,0 +1 @@
+About coming soon...
\ No newline at end of file
diff --git a/website/apps/frontend/modules/main/templates/downloadSuccess.php b/website/apps/frontend/modules/main/templates/downloadSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..4eddbc7d0669db88083db711e9a2bd7bdbff69e9
--- /dev/null
+++ b/website/apps/frontend/modules/main/templates/downloadSuccess.php
@@ -0,0 +1 @@
+Download coming soon...
\ No newline at end of file
diff --git a/website/apps/frontend/modules/main/templates/indexSuccess.php b/website/apps/frontend/modules/main/templates/indexSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0fafa9178e2ebdc230e46b194ca6ccf3df8aa2a
--- /dev/null
+++ b/website/apps/frontend/modules/main/templates/indexSuccess.php
@@ -0,0 +1 @@
+Welcome to the Doctrine website.
\ No newline at end of file
diff --git a/website/apps/frontend/modules/manual/actions/actions.class.php b/website/apps/frontend/modules/manual/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..5eed5cd42103f7aaf339e14cd4a863bc11a52862
--- /dev/null
+++ b/website/apps/frontend/modules/manual/actions/actions.class.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * manual actions.
+ *
+ * @package    doctrine_website
+ * @subpackage manual
+ * @author     Your name here
+ * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
+ */
+class manualActions extends sfActions
+{
+  /**
+   * Executes index action
+   *
+   */
+  public function executeIndex()
+  {
+    error_reporting(E_ALL);
+    
+    $trunk = dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))));
+    $vendorPath = $trunk.DIRECTORY_SEPARATOR.'vendor';
+    $manualPath = $trunk.DIRECTORY_SEPARATOR.'manual';
+    
+    $includePath = $vendorPath.PATH_SEPARATOR.$manualPath.DIRECTORY_SEPARATOR.'new'.DIRECTORY_SEPARATOR.'lib';
+    
+    set_include_path($includePath);
+
+    require_once('Sensei/Sensei.php');
+    require_once('DocTool.php');
+    require_once('Cache.php');
+
+    spl_autoload_register(array('Sensei', 'autoload'));
+
+    // Executes the 'svn info' command for the current directory and parses the last
+    // changed revision.
+    $revision = 0;
+    exec('svn info .', $output);
+    foreach ($output as $line) {
+        if (preg_match('/^Last Changed Rev: ([0-9]+)$/', $line, $matches)) {
+            $revision = $matches[1];
+            break;
+        }
+    }
+
+    $cacheDir = './cache/';
+    $cacheRevFile = $cacheDir . 'revision.txt';
+    $cacheRev = 0;
+
+    $cache = new Cache($cacheDir, 'cache');
+
+    // Checks the revision cache files were created from
+    if (file_exists($cacheRevFile)) {
+        $cacheRev = (int) file_get_contents($cacheRevFile);
+    }
+
+    // Empties the cache directory and saves the current revision to a file, if SVN
+    // revision is greater than cache revision
+    if ($revision > $cacheRev) {
+         $cache->clear();
+         @file_put_contents($cacheRevFile, $revision);
+    }
+
+
+    if ($cache->begin()) { 
+
+        $this->tool = new DocTool($manualPath.'/new/docs/en.txt');
+        // $this->tool->setOption('clean-url', true);
+
+        $baseUrl = '';
+        $title = 'Doctrine Manual';
+        $section = null;
+
+        if (isset($_GET['chapter'])) {
+            $section = $this->tool->findByPath($_GET['chapter']);
+            if ($this->tool->getOption('clean-url')) {
+                $baseUrl = '../';
+            }
+        }
+
+        if (isset($_GET['one-page'])) {
+            $this->tool->setOption('one-page', true);
+            $this->tool->setOption('max-level', 0);
+            $section = null;
+            $baseUrl = '';
+        }
+
+        if ($section) {
+            while ($section->getLevel() > 1) {
+                $section = $section->getParent();
+            }
+
+            $this->tool->setOption('section', $section);
+            $title .= ' - Chapter ' . $section->getIndex() . ' ' . $section->getName();
+        }
+
+        if ($this->tool->getOption('clean-url')) {
+            $this->tool->setOption('base-url', $baseUrl);
+        }
+        
+        $cache->end();
+    }
+  }
+}
\ No newline at end of file
diff --git a/website/apps/frontend/modules/manual/config/view.yml b/website/apps/frontend/modules/manual/config/view.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e29ca4567dedf1c87d69dc0bdffc8baf90d4ba1e
--- /dev/null
+++ b/website/apps/frontend/modules/manual/config/view.yml
@@ -0,0 +1,3 @@
+default:
+  stylesheets:    [main, layout, manual]
+  javascripts:    [manual_toc, manual_tree, mootools.v1.11]
\ No newline at end of file
diff --git a/website/apps/frontend/modules/manual/templates/_table_of_contents.php b/website/apps/frontend/modules/manual/templates/_table_of_contents.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fd8eafcdb70221e391111b400861eab537ccd2f
--- /dev/null
+++ b/website/apps/frontend/modules/manual/templates/_table_of_contents.php
@@ -0,0 +1,22 @@
+<?php if( $tool->getOption('section') || $tool->getOption('one-page') ): ?>
+
+  <h1>Table of Contents</h1>
+
+  <?php $tool->renderToc(); ?>
+
+  <p>
+    <?php if($tool->getOption('one-page')): ?>
+      <a href="<?php echo ($tool->getOption('clean-url') ? "chapter/" : '?chapter=') . $tool->findByIndex('1.')->getPath(); ?>">View one chapter per page</a>
+    <?php else: ?>
+      <a href="<?php echo ($tool->getOption('clean-url') ? "one-page" : '?one-page=1') . '#' . $tool->getOption('section')->getPath(); ?>">View all in one page</a>
+    <?php endif; ?>
+  </p>
+<?php else: ?>
+  <p>
+    You can view this manual online as
+    <ul>
+      <li><a href="<?php echo $tool->getOption('clean-url') ? "one-page" : '?one-page=1'; ?>">everything on a single page</a></li>
+      <li><a href="<?php echo $tool->makeUrl($tool->findByIndex('1.')->getPath()); ?>">one chapter per page</a></li>
+    </ul>
+  </p>
+<?php endif; ?>
\ No newline at end of file
diff --git a/website/apps/frontend/modules/manual/templates/indexSuccess.php b/website/apps/frontend/modules/manual/templates/indexSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..bed34503071344689565ec192085887b1fcdc899
--- /dev/null
+++ b/website/apps/frontend/modules/manual/templates/indexSuccess.php
@@ -0,0 +1,13 @@
+<div id="manual">
+  <?php if( $tool->getOption('section') || $tool->getOption('one-page') ): ?>
+    <?php $tool->render(); ?>
+  <?php else: ?>
+    <h1>Table of Contents</h1>
+
+    <?php $tool->renderToc(); ?>
+  <?php endif; ?>
+</div>
+
+<?php slot('right'); ?>
+  <?php echo get_partial('table_of_contents', array('tool' => $tool)); ?>
+<?php end_slot(); ?>
\ No newline at end of file
diff --git a/website/apps/frontend/templates/_footer.php b/website/apps/frontend/templates/_footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb00c862a1ca25b135e1c0da14a3d4d7e19e85f0
--- /dev/null
+++ b/website/apps/frontend/templates/_footer.php
@@ -0,0 +1 @@
+<h1>Copyright Doctrine 2007</h1>
\ No newline at end of file
diff --git a/website/apps/frontend/templates/_header.php b/website/apps/frontend/templates/_header.php
new file mode 100644
index 0000000000000000000000000000000000000000..41c70bda24918650e32f27d1a7bf91d0294f3c6e
--- /dev/null
+++ b/website/apps/frontend/templates/_header.php
@@ -0,0 +1,2 @@
+<h1><?php echo link_to('Doctrine', '@homepage'); ?></h1>
+<h2>$follow->the('doctrine');</h2>
\ No newline at end of file
diff --git a/website/apps/frontend/templates/_menu.php b/website/apps/frontend/templates/_menu.php
new file mode 100644
index 0000000000000000000000000000000000000000..38ba30bf87f6cabe5f94f8c3e44569d304e71865
--- /dev/null
+++ b/website/apps/frontend/templates/_menu.php
@@ -0,0 +1,8 @@
+<ul>
+  <li id="first"><?php echo link_to('home', '@homepage'); ?></li>
+  <li><?php echo link_to('about', '@about'); ?></li>
+  <li><?php echo link_to('download', '@download'); ?></li>
+  <li><?php echo link_to('manual', '@manual'); ?></li>
+  <li><?php echo link_to('api docs', '@api_documentation'); ?></li>
+  <li id="last"><?php echo link_to('trac', '@trac'); ?></li>
+</ul>
\ No newline at end of file
diff --git a/website/apps/frontend/templates/api_documentation_layout.php b/website/apps/frontend/templates/api_documentation_layout.php
new file mode 100644
index 0000000000000000000000000000000000000000..8d2714d4a052ae42001ef6f52056af780469f427
--- /dev/null
+++ b/website/apps/frontend/templates/api_documentation_layout.php
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<?php include_http_metas() ?>
+<?php include_metas() ?>
+
+<?php include_title() ?>
+
+<link rel="shortcut icon" href="/favicon.ico" />
+
+</head>
+<body>
+
+<div id="wrapper">
+  <div id="header">
+    <?php echo get_partial('global/header'); ?>
+  </div>
+  
+  <div id="menu">
+    <?php echo get_partial('global/menu'); ?>
+  </div>
+  
+  <div id="left">
+    &nbsp;
+  </div>
+  
+  <?php echo $sf_data->getRaw('sf_content') ?>
+  
+  <div id="footer">
+    <?php echo get_partial('global/footer'); ?>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/apps/frontend/templates/layout.php b/website/apps/frontend/templates/layout.php
new file mode 100644
index 0000000000000000000000000000000000000000..c87a45111b57a7f0f4eaa5239913becdac6f38fe
--- /dev/null
+++ b/website/apps/frontend/templates/layout.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<?php include_http_metas() ?>
+<?php include_metas() ?>
+
+<?php include_title() ?>
+
+<link rel="shortcut icon" href="/favicon.ico" />
+
+</head>
+<body>
+
+<div id="wrapper">
+  <div id="header">
+    <?php echo get_partial('global/header'); ?>
+  </div>
+  
+  <div id="menu">
+    <?php echo get_partial('global/menu'); ?>
+  </div>
+  
+  <div id="left">
+    &nbsp;
+  </div>
+  
+  <div id="right">
+    <?php if( has_slot('right') ): ?>
+      <?php echo get_slot('right'); ?>
+    <?php endif; ?>
+  </div>
+  
+  <div id="content">
+    <?php echo $sf_data->getRaw('sf_content') ?>
+  </div>
+  
+  <div id="footer">
+    <h1>Copyright Doctrine 2007</h1>
+  </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/cache/config/config_config_handlers.yml.php b/website/cache/config/config_config_handlers.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e4fbb12ad91c7ae7e161ba7fbb3207abdf4ae22
--- /dev/null
+++ b/website/cache/config/config_config_handlers.yml.php
@@ -0,0 +1,60 @@
+<?php
+// auto-generated by sfRootConfigHandler
+// date: 2007/08/31 10:38:25
+
+$this->handlers['config/autoload.yml'] = new sfAutoloadConfigHandler();
+$this->handlers['config/autoload.yml']->initialize();
+$this->handlers['config/php.yml'] = new sfPhpConfigHandler();
+$this->handlers['config/php.yml']->initialize();
+$this->handlers['config/databases.yml'] = new sfDatabaseConfigHandler();
+$this->handlers['config/databases.yml']->initialize();
+$this->handlers['config/settings.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/settings.yml']->initialize(array (
+  'prefix' => 'sf_',
+));
+$this->handlers['config/app.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/app.yml']->initialize(array (
+  'prefix' => 'app_',
+));
+$this->handlers['config/factories.yml'] = new sfFactoryConfigHandler();
+$this->handlers['config/factories.yml']->initialize();
+$this->handlers['config/bootstrap_compile.yml'] = new sfCompileConfigHandler();
+$this->handlers['config/bootstrap_compile.yml']->initialize();
+$this->handlers['config/core_compile.yml'] = new sfCompileConfigHandler();
+$this->handlers['config/core_compile.yml']->initialize();
+$this->handlers['config/filters.yml'] = new sfFilterConfigHandler();
+$this->handlers['config/filters.yml']->initialize();
+$this->handlers['config/logging.yml'] = new sfLoggingConfigHandler();
+$this->handlers['config/logging.yml']->initialize(array (
+  'prefix' => 'sf_logging_',
+));
+$this->handlers['config/routing.yml'] = new sfRoutingConfigHandler();
+$this->handlers['config/routing.yml']->initialize();
+$this->handlers['config/i18n.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/i18n.yml']->initialize(array (
+  'prefix' => 'sf_i18n_',
+));
+$this->handlers['modules/*/config/generator.yml'] = new sfGeneratorConfigHandler();
+$this->handlers['modules/*/config/generator.yml']->initialize();
+$this->handlers['modules/*/config/view.yml'] = new sfViewConfigHandler();
+$this->handlers['modules/*/config/view.yml']->initialize();
+$this->handlers['modules/*/config/mailer.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['modules/*/config/mailer.yml']->initialize(array (
+  'prefix' => 'sf_mailer_',
+  'module' => true,
+));
+$this->handlers['modules/*/config/security.yml'] = new sfSecurityConfigHandler();
+$this->handlers['modules/*/config/security.yml']->initialize();
+$this->handlers['modules/*/config/cache.yml'] = new sfCacheConfigHandler();
+$this->handlers['modules/*/config/cache.yml']->initialize();
+$this->handlers['modules/*/validate/*.yml'] = new sfValidatorConfigHandler();
+$this->handlers['modules/*/validate/*.yml']->initialize();
+$this->handlers['modules/*/config/module.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['modules/*/config/module.yml']->initialize(array (
+  'prefix' => 'mod_',
+  'module' => true,
+));
+$this->handlers['config/doctrine.yml'] = new sfDoctrineConfigHandler();
+$this->handlers['config/doctrine.yml']->initialize();
+$this->handlers['config/schemas.yml'] = new sfDoctrineSchemasConfigHandler();
+$this->handlers['config/schemas.yml']->initialize();
diff --git a/website/cache/config/config_doctrine.yml.php b/website/cache/config/config_doctrine.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..c35452b6c3946cd6a6cbdb6339a9fa9b5b429cd3
--- /dev/null
+++ b/website/cache/config/config_doctrine.yml.php
@@ -0,0 +1,10 @@
+<?php
+// auto-generated by sfDoctrineConfigHandler
+// date: 2007-08-31 10:38:25
+$default_attributes["ATTR_EXPORT"] = Doctrine::EXPORT_ALL;
+$default_attributes["ATTR_FETCHMODE"] = Doctrine::FETCH_IMMEDIATE;
+$default_attributes["ATTR_COLL_LIMIT"] = 5;
+$default_attributes["ATTR_LOCKMODE"] = Doctrine::LOCK_PESSIMISTIC;
+$default_attributes["ATTR_VLD"] = false;
+$default_attributes["ATTR_QUOTE_IDENTIFIER"] = false;
+
diff --git a/website/cache/frontend/dev/config/config_app.yml.php b/website/cache/frontend/dev/config/config_app.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/cache/frontend/dev/config/config_autoload.yml.php b/website/cache/frontend/dev/config/config_autoload.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..17f728388a1eafe65de9b917d510c9b0e07698ee
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_autoload.yml.php
@@ -0,0 +1,673 @@
+<?php
+// auto-generated by sfAutoloadConfigHandler
+// date: 2007/08/31 18:35:26
+return array(
+
+// symfony
+'sfAction' => '/usr/local/php5/lib/php/symfony/action/sfAction.class.php',
+'sfActions' => '/usr/local/php5/lib/php/symfony/action/sfActions.class.php',
+'sfActionStack' => '/usr/local/php5/lib/php/symfony/action/sfActionStack.class.php',
+'sfActionStackEntry' => '/usr/local/php5/lib/php/symfony/action/sfActionStackEntry.class.php',
+'sfComponent' => '/usr/local/php5/lib/php/symfony/action/sfComponent.class.php',
+'sfComponents' => '/usr/local/php5/lib/php/symfony/action/sfComponents.class.php',
+'sfEzComponentsBridge' => '/usr/local/php5/lib/php/symfony/addon/bridge/sfEzComponentsBridge.class.php',
+'sfZendFrameworkBridge' => '/usr/local/php5/lib/php/symfony/addon/bridge/sfZendFrameworkBridge.class.php',
+'sfCreoleDatabase' => '/usr/local/php5/lib/php/symfony/addon/creole/database/sfCreoleDatabase.class.php',
+'sfDebugConnection' => '/usr/local/php5/lib/php/symfony/addon/creole/drivers/sfDebugConnection.php',
+'sfMessageSource_Creole' => '/usr/local/php5/lib/php/symfony/addon/creole/i18n/sfMessageSource_Creole.class.php',
+'sfCreoleSessionStorage' => '/usr/local/php5/lib/php/symfony/addon/creole/storage/sfCreoleSessionStorage.class.php',
+'SfExtensionObjectBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfExtensionObjectBuilder.php',
+'SfExtensionPeerBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfExtensionPeerBuilder.php',
+'SfMapBuilderBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfMapBuilderBuilder.php',
+'SfMultiExtendObjectBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfMultiExtendObjectBuilder.php',
+'SfObjectBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfObjectBuilder.php',
+'SfPeerBuilder' => '/usr/local/php5/lib/php/symfony/addon/propel/builder/SfPeerBuilder.php',
+'sfPropelDatabase' => '/usr/local/php5/lib/php/symfony/addon/propel/database/sfPropelDatabase.class.php',
+'sfPropelDataRetriever' => '/usr/local/php5/lib/php/symfony/addon/propel/database/sfPropelDataRetriever.class.php',
+'sfPropelAdminGenerator' => '/usr/local/php5/lib/php/symfony/addon/propel/generator/sfPropelAdminGenerator.class.php',
+'sfPropelCrudGenerator' => '/usr/local/php5/lib/php/symfony/addon/propel/generator/sfPropelCrudGenerator.class.php',
+'sfPropelBehavior' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelBehavior.class.php',
+'sfPropelData' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelData.class.php',
+'sfPropelDatabaseSchema' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelDatabaseSchema.class.php',
+'sfPropelManyToMany' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelManyToMany.class.php',
+'sfPropelPager' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelPager.class.php',
+'sfPropelUniqueValidator' => '/usr/local/php5/lib/php/symfony/addon/propel/validator/sfPropelUniqueValidator.class.php',
+'sfData' => '/usr/local/php5/lib/php/symfony/addon/sfData.class.php',
+'sfMail' => '/usr/local/php5/lib/php/symfony/addon/sfMail.class.php',
+'sfPager' => '/usr/local/php5/lib/php/symfony/addon/sfPager.class.php',
+'sfCache' => '/usr/local/php5/lib/php/symfony/cache/sfCache.class.php',
+'sfFileCache' => '/usr/local/php5/lib/php/symfony/cache/sfFileCache.class.php',
+'sfFunctionCache' => '/usr/local/php5/lib/php/symfony/cache/sfFunctionCache.class.php',
+'sfProcessCache' => '/usr/local/php5/lib/php/symfony/cache/sfProcessCache.class.php',
+'sfSQLiteCache' => '/usr/local/php5/lib/php/symfony/cache/sfSQLiteCache.class.php',
+'sfAutoloadConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfAutoloadConfigHandler.class.php',
+'sfCacheConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfCacheConfigHandler.class.php',
+'sfCompileConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfCompileConfigHandler.class.php',
+'sfConfig' => '/usr/local/php5/lib/php/symfony/config/sfConfig.class.php',
+'sfConfigCache' => '/usr/local/php5/lib/php/symfony/config/sfConfigCache.class.php',
+'sfConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfConfigHandler.class.php',
+'sfDatabaseConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfDatabaseConfigHandler.class.php',
+'sfDefineEnvironmentConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfDefineEnvironmentConfigHandler.class.php',
+'sfFactoryConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfFactoryConfigHandler.class.php',
+'sfFilterConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfFilterConfigHandler.class.php',
+'sfGeneratorConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfGeneratorConfigHandler.class.php',
+'sfLoader' => '/usr/local/php5/lib/php/symfony/config/sfLoader.class.php',
+'sfLoggingConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfLoggingConfigHandler.class.php',
+'sfPhpConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfPhpConfigHandler.class.php',
+'sfRootConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfRootConfigHandler.class.php',
+'sfRoutingConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfRoutingConfigHandler.class.php',
+'sfSecurityConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfSecurityConfigHandler.class.php',
+'sfSimpleYamlConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfSimpleYamlConfigHandler.class.php',
+'sfValidatorConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfValidatorConfigHandler.class.php',
+'sfViewConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfViewConfigHandler.class.php',
+'sfYamlConfigHandler' => '/usr/local/php5/lib/php/symfony/config/sfYamlConfigHandler.class.php',
+'sfConsoleController' => '/usr/local/php5/lib/php/symfony/controller/sfConsoleController.class.php',
+'sfController' => '/usr/local/php5/lib/php/symfony/controller/sfController.class.php',
+'sfFrontWebController' => '/usr/local/php5/lib/php/symfony/controller/sfFrontWebController.class.php',
+'sfRouting' => '/usr/local/php5/lib/php/symfony/controller/sfRouting.class.php',
+'sfWebController' => '/usr/local/php5/lib/php/symfony/controller/sfWebController.class.php',
+'sfDatabase' => '/usr/local/php5/lib/php/symfony/database/sfDatabase.class.php',
+'sfDatabaseManager' => '/usr/local/php5/lib/php/symfony/database/sfDatabaseManager.class.php',
+'sfMySQLDatabase' => '/usr/local/php5/lib/php/symfony/database/sfMySQLDatabase.class.php',
+'sfPDODatabase' => '/usr/local/php5/lib/php/symfony/database/sfPDODatabase.class.php',
+'sfPostgreSQLDatabase' => '/usr/local/php5/lib/php/symfony/database/sfPostgreSQLDatabase.class.php',
+'sfDebug' => '/usr/local/php5/lib/php/symfony/debug/sfDebug.class.php',
+'sfTimer' => '/usr/local/php5/lib/php/symfony/debug/sfTimer.class.php',
+'sfTimerManager' => '/usr/local/php5/lib/php/symfony/debug/sfTimerManager.class.php',
+'sfWebDebug' => '/usr/local/php5/lib/php/symfony/debug/sfWebDebug.class.php',
+'sfActionException' => '/usr/local/php5/lib/php/symfony/exception/sfActionException.class.php',
+'sfAutoloadException' => '/usr/local/php5/lib/php/symfony/exception/sfAutoloadException.class.php',
+'sfCacheException' => '/usr/local/php5/lib/php/symfony/exception/sfCacheException.class.php',
+'sfConfigurationException' => '/usr/local/php5/lib/php/symfony/exception/sfConfigurationException.class.php',
+'sfContextException' => '/usr/local/php5/lib/php/symfony/exception/sfContextException.class.php',
+'sfControllerException' => '/usr/local/php5/lib/php/symfony/exception/sfControllerException.class.php',
+'sfDatabaseException' => '/usr/local/php5/lib/php/symfony/exception/sfDatabaseException.class.php',
+'sfError404Exception' => '/usr/local/php5/lib/php/symfony/exception/sfError404Exception.class.php',
+'sfException' => '/usr/local/php5/lib/php/symfony/exception/sfException.class.php',
+'sfFactoryException' => '/usr/local/php5/lib/php/symfony/exception/sfFactoryException.class.php',
+'sfFileException' => '/usr/local/php5/lib/php/symfony/exception/sfFileException.class.php',
+'sfFilterException' => '/usr/local/php5/lib/php/symfony/exception/sfFilterException.class.php',
+'sfForwardException' => '/usr/local/php5/lib/php/symfony/exception/sfForwardException.class.php',
+'sfInitializationException' => '/usr/local/php5/lib/php/symfony/exception/sfInitializationException.class.php',
+'sfParseException' => '/usr/local/php5/lib/php/symfony/exception/sfParseException.class.php',
+'sfRenderException' => '/usr/local/php5/lib/php/symfony/exception/sfRenderException.class.php',
+'sfSecurityException' => '/usr/local/php5/lib/php/symfony/exception/sfSecurityException.class.php',
+'sfStopException' => '/usr/local/php5/lib/php/symfony/exception/sfStopException.class.php',
+'sfStorageException' => '/usr/local/php5/lib/php/symfony/exception/sfStorageException.class.php',
+'sfValidatorException' => '/usr/local/php5/lib/php/symfony/exception/sfValidatorException.class.php',
+'sfViewException' => '/usr/local/php5/lib/php/symfony/exception/sfViewException.class.php',
+'sfBasicSecurityFilter' => '/usr/local/php5/lib/php/symfony/filter/sfBasicSecurityFilter.class.php',
+'sfCacheFilter' => '/usr/local/php5/lib/php/symfony/filter/sfCacheFilter.class.php',
+'sfCommonFilter' => '/usr/local/php5/lib/php/symfony/filter/sfCommonFilter.class.php',
+'sfExecutionFilter' => '/usr/local/php5/lib/php/symfony/filter/sfExecutionFilter.class.php',
+'sfFillInFormFilter' => '/usr/local/php5/lib/php/symfony/filter/sfFillInFormFilter.class.php',
+'sfFilter' => '/usr/local/php5/lib/php/symfony/filter/sfFilter.class.php',
+'sfFilterChain' => '/usr/local/php5/lib/php/symfony/filter/sfFilterChain.class.php',
+'sfFlashFilter' => '/usr/local/php5/lib/php/symfony/filter/sfFlashFilter.class.php',
+'sfRenderingFilter' => '/usr/local/php5/lib/php/symfony/filter/sfRenderingFilter.class.php',
+'sfSecurityFilter' => '/usr/local/php5/lib/php/symfony/filter/sfSecurityFilter.class.php',
+'sfWebDebugFilter' => '/usr/local/php5/lib/php/symfony/filter/sfWebDebugFilter.class.php',
+'sfAdminGenerator' => '/usr/local/php5/lib/php/symfony/generator/sfAdminGenerator.class.php',
+'sfAdminColumn' => '/usr/local/php5/lib/php/symfony/generator/sfAdminGenerator.class.php',
+'sfCrudGenerator' => '/usr/local/php5/lib/php/symfony/generator/sfCrudGenerator.class.php',
+'sfGenerator' => '/usr/local/php5/lib/php/symfony/generator/sfGenerator.class.php',
+'sfGeneratorManager' => '/usr/local/php5/lib/php/symfony/generator/sfGeneratorManager.class.php',
+'sfRichTextEditor' => '/usr/local/php5/lib/php/symfony/helper/sfRichTextEditor.class.php',
+'sfRichTextEditorFCK' => '/usr/local/php5/lib/php/symfony/helper/sfRichTextEditorFCK.class.php',
+'sfRichTextEditorTinyMCE' => '/usr/local/php5/lib/php/symfony/helper/sfRichTextEditorTinyMCE.class.php',
+'TGettext_MO' => '/usr/local/php5/lib/php/symfony/i18n/Gettext/MO.php',
+'TGettext_PO' => '/usr/local/php5/lib/php/symfony/i18n/Gettext/PO.php',
+'TGettext' => '/usr/local/php5/lib/php/symfony/i18n/Gettext/TGettext.class.php',
+'sfChoiceFormat' => '/usr/local/php5/lib/php/symfony/i18n/sfChoiceFormat.class.php',
+'sfCultureInfo' => '/usr/local/php5/lib/php/symfony/i18n/sfCultureInfo.class.php',
+'sfDateFormat' => '/usr/local/php5/lib/php/symfony/i18n/sfDateFormat.class.php',
+'sfDateTimeFormatInfo' => '/usr/local/php5/lib/php/symfony/i18n/sfDateTimeFormatInfo.class.php',
+'sfI18N' => '/usr/local/php5/lib/php/symfony/i18n/sfI18N.class.php',
+'sfIMessageSource' => '/usr/local/php5/lib/php/symfony/i18n/sfIMessageSource.class.php',
+'sfMessageCache' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageCache.class.php',
+'sfMessageFormat' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageFormat.class.php',
+'sfMessageSource' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageSource.class.php',
+'sfMessageSource_gettext' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageSource_gettext.class.php',
+'sfMessageSource_MySQL' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageSource_MySQL.class.php',
+'sfMessageSource_SQLite' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageSource_SQLite.class.php',
+'sfMessageSource_XLIFF' => '/usr/local/php5/lib/php/symfony/i18n/sfMessageSource_XLIFF.class.php',
+'sfNumberFormat' => '/usr/local/php5/lib/php/symfony/i18n/sfNumberFormat.class.php',
+'sfNumberFormatInfo' => '/usr/local/php5/lib/php/symfony/i18n/sfNumberFormatInfo.class.php',
+'sfFileLogger' => '/usr/local/php5/lib/php/symfony/log/sfLogger/sfFileLogger.class.php',
+'sfWebDebugLogger' => '/usr/local/php5/lib/php/symfony/log/sfLogger/sfWebDebugLogger.class.php',
+'sfLogger' => '/usr/local/php5/lib/php/symfony/log/sfLogger.class.php',
+'sfLogManager' => '/usr/local/php5/lib/php/symfony/log/sfLogManager.class.php',
+'sfConsoleRequest' => '/usr/local/php5/lib/php/symfony/request/sfConsoleRequest.class.php',
+'sfRequest' => '/usr/local/php5/lib/php/symfony/request/sfRequest.class.php',
+'sfWebRequest' => '/usr/local/php5/lib/php/symfony/request/sfWebRequest.class.php',
+'sfConsoleResponse' => '/usr/local/php5/lib/php/symfony/response/sfConsoleResponse.class.php',
+'sfResponse' => '/usr/local/php5/lib/php/symfony/response/sfResponse.class.php',
+'sfWebResponse' => '/usr/local/php5/lib/php/symfony/response/sfWebResponse.class.php',
+'sfMySQLSessionStorage' => '/usr/local/php5/lib/php/symfony/storage/sfMySQLSessionStorage.class.php',
+'sfPDOSessionStorage' => '/usr/local/php5/lib/php/symfony/storage/sfPDOSessionStorage.class.php',
+'sfPostgreSQLSessionStorage' => '/usr/local/php5/lib/php/symfony/storage/sfPostgreSQLSessionStorage.class.php',
+'sfSessionStorage' => '/usr/local/php5/lib/php/symfony/storage/sfSessionStorage.class.php',
+'sfSessionTestStorage' => '/usr/local/php5/lib/php/symfony/storage/sfSessionTestStorage.class.php',
+'sfStorage' => '/usr/local/php5/lib/php/symfony/storage/sfStorage.class.php',
+'sfTestBrowser' => '/usr/local/php5/lib/php/symfony/test/sfTestBrowser.class.php',
+'sfBasicSecurityUser' => '/usr/local/php5/lib/php/symfony/user/sfBasicSecurityUser.class.php',
+'sfSecurityUser' => '/usr/local/php5/lib/php/symfony/user/sfSecurityUser.class.php',
+'sfUser' => '/usr/local/php5/lib/php/symfony/user/sfUser.class.php',
+'sfBrowser' => '/usr/local/php5/lib/php/symfony/util/sfBrowser.class.php',
+'sfFakeRenderingFilter' => '/usr/local/php5/lib/php/symfony/util/sfBrowser.class.php',
+'sfContext' => '/usr/local/php5/lib/php/symfony/util/sfContext.class.php',
+'sfCore' => '/usr/local/php5/lib/php/symfony/util/sfCore.class.php',
+'sfDomCssSelector' => '/usr/local/php5/lib/php/symfony/util/sfDomCssSelector.class.php',
+'sfFillInForm' => '/usr/local/php5/lib/php/symfony/util/sfFillInForm.class.php',
+'sfFinder' => '/usr/local/php5/lib/php/symfony/util/sfFinder.class.php',
+'sfGlobToRegex' => '/usr/local/php5/lib/php/symfony/util/sfFinder.class.php',
+'sfNumberCompare' => '/usr/local/php5/lib/php/symfony/util/sfFinder.class.php',
+'sfInflector' => '/usr/local/php5/lib/php/symfony/util/sfInflector.class.php',
+'sfMixer' => '/usr/local/php5/lib/php/symfony/util/sfMixer.class.php',
+'sfParameterHolder' => '/usr/local/php5/lib/php/symfony/util/sfParameterHolder.class.php',
+'sfToolkit' => '/usr/local/php5/lib/php/symfony/util/sfToolkit.class.php',
+'sfYaml' => '/usr/local/php5/lib/php/symfony/util/sfYaml.class.php',
+'YAMLNode' => '/usr/local/php5/lib/php/symfony/util/Spyc.class.php',
+'Spyc' => '/usr/local/php5/lib/php/symfony/util/Spyc.class.php',
+'sfCallbackValidator' => '/usr/local/php5/lib/php/symfony/validator/sfCallbackValidator.class.php',
+'sfCompareValidator' => '/usr/local/php5/lib/php/symfony/validator/sfCompareValidator.class.php',
+'sfDateValidator' => '/usr/local/php5/lib/php/symfony/validator/sfDateValidator.class.php',
+'sfEmailValidator' => '/usr/local/php5/lib/php/symfony/validator/sfEmailValidator.class.php',
+'sfFileValidator' => '/usr/local/php5/lib/php/symfony/validator/sfFileValidator.class.php',
+'sfHtmlValidator' => '/usr/local/php5/lib/php/symfony/validator/sfHtmlValidator.class.php',
+'sfNumberValidator' => '/usr/local/php5/lib/php/symfony/validator/sfNumberValidator.class.php',
+'sfRegexValidator' => '/usr/local/php5/lib/php/symfony/validator/sfRegexValidator.class.php',
+'sfStringValidator' => '/usr/local/php5/lib/php/symfony/validator/sfStringValidator.class.php',
+'sfUrlValidator' => '/usr/local/php5/lib/php/symfony/validator/sfUrlValidator.class.php',
+'sfValidator' => '/usr/local/php5/lib/php/symfony/validator/sfValidator.class.php',
+'sfValidatorManager' => '/usr/local/php5/lib/php/symfony/validator/sfValidatorManager.class.php',
+'sfOutputEscaper' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaper.class.php',
+'Countable' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaperArrayDecorator.class.php',
+'sfOutputEscaperArrayDecorator' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaperArrayDecorator.class.php',
+'sfOutputEscaperGetterDecorator' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaperGetterDecorator.class.php',
+'sfOutputEscaperIteratorDecorator' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaperIteratorDecorator.class.php',
+'sfOutputEscaperObjectDecorator' => '/usr/local/php5/lib/php/symfony/view/escaper/sfOutputEscaperObjectDecorator.class.php',
+'sfMailView' => '/usr/local/php5/lib/php/symfony/view/sfMailView.class.php',
+'sfPartialView' => '/usr/local/php5/lib/php/symfony/view/sfPartialView.class.php',
+'sfPHPView' => '/usr/local/php5/lib/php/symfony/view/sfPHPView.class.php',
+'sfView' => '/usr/local/php5/lib/php/symfony/view/sfView.class.php',
+'sfViewCacheManager' => '/usr/local/php5/lib/php/symfony/view/sfViewCacheManager.class.php',
+
+// propel
+'DBAdapter' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBAdapter.php',
+'DBMSSQL' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBMSSQL.php',
+'DBMySQL' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBMySQL.php',
+'DBMySQLi' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBMySQLi.php',
+'DBNone' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBNone.php',
+'DBOracle' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBOracle.php',
+'DBPostgres' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBPostgres.php',
+'DBSQLite' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBSQLite.php',
+'DBSybase' => '/usr/local/php5/lib/php/symfony/vendor/propel/adapter/DBSybase.php',
+'BasicLogger' => '/usr/local/php5/lib/php/symfony/vendor/propel/logger/BasicLogger.php',
+'MojaviLogAdapter' => '/usr/local/php5/lib/php/symfony/vendor/propel/logger/MojaviLogAdapter.php',
+'ColumnMap' => '/usr/local/php5/lib/php/symfony/vendor/propel/map/ColumnMap.php',
+'DatabaseMap' => '/usr/local/php5/lib/php/symfony/vendor/propel/map/DatabaseMap.php',
+'MapBuilder' => '/usr/local/php5/lib/php/symfony/vendor/propel/map/MapBuilder.php',
+'TableMap' => '/usr/local/php5/lib/php/symfony/vendor/propel/map/TableMap.php',
+'ValidatorMap' => '/usr/local/php5/lib/php/symfony/vendor/propel/map/ValidatorMap.php',
+'BaseObject' => '/usr/local/php5/lib/php/symfony/vendor/propel/om/BaseObject.php',
+'Persistent' => '/usr/local/php5/lib/php/symfony/vendor/propel/om/Persistent.php',
+'PreOrderNodeIterator' => '/usr/local/php5/lib/php/symfony/vendor/propel/om/PreOrderNodeIterator.php',
+'Propel' => '/usr/local/php5/lib/php/symfony/vendor/propel/Propel.php',
+'PropelException' => '/usr/local/php5/lib/php/symfony/vendor/propel/PropelException.php',
+'BasePeer' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/BasePeer.php',
+'Criteria' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/Criteria.php',
+'CriterionIterator' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/Criteria.php',
+'Criterion' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/Criteria.php',
+'Join' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/Criteria.php',
+'PeerInfo' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/PeerInfo.php',
+'PropelPager' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/PropelPager.php',
+'Transaction' => '/usr/local/php5/lib/php/symfony/vendor/propel/util/Transaction.php',
+'BasicValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/BasicValidator.php',
+'MatchValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/MatchValidator.php',
+'MaxLengthValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/MaxLengthValidator.php',
+'MaxValueValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/MaxValueValidator.php',
+'MinLengthValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/MinLengthValidator.php',
+'MinValueValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/MinValueValidator.php',
+'NotMatchValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/NotMatchValidator.php',
+'RequiredValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/RequiredValidator.php',
+'UniqueValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/UniqueValidator.php',
+'ValidationFailed' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/ValidationFailed.php',
+'ValidValuesValidator' => '/usr/local/php5/lib/php/symfony/vendor/propel/validator/ValidValuesValidator.php',
+
+// creole
+'CallableStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/CallableStatement.php',
+'ConnectionCommon' => '/usr/local/php5/lib/php/symfony/vendor/creole/common/ConnectionCommon.php',
+'PreparedStatementCommon' => '/usr/local/php5/lib/php/symfony/vendor/creole/common/PreparedStatementCommon.php',
+'ResultSetCommon' => '/usr/local/php5/lib/php/symfony/vendor/creole/common/ResultSetCommon.php',
+'StatementCommon' => '/usr/local/php5/lib/php/symfony/vendor/creole/common/StatementCommon.php',
+'Connection' => '/usr/local/php5/lib/php/symfony/vendor/creole/Connection.php',
+'Creole' => '/usr/local/php5/lib/php/symfony/vendor/creole/Creole.php',
+'CreoleTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/CreoleTypes.php',
+'MSSQLDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/metadata/MSSQLDatabaseInfo.php',
+'MSSQLTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/metadata/MSSQLTableInfo.php',
+'MSSQLCallableStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLCallableStatement.php',
+'MSSQLConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLConnection.php',
+'MSSQLIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLIdGenerator.php',
+'MSSQLPreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLPreparedStatement.php',
+'MSSQLResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLResultSet.php',
+'MSSQLStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLStatement.php',
+'MSSQLTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mssql/MSSQLTypes.php',
+'MySQLDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/metadata/MySQLDatabaseInfo.php',
+'MySQLTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/metadata/MySQLTableInfo.php',
+'MySQLConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLConnection.php',
+'MySQLIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLIdGenerator.php',
+'MySQLPreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLPreparedStatement.php',
+'MySQLResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLResultSet.php',
+'MySQLStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLStatement.php',
+'MySQLTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysql/MySQLTypes.php',
+'MySQLiDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/metadata/MySQLiDatabaseInfo.php',
+'MySQLiTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/metadata/MySQLiTableInfo.php',
+'MySQLiConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/MySQLiConnection.php',
+'MySQLiIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/MySQLiIdGenerator.php',
+'MySQLiPreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/MySQLiPreparedStatement.php',
+'MySQLiResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/MySQLiResultSet.php',
+'MySQLiStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/mysqli/MySQLiStatement.php',
+'CodeBaseAdapter' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/adapters/CodeBaseAdapter.php',
+'MySQLAdapter' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/adapters/MySQLAdapter.php',
+'ODBCAdapter' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/adapters/ODBCAdapter.php',
+'ODBCDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/metadata/ODBCDatabaseInfo.php',
+'ODBCTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/metadata/ODBCTableInfo.php',
+'ODBCCachedResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCCachedResultSet.php',
+'ODBCConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCConnection.php',
+'ODBCResultResource' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCConnection.php',
+'ODBCIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCIdGenerator.php',
+'ODBCPreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCPreparedStatement.php',
+'ODBCResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCResultSet.php',
+'ODBCResultSetCommon' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCResultSetCommon.php',
+'ODBCStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCStatement.php',
+'ODBCTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/odbc/ODBCTypes.php',
+'OCI8DatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/metadata/OCI8DatabaseInfo.php',
+'OCI8TableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/metadata/OCI8TableInfo.php',
+'OCI8Connection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8Connection.php',
+'OCI8IdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8IdGenerator.php',
+'OCI8PreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8PreparedStatement.php',
+'OCI8ResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8ResultSet.php',
+'OCI8Statement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8Statement.php',
+'OCI8Types' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/oracle/OCI8Types.php',
+'PgSQLDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/metadata/PgSQLDatabaseInfo.php',
+'PgSQLTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/metadata/PgSQLTableInfo.php',
+'PgSQLConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLConnection.php',
+'PgSQLIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLIdGenerator.php',
+'PgSQLPreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLPreparedStatement.php',
+'PgSQLResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLResultSet.php',
+'PgSQLResultSetIterator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLResultSetIterator.php',
+'PgSQLStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLStatement.php',
+'PgSQLTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/pgsql/PgSQLTypes.php',
+'SQLiteDatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/metadata/SQLiteDatabaseInfo.php',
+'SQLiteTableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/metadata/SQLiteTableInfo.php',
+'SQLiteConnection' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteConnection.php',
+'SQLiteIdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteIdGenerator.php',
+'SQLitePreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLitePreparedStatement.php',
+'SQLiteResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteResultSet.php',
+'SQLiteResultSetIterator' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteResultSetIterator.php',
+'SQLiteStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteStatement.php',
+'SQLiteTypes' => '/usr/local/php5/lib/php/symfony/vendor/creole/drivers/sqlite/SQLiteTypes.php',
+'IdGenerator' => '/usr/local/php5/lib/php/symfony/vendor/creole/IdGenerator.php',
+'ColumnInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/ColumnInfo.php',
+'DatabaseInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/DatabaseInfo.php',
+'ForeignKeyInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/ForeignKeyInfo.php',
+'IndexInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/IndexInfo.php',
+'PrimaryKeyInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/PrimaryKeyInfo.php',
+'TableInfo' => '/usr/local/php5/lib/php/symfony/vendor/creole/metadata/TableInfo.php',
+'PreparedStatement' => '/usr/local/php5/lib/php/symfony/vendor/creole/PreparedStatement.php',
+'ResultSet' => '/usr/local/php5/lib/php/symfony/vendor/creole/ResultSet.php',
+'ResultSetIterator' => '/usr/local/php5/lib/php/symfony/vendor/creole/ResultSetIterator.php',
+'SQLException' => '/usr/local/php5/lib/php/symfony/vendor/creole/SQLException.php',
+'Statement' => '/usr/local/php5/lib/php/symfony/vendor/creole/Statement.php',
+'Blob' => '/usr/local/php5/lib/php/symfony/vendor/creole/util/Blob.php',
+'Clob' => '/usr/local/php5/lib/php/symfony/vendor/creole/util/Clob.php',
+'Lob' => '/usr/local/php5/lib/php/symfony/vendor/creole/util/Lob.php',
+'SQLStatementExtractor' => '/usr/local/php5/lib/php/symfony/vendor/creole/util/sql/SQLStatementExtractor.php',
+
+// propel addon
+'Propel' => '/usr/local/php5/lib/php/symfony/addon/propel/sfPropelAutoload.php',
+
+// plugins lib
+'Doctrine_Access' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Access.php',
+'Doctrine_Adapter_Db2_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2/Exception.php',
+'Doctrine_Adapter_Db2' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2.php',
+'Doctrine_Adapter_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Exception.php',
+'Doctrine_Adapter_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Interface.php',
+'Doctrine_Adapter_Mock' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mock.php',
+'Doctrine_Adapter_Mysqli' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mysqli.php',
+'Doctrine_Adapter_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Oracle.php',
+'Doctrine_Adapter_Statement_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Interface.php',
+'Doctrine_Adapter_Statement_Mock' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Mock.php',
+'Doctrine_Adapter_Statement' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement.php',
+'Doctrine_Adapter' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter.php',
+'Doctrine_AuditLog_Listener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog/Listener.php',
+'Doctrine_AuditLog' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog.php',
+'Doctrine_Cache_Apc' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Apc.php',
+'Doctrine_Cache_Array' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Array.php',
+'Doctrine_Cache_Db' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Db.php',
+'Doctrine_Cache_Driver' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Driver.php',
+'Doctrine_Cache_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Exception.php',
+'Doctrine_Cache_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Interface.php',
+'Doctrine_Cache_Memcache' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Memcache.php',
+'Doctrine_Cache' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache.php',
+'Doctrine_Collection_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Exception.php',
+'Doctrine_Collection_Iterator_Expandable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Expandable.php',
+'Doctrine_Collection_Iterator_Normal' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Normal.php',
+'Doctrine_Collection_Iterator_Offset' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Offset.php',
+'Doctrine_Collection_Iterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator.php',
+'Doctrine_Collection_Offset' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Offset.php',
+'Doctrine_Collection' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection.php',
+'Doctrine_Column' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Column.php',
+'Doctrine_Compiler_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler/Exception.php',
+'Doctrine_Compiler' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler.php',
+'Doctrine_Configurable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Configurable.php',
+'Doctrine_Connection_Common' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Common.php',
+'Doctrine_Connection_Db2' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Db2.php',
+'Doctrine_Connection_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Exception.php',
+'Doctrine_Connection_Firebird_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird/Exception.php',
+'Doctrine_Connection_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird.php',
+'Doctrine_Connection_Informix_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix/Exception.php',
+'Doctrine_Connection_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix.php',
+'Doctrine_Connection_Mock' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mock.php',
+'Doctrine_Connection_Module' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Module.php',
+'Doctrine_Connection_Mssql_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql/Exception.php',
+'Doctrine_Connection_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql.php',
+'Doctrine_Connection_Mysql_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql/Exception.php',
+'Doctrine_Connection_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql.php',
+'Doctrine_Connection_Oracle_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle/Exception.php',
+'Doctrine_Connection_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle.php',
+'Doctrine_Connection_Pgsql_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql/Exception.php',
+'Doctrine_Connection_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql.php',
+'Doctrine_Connection_Profiler_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler/Exception.php',
+'Doctrine_Connection_Profiler' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler.php',
+'Doctrine_Connection_Sqlite_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite/Exception.php',
+'Doctrine_Connection_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite.php',
+'Doctrine_Connection_Statement' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Statement.php',
+'Doctrine_Connection_UnitOfWork' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/UnitOfWork.php',
+'Doctrine_Connection' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection.php',
+'Doctrine_DataDict_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Exception.php',
+'Doctrine_DataDict_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Firebird.php',
+'Doctrine_DataDict_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Informix.php',
+'Doctrine_DataDict_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mssql.php',
+'Doctrine_DataDict_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mysql.php',
+'Doctrine_DataDict_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Oracle.php',
+'Doctrine_DataDict_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Pgsql.php',
+'Doctrine_DataDict_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Sqlite.php',
+'Doctrine_DataDict' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict.php',
+'Doctrine_DataType' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataType.php',
+'Doctrine_Db' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Db.php',
+'Doctrine_Event' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Event.php',
+'Doctrine_EventListener_Chain' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Chain.php',
+'Doctrine_EventListener_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Exception.php',
+'Doctrine_EventListener_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Interface.php',
+'Doctrine_EventListener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener.php',
+'Doctrine_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Exception.php',
+'Doctrine_Export_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Exception.php',
+'Doctrine_Export_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Firebird.php',
+'Doctrine_Export_Frontbase' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Frontbase.php',
+'Doctrine_Export_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mssql.php',
+'Doctrine_Export_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mysql.php',
+'Doctrine_Export_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Oracle.php',
+'Doctrine_Export_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Pgsql.php',
+'Doctrine_Export_Reporter' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Reporter.php',
+'Doctrine_Export_Schema_Xml' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Xml.php',
+'Doctrine_Export_Schema_Yml' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Yml.php',
+'Doctrine_Export_Schema' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema.php',
+'Doctrine_Export_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Sqlite.php',
+'Doctrine_Export' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export.php',
+'Doctrine_Expression_Driver' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Driver.php',
+'Doctrine_Expression_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Exception.php',
+'Doctrine_Expression_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Firebird.php',
+'Doctrine_Expression_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Informix.php',
+'Doctrine_Expression_Mock' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mock.php',
+'Doctrine_Expression_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mssql.php',
+'Doctrine_Expression_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mysql.php',
+'Doctrine_Expression_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Oracle.php',
+'Doctrine_Expression_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Pgsql.php',
+'Doctrine_Expression_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Sqlite.php',
+'Doctrine_Expression' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression.php',
+'Doctrine_File_Index' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File/Index.php',
+'Doctrine_File' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File.php',
+'Doctrine_Formatter' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Formatter.php',
+'Doctrine_Hook_Equal' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Equal.php',
+'Doctrine_Hook_Integer' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Integer.php',
+'Doctrine_Hook_Parser_Complex' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser/Complex.php',
+'Doctrine_Hook_Parser' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser.php',
+'Doctrine_Hook_WordLike' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/WordLike.php',
+'Doctrine_Hook' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook.php',
+'Doctrine_Hydrate_Array' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Array.php',
+'Doctrine_Hydrate_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Exception.php',
+'Doctrine_Hydrate_Record' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Record.php',
+'Doctrine_Hydrate' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate.php',
+'Doctrine_Import_Builder_BaseClass' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/BaseClass.php',
+'Doctrine_Import_Builder_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/Exception.php',
+'Doctrine_Import_Builder' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder.php',
+'Doctrine_Import_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Exception.php',
+'Doctrine_Import_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Firebird.php',
+'Doctrine_Import_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Informix.php',
+'Doctrine_Import_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mssql.php',
+'Doctrine_Import_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mysql.php',
+'Doctrine_Import_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Oracle.php',
+'Doctrine_Import_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Pgsql.php',
+'Doctrine_Import_Reader_Db' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Db.php',
+'Doctrine_Import_Reader_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Exception.php',
+'Doctrine_Import_Reader_Xml_Propel' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Propel.php',
+'Doctrine_Import_Reader' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader.php',
+'Doctrine_Import_Schema_Xml' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Xml.php',
+'Doctrine_Import_Schema_Yml' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Yml.php',
+'Doctrine_Import_Schema' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema.php',
+'Doctrine_Import_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Sqlite.php',
+'Doctrine_Import' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import.php',
+'Doctrine_IntegrityMapper' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/IntegrityMapper.php',
+'Doctrine_Lib' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Lib.php',
+'Doctrine_Locking_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Exception.php',
+'Doctrine_Locking_Manager_Pessimistic' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Manager/Pessimistic.php',
+'Doctrine_Manager_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager/Exception.php',
+'Doctrine_Manager' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager.php',
+'Doctrine_Node_AdjacencyList_LevelOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/LevelOrderIterator.php',
+'Doctrine_Node_AdjacencyList_PostOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PostOrderIterator.php',
+'Doctrine_Node_AdjacencyList_PreOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PreOrderIterator.php',
+'Doctrine_Node_AdjacencyList' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList.php',
+'Doctrine_Node_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Exception.php',
+'Doctrine_Node_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Interface.php',
+'Doctrine_Node_MaterializedPath_LevelOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/LevelOrderIterator.php',
+'Doctrine_Node_MaterializedPath_PostOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PostOrderIterator.php',
+'Doctrine_Node_MaterializedPath_PreOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PreOrderIterator.php',
+'Doctrine_Node_MaterializedPath' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath.php',
+'Doctrine_Node_NestedSet_LevelOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/LevelOrderIterator.php',
+'Doctrine_Node_NestedSet_PostOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PostOrderIterator.php',
+'Doctrine_Node_NestedSet_PreOrderIterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PreOrderIterator.php',
+'Doctrine_Node_NestedSet' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet.php',
+'Doctrine_Node' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node.php',
+'Doctrine_Null' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Null.php',
+'Doctrine_Object' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Object.php',
+'Doctrine_Overloadable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Overloadable.php',
+'Doctrine_Plugin' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Plugin.php',
+'Doctrine_Query_Abstract' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Abstract.php',
+'Doctrine_Query_Check' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Check.php',
+'Doctrine_Query_Condition' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Condition.php',
+'Doctrine_Query_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Exception.php',
+'Doctrine_Query_Filter_Chain' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Chain.php',
+'Doctrine_Query_Filter_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Interface.php',
+'Doctrine_Query_Filter' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter.php',
+'Doctrine_Query_From' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/From.php',
+'Doctrine_Query_Groupby' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Groupby.php',
+'Doctrine_Query_Having' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Having.php',
+'Doctrine_Query_JoinCondition' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/JoinCondition.php',
+'Doctrine_Query_Limit' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Limit.php',
+'Doctrine_Query_Offset' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Offset.php',
+'Doctrine_Query_Orderby' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Orderby.php',
+'Doctrine_Query_Parser' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Parser.php',
+'Doctrine_Query_Part' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Part.php',
+'Doctrine_Query_Select' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Select.php',
+'Doctrine_Query_Set' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Set.php',
+'Doctrine_Query_Where' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Where.php',
+'Doctrine_Query' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query.php',
+'Doctrine_RawSql_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql/Exception.php',
+'Doctrine_RawSql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql.php',
+'Doctrine_Record_Abstract' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Abstract.php',
+'Doctrine_Record_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Exception.php',
+'Doctrine_Record_Filter' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Filter.php',
+'Doctrine_Record_Iterator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Iterator.php',
+'Doctrine_Record_Listener_Chain' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Chain.php',
+'Doctrine_Record_Listener_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Interface.php',
+'Doctrine_Record_Listener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener.php',
+'Doctrine_Record_State_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/State/Exception.php',
+'Doctrine_Record' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record.php',
+'Doctrine_Relation_Association_Self' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association/Self.php',
+'Doctrine_Relation_Association' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association.php',
+'Doctrine_Relation_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Exception.php',
+'Doctrine_Relation_ForeignKey' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/ForeignKey.php',
+'Doctrine_Relation_LocalKey' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/LocalKey.php',
+'Doctrine_Relation_Nest' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Nest.php',
+'Doctrine_Relation_Parser_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser/Exception.php',
+'Doctrine_Relation_Parser' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser.php',
+'Doctrine_Relation' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation.php',
+'Doctrine_Schema_Column' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Column.php',
+'Doctrine_Schema_Database' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Database.php',
+'Doctrine_Schema_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Exception.php',
+'Doctrine_Schema_Object' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Object.php',
+'Doctrine_Schema_Relation' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Relation.php',
+'Doctrine_Schema_Table' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Table.php',
+'Doctrine_Schema' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema.php',
+'Doctrine_Search_Analyzer_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Exception.php',
+'Doctrine_Search_Analyzer_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Interface.php',
+'Doctrine_Search_Analyzer_Standard' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Standard.php',
+'Doctrine_Search_Analyzer' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer.php',
+'Doctrine_Search_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Exception.php',
+'Doctrine_Search_Indexer_Dir' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Dir.php',
+'Doctrine_Search_Indexer_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Exception.php',
+'Doctrine_Search_Indexer' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer.php',
+'Doctrine_Search_Listener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Listener.php',
+'Doctrine_Search_Parser' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Parser.php',
+'Doctrine_Search_Query' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Query.php',
+'Doctrine_Search_Record' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Record.php',
+'Doctrine_Search_Scorer' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Scorer.php',
+'Doctrine_Search_Template' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Template.php',
+'Doctrine_Search' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search.php',
+'Doctrine_Sequence_Db2' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Db2.php',
+'Doctrine_Sequence_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Exception.php',
+'Doctrine_Sequence_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Firebird.php',
+'Doctrine_Sequence_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Informix.php',
+'Doctrine_Sequence_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mssql.php',
+'Doctrine_Sequence_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mysql.php',
+'Doctrine_Sequence_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Oracle.php',
+'Doctrine_Sequence_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Pgsql.php',
+'Doctrine_Sequence_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Sqlite.php',
+'Doctrine_Sequence' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence.php',
+'Doctrine_Table_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Exception.php',
+'Doctrine_Table_Repository_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository/Exception.php',
+'Doctrine_Table_Repository' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository.php',
+'Doctrine_Table' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table.php',
+'Doctrine_Template_NestedSet' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/NestedSet.php',
+'Doctrine_Template_Searchable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Searchable.php',
+'Doctrine_Template_Taggable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Taggable.php',
+'Doctrine_Template_Versionable' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Versionable.php',
+'Doctrine_Template' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template.php',
+'Doctrine_Tokenizer' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tokenizer.php',
+'Doctrine_Transaction_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Exception.php',
+'Doctrine_Transaction_Firebird' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Firebird.php',
+'Doctrine_Transaction_Informix' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Informix.php',
+'Doctrine_Transaction_Mock' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mock.php',
+'Doctrine_Transaction_Mssql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mssql.php',
+'Doctrine_Transaction_Mysql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mysql.php',
+'Doctrine_Transaction_Oracle' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Oracle.php',
+'Doctrine_Transaction_Pgsql' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Pgsql.php',
+'Doctrine_Transaction_Sqlite' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Sqlite.php',
+'Doctrine_Transaction' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction.php',
+'Doctrine_Tree_AdjacencyList' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/AdjacencyList.php',
+'Doctrine_Tree_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Exception.php',
+'Doctrine_Tree_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Interface.php',
+'Doctrine_Tree_MaterializedPath' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/MaterializedPath.php',
+'Doctrine_Tree_NestedSet' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/NestedSet.php',
+'Doctrine_Tree' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree.php',
+'Doctrine_Util' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Util.php',
+'Doctrine_Validator_Country' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Country.php',
+'Doctrine_Validator_Creditcard' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Creditcard.php',
+'Doctrine_Validator_Date' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Date.php',
+'Doctrine_Validator_Email' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Email.php',
+'Doctrine_Validator_Enum' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Enum.php',
+'Doctrine_Validator_ErrorStack' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/ErrorStack.php',
+'Doctrine_Validator_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Exception.php',
+'Doctrine_Validator_HtmlColor' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Htmlcolor.php',
+'Doctrine_Validator_Interface' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Interface.class.php',
+'Doctrine_Validator_Ip' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Ip.php',
+'Doctrine_Validator_Minlength' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Minlength.php',
+'Doctrine_Validator_Nospace' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Nospace.php',
+'Doctrine_Validator_Notblank' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notblank.php',
+'Doctrine_Validator_Notnull' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notnull.php',
+'Doctrine_Validator_Range' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Range.php',
+'Doctrine_Validator_Regexp' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Regexp.php',
+'Doctrine_Validator_Unique' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unique.php',
+'Doctrine_Validator_Unsigned' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unsigned.php',
+'Doctrine_Validator_Usstate' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Usstate.php',
+'Doctrine_Validator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator.php',
+'Doctrine_View_Exception' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View/Exception.php',
+'Doctrine_View' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View.php',
+'Doctrine' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine.php',
+'sfDoctrine' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrine.class.php',
+'sfDoctrineAdminGenerator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineAdminGenerator.class.php',
+'sfDoctrineAdminColumn' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineAdminGenerator.class.php',
+'sfDoctrineConfigHandler' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConfigHandler.class.php',
+'sfDoctrineConnectionListener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConnectionListener.class.php',
+'sfDoctrineData' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineData.class.php',
+'sfDoctrineDatabase' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDatabase.class.php',
+'sfDoctrineDataRetriever' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDataRetriever.class.php',
+'sfDoctrineEventListener' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineEventListener.class.php',
+'sfDoctrineException' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineException.class.php',
+'sfDoctrinePager' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrinePager.class.php',
+'sfDoctrineQueryLogger' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineQueryLogger.class.php',
+'sfDoctrineRecord' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecord.class.php',
+'sfDoctrineRecordI18n' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecordI18n.class.php',
+'sfDoctrineSchemasConfigHandler' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineSchemasConfigHandler.class.php',
+'sfDoctrineUniqueValidator' => '/Users/jwage/Sites/doctrine_trunk/website/plugins/sfDoctrinePlugin/lib/sfDoctrineUniqueValidator.php',
+
+// plugins module lib
+
+// project
+
+// project model
+'BasesfGuardGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroup.class.php',
+'BasesfGuardGroupPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroupPermission.class.php',
+'BasesfGuardPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardPermission.class.php',
+'BasesfGuardRememberKey' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardRememberKey.class.php',
+'BasesfGuardUser' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUser.class.php',
+'BasesfGuardUserGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserGroup.class.php',
+'BasesfGuardUserPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserPermission.class.php',
+'sfGuardGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroup.class.php',
+'sfGuardGroupPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermission.class.php',
+'sfGuardGroupPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermissionTable.class.php',
+'sfGuardGroupTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupTable.class.php',
+'sfGuardPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermission.class.php',
+'sfGuardPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermissionTable.class.php',
+'sfGuardRememberKey' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKey.class.php',
+'sfGuardRememberKeyTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKeyTable.class.php',
+'sfGuardUser' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUser.class.php',
+'sfGuardUserGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroup.class.php',
+'sfGuardUserGroupTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroupTable.class.php',
+'sfGuardUserPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermission.class.php',
+'sfGuardUserPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermissionTable.class.php',
+'sfGuardUserTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserTable.class.php',
+
+// application
+'myUser' => '/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/lib/myUser.class.php',
+
+// module
+
+// Doctrine model classes
+'sfGuardGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroup.class.php',
+'sfGuardGroupPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermission.class.php',
+'sfGuardGroupPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermissionTable.class.php',
+'sfGuardGroupTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupTable.class.php',
+'sfGuardPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermission.class.php',
+'sfGuardPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermissionTable.class.php',
+'sfGuardRememberKey' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKey.class.php',
+'sfGuardRememberKeyTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKeyTable.class.php',
+'sfGuardUser' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUser.class.php',
+'sfGuardUserGroup' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroup.class.php',
+'sfGuardUserGroupTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroupTable.class.php',
+'sfGuardUserPermission' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermission.class.php',
+'sfGuardUserPermissionTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermissionTable.class.php',
+'sfGuardUserTable' => '/Users/jwage/Sites/doctrine_trunk/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserTable.class.php',
+);
diff --git a/website/cache/frontend/dev/config/config_config_handlers.yml.php b/website/cache/frontend/dev/config/config_config_handlers.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..b10cc3a1fc5fe6dcf0e6f3916102ba961db02a2a
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_config_handlers.yml.php
@@ -0,0 +1,60 @@
+<?php
+// auto-generated by sfRootConfigHandler
+// date: 2007/08/31 18:35:25
+
+$this->handlers['config/autoload.yml'] = new sfAutoloadConfigHandler();
+$this->handlers['config/autoload.yml']->initialize();
+$this->handlers['config/php.yml'] = new sfPhpConfigHandler();
+$this->handlers['config/php.yml']->initialize();
+$this->handlers['config/databases.yml'] = new sfDatabaseConfigHandler();
+$this->handlers['config/databases.yml']->initialize();
+$this->handlers['config/settings.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/settings.yml']->initialize(array (
+  'prefix' => 'sf_',
+));
+$this->handlers['config/app.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/app.yml']->initialize(array (
+  'prefix' => 'app_',
+));
+$this->handlers['config/factories.yml'] = new sfFactoryConfigHandler();
+$this->handlers['config/factories.yml']->initialize();
+$this->handlers['config/bootstrap_compile.yml'] = new sfCompileConfigHandler();
+$this->handlers['config/bootstrap_compile.yml']->initialize();
+$this->handlers['config/core_compile.yml'] = new sfCompileConfigHandler();
+$this->handlers['config/core_compile.yml']->initialize();
+$this->handlers['config/filters.yml'] = new sfFilterConfigHandler();
+$this->handlers['config/filters.yml']->initialize();
+$this->handlers['config/logging.yml'] = new sfLoggingConfigHandler();
+$this->handlers['config/logging.yml']->initialize(array (
+  'prefix' => 'sf_logging_',
+));
+$this->handlers['config/routing.yml'] = new sfRoutingConfigHandler();
+$this->handlers['config/routing.yml']->initialize();
+$this->handlers['config/i18n.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['config/i18n.yml']->initialize(array (
+  'prefix' => 'sf_i18n_',
+));
+$this->handlers['modules/*/config/generator.yml'] = new sfGeneratorConfigHandler();
+$this->handlers['modules/*/config/generator.yml']->initialize();
+$this->handlers['modules/*/config/view.yml'] = new sfViewConfigHandler();
+$this->handlers['modules/*/config/view.yml']->initialize();
+$this->handlers['modules/*/config/mailer.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['modules/*/config/mailer.yml']->initialize(array (
+  'prefix' => 'sf_mailer_',
+  'module' => true,
+));
+$this->handlers['modules/*/config/security.yml'] = new sfSecurityConfigHandler();
+$this->handlers['modules/*/config/security.yml']->initialize();
+$this->handlers['modules/*/config/cache.yml'] = new sfCacheConfigHandler();
+$this->handlers['modules/*/config/cache.yml']->initialize();
+$this->handlers['modules/*/validate/*.yml'] = new sfValidatorConfigHandler();
+$this->handlers['modules/*/validate/*.yml']->initialize();
+$this->handlers['modules/*/config/module.yml'] = new sfDefineEnvironmentConfigHandler();
+$this->handlers['modules/*/config/module.yml']->initialize(array (
+  'prefix' => 'mod_',
+  'module' => true,
+));
+$this->handlers['config/doctrine.yml'] = new sfDoctrineConfigHandler();
+$this->handlers['config/doctrine.yml']->initialize();
+$this->handlers['config/schemas.yml'] = new sfDoctrineSchemasConfigHandler();
+$this->handlers['config/schemas.yml']->initialize();
diff --git a/website/cache/frontend/dev/config/config_databases.yml.php b/website/cache/frontend/dev/config/config_databases.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..fe3432a3953d165b94a0fd23ccc879d482cc6754
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_databases.yml.php
@@ -0,0 +1,4 @@
+<?php
+// auto-generated by sfDatabaseConfigHandler
+// date: 2007/08/31 18:35:26
+
diff --git a/website/cache/frontend/dev/config/config_factories.yml.php b/website/cache/frontend/dev/config/config_factories.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc77db1999f5ebd738192c61cc3cc75c04df9765
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_factories.yml.php
@@ -0,0 +1,26 @@
+<?php
+// auto-generated by sfFactoryConfigHandler
+// date: 2007/08/31 18:35:26
+
+  $this->controller = sfController::newInstance(sfConfig::get('sf_factory_controller', 'sfFrontWebController'));
+  $this->request = sfRequest::newInstance(sfConfig::get('sf_factory_request', 'sfWebRequest'));
+  $this->response = sfResponse::newInstance(sfConfig::get('sf_factory_response', 'sfWebResponse'));
+  $this->storage = sfStorage::newInstance(sfConfig::get('sf_factory_storage', 'sfSessionStorage'));
+  $this->user = sfUser::newInstance(sfConfig::get('sf_factory_user', 'myUser'));
+  $this->controller->initialize($this);
+  $this->request->initialize($this, sfConfig::get('sf_factory_request_parameters', NULL), sfConfig::get('sf_factory_request_attributes', array()));
+  $this->response->initialize($this, sfConfig::get('sf_factory_response_parameters', NULL));
+  $this->storage->initialize($this, sfConfig::get('sf_factory_storage_parameters', array (
+  'session_name' => 'symfony',
+)));
+  $this->user->initialize($this, sfConfig::get('sf_factory_user_parameters', NULL));
+
+  if (sfConfig::get('sf_cache'))
+  {
+    $this->viewCacheManager = new sfViewCacheManager();
+    $this->viewCacheManager->initialize($this, sfConfig::get('sf_factory_view_cache', 'sfFileCache'), sfConfig::get('sf_factory_view_cache_parameters', array (
+  'automaticCleaningFactor' => 0,
+  'cacheDir' => '/Users/jwage/Sites/doctrine_trunk/website/cache/frontend/dev/template',
+)));
+ }
+
diff --git a/website/cache/frontend/dev/config/config_logging.yml.php b/website/cache/frontend/dev/config/config_logging.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..40a6c79787aec032c59a3a32a0ff117ed8f02c0b
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_logging.yml.php
@@ -0,0 +1,25 @@
+<?php
+// auto-generated by sfDefineEnvironmentConfigHandler
+// date: 2007/08/31 18:35:26
+sfConfig::add(array(
+  'sf_logging_enabled' => true,
+  'sf_logging_level' => 'debug',
+  'sf_logging_rotate' => false,
+  'sf_logging_period' => 7,
+  'sf_logging_history' => 10,
+  'sf_logging_purge' => true,
+));
+
+$logger = sfLogger::getInstance();
+$logger->setLogLevel(constant('SF_LOG_'.strtoupper(sfConfig::get('sf_logging_level'))));
+
+$log = new sfWebDebugLogger();
+$log->initialize(array (
+));
+$logger->registerLogger($log);
+
+$log = new sfFileLogger();
+$log->initialize(array (
+  'file' => '/Users/jwage/Sites/doctrine_trunk/website/log/frontend_dev.log',
+));
+$logger->registerLogger($log);
diff --git a/website/cache/frontend/dev/config/config_php.yml.php b/website/cache/frontend/dev/config/config_php.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..c532debb6b8bd2356b57d8df6501c06a66626e9a
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_php.yml.php
@@ -0,0 +1,21 @@
+<?php
+// auto-generated by sfPhpConfigHandler
+// date: 2007/08/31 18:35:26
+ini_set('magic_quotes_runtime', '');
+ini_set('log_errors', '1');
+ini_set('arg_separator.output', '&amp;');
+if (ini_get('magic_quotes_gpc') != false)
+{
+  sfLogger::getInstance()->warning('{sfPhpConfigHandler} php.ini "magic_quotes_gpc" key is better set to "false" (current value is "\'\'" - php.ini location: "/usr/local/php5/lib/php.ini")');
+}
+
+if (ini_get('register_globals') != false)
+{
+  sfLogger::getInstance()->warning('{sfPhpConfigHandler} php.ini "register_globals" key is better set to "false" (current value is "\'\'" - php.ini location: "/usr/local/php5/lib/php.ini")');
+}
+
+if (ini_get('session.auto_start') != false)
+{
+  sfLogger::getInstance()->warning('{sfPhpConfigHandler} php.ini "session.auto_start" key is better set to "false" (current value is "\'0\'" - php.ini location: "/usr/local/php5/lib/php.ini")');
+}
+
diff --git a/website/cache/frontend/dev/config/config_routing.yml.php b/website/cache/frontend/dev/config/config_routing.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..7001cbe6fcc8d7e4323608a6710a0d99fec0acc1
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_routing.yml.php
@@ -0,0 +1,214 @@
+<?php
+// auto-generated by sfRoutingConfigHandler
+// date: 2007/08/31 18:35:26
+$routes = sfRouting::getInstance();
+$routes->setRoutes(
+array (
+  'homepage' => 
+  array (
+    0 => '/',
+    1 => '/^[\\/]*$/',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'main',
+      'action' => 'index',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'api_documentation_page' => 
+  array (
+    0 => '/documentation/api/:q',
+    1 => '#^/documentation/api(?:\\/([^\\/]+))?$#',
+    2 => 
+    array (
+      0 => 'q',
+    ),
+    3 => 
+    array (
+      'q' => 1,
+    ),
+    4 => 
+    array (
+      'module' => 'api_documentation',
+      'action' => 'index',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'about' => 
+  array (
+    0 => '/about',
+    1 => '#^/about$#',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'main',
+      'action' => 'about',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'download' => 
+  array (
+    0 => '/download',
+    1 => '#^/download$#',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'main',
+      'action' => 'download',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'manual' => 
+  array (
+    0 => '/documentation/manual',
+    1 => '#^/documentation/manual$#',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'manual',
+      'action' => 'index',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'api_documentation' => 
+  array (
+    0 => '/documentation/api',
+    1 => '#^/documentation/api$#',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'api_documentation',
+      'action' => 'index',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'trac' => 
+  array (
+    0 => '/trac',
+    1 => '#^/trac$#',
+    2 => 
+    array (
+    ),
+    3 => 
+    array (
+    ),
+    4 => 
+    array (
+      'module' => 'main',
+      'action' => 'trac',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'default_symfony' => 
+  array (
+    0 => '/symfony/:action/*',
+    1 => '#^/symfony(?:\\/([^\\/]+))?(?:\\/(.*))?$#',
+    2 => 
+    array (
+      0 => 'action',
+    ),
+    3 => 
+    array (
+      'action' => 1,
+    ),
+    4 => 
+    array (
+      'module' => 'default',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'default_index' => 
+  array (
+    0 => '/:module',
+    1 => '#^(?:\\/([^\\/]+))?$#',
+    2 => 
+    array (
+      0 => 'module',
+    ),
+    3 => 
+    array (
+      'module' => 1,
+    ),
+    4 => 
+    array (
+      'action' => 'index',
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+  'default' => 
+  array (
+    0 => '/:module/:action/*',
+    1 => '#^(?:\\/([^\\/]+))?(?:\\/([^\\/]+))?(?:\\/(.*))?$#',
+    2 => 
+    array (
+      0 => 'module',
+      1 => 'action',
+    ),
+    3 => 
+    array (
+      'module' => 1,
+      'action' => 1,
+    ),
+    4 => 
+    array (
+    ),
+    5 => 
+    array (
+    ),
+    6 => '',
+  ),
+)
+);
diff --git a/website/cache/frontend/dev/config/config_settings.yml.php b/website/cache/frontend/dev/config/config_settings.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..e94575e33a9b90594157f20c6c857b6fcc98af95
--- /dev/null
+++ b/website/cache/frontend/dev/config/config_settings.yml.php
@@ -0,0 +1,60 @@
+<?php
+// auto-generated by sfDefineEnvironmentConfigHandler
+// date: 2007/08/31 18:35:26
+sfConfig::add(array(
+  'sf_default_module' => 'default',
+  'sf_default_action' => 'index',
+  'sf_error_404_module' => 'default',
+  'sf_error_404_action' => 'error404',
+  'sf_login_module' => 'default',
+  'sf_login_action' => 'login',
+  'sf_secure_module' => 'default',
+  'sf_secure_action' => 'secure',
+  'sf_module_disabled_module' => 'default',
+  'sf_module_disabled_action' => 'disabled',
+  'sf_unavailable_module' => 'default',
+  'sf_unavailable_action' => 'unavailable',
+  'sf_available' => true,
+  'sf_use_database' => true,
+  'sf_use_security' => true,
+  'sf_use_flash' => true,
+  'sf_i18n' => false,
+  'sf_check_symfony_version' => false,
+  'sf_use_process_cache' => true,
+  'sf_compressed' => false,
+  'sf_check_lock' => false,
+  'sf_escaping_strategy' => 'bc',
+  'sf_escaping_method' => 'ESC_ENTITIES',
+  'sf_suffix' => '.',
+  'sf_no_script_name' => false,
+  'sf_validation_error_prefix' => ' &darr;&nbsp;',
+  'sf_validation_error_suffix' => ' &nbsp;&darr;',
+  'sf_validation_error_class' => 'form_error',
+  'sf_validation_error_id_prefix' => 'error_for_',
+  'sf_cache' => false,
+  'sf_etag' => false,
+  'sf_web_debug' => true,
+  'sf_error_reporting' => 4095,
+  'sf_rich_text_js_dir' => 'js/tiny_mce',
+  'sf_prototype_web_dir' => '/sf/prototype',
+  'sf_admin_web_dir' => '/sf/sf_admin',
+  'sf_web_debug_web_dir' => '/sf/sf_web_debug',
+  'sf_calendar_web_dir' => '/sf/calendar',
+  'sf_standard_helpers' => array (
+  0 => 'Partial',
+  1 => 'Cache',
+  2 => 'Form',
+),
+  'sf_enabled_modules' => array (
+  0 => 'default',
+),
+  'sf_charset' => 'utf-8',
+  'sf_strip_comments' => true,
+  'sf_autoloading_functions' => NULL,
+  'sf_timeout' => 1800,
+  'sf_max_forwards' => 5,
+  'sf_path_info_array' => 'SERVER',
+  'sf_path_info_key' => 'PATH_INFO',
+  'sf_url_format' => 'PATH',
+  'sf_orm' => 'doctrine',
+));
diff --git a/website/cache/frontend/dev/config/modules_api_documentation_config_filters.yml.php b/website/cache/frontend/dev/config/modules_api_documentation_config_filters.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..0f01df97e7e1e80ad74e74191e0ef27f34ca28dc
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_api_documentation_config_filters.yml.php
@@ -0,0 +1,49 @@
+<?php
+// auto-generated by sfFilterConfigHandler
+// date: 2007/08/31 18:35:36
+
+list($class, $parameters) = (array) sfConfig::get('sf_rendering_filter', array('sfRenderingFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_web_debug_filter', array('sfWebDebugFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+// does this action require security?
+if ($actionInstance->isSecure())
+{
+  if (!in_array('sfSecurityUser', class_implements($this->context->getUser())))
+  {
+    $error = 'Security is enabled, but your sfUser implementation does not implement sfSecurityUser interface';
+    throw new sfSecurityException($error);
+  }
+  
+list($class, $parameters) = (array) sfConfig::get('sf_security_filter', array('sfBasicSecurityFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+}
+
+list($class, $parameters) = (array) sfConfig::get('sf_common_filter', array('sfCommonFilter', null));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_flash_filter', array('sfFlashFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_execution_filter', array('sfExecutionFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
diff --git a/website/cache/frontend/dev/config/modules_api_documentation_config_generator.yml.php b/website/cache/frontend/dev/config/modules_api_documentation_config_generator.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/cache/frontend/dev/config/modules_api_documentation_config_module.yml.php b/website/cache/frontend/dev/config/modules_api_documentation_config_module.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..01c8ba970cd4cecc833a87efbeb7b0897012dc8d
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_api_documentation_config_module.yml.php
@@ -0,0 +1,8 @@
+<?php
+// auto-generated by sfDefineEnvironmentConfigHandler
+// date: 2007/08/31 18:35:36
+sfConfig::add(array(
+  'mod_'.strtolower($moduleName).'_enabled' => true,
+  'mod_'.strtolower($moduleName).'_view_class' => 'sfPHP',
+  'mod_'.strtolower($moduleName).'_is_internal' => false,
+));
diff --git a/website/cache/frontend/dev/config/modules_api_documentation_config_security.yml.php b/website/cache/frontend/dev/config/modules_api_documentation_config_security.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..18e64a3fdaaa2e17bd4d2f36bcbfd73f2d3ff0ea
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_api_documentation_config_security.yml.php
@@ -0,0 +1,9 @@
+<?php
+// auto-generated by sfSecurityConfigHandler
+// date: 2007/08/31 18:35:36
+$this->security = array (
+  'all' => 
+  array (
+    'is_secure' => false,
+  ),
+);
diff --git a/website/cache/frontend/dev/config/modules_api_documentation_config_view.yml.php b/website/cache/frontend/dev/config/modules_api_documentation_config_view.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..96444442cc7a4292205e70c2cfeb9393a98147d4
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_api_documentation_config_view.yml.php
@@ -0,0 +1,28 @@
+<?php
+// auto-generated by sfViewConfigHandler
+// date: 2007/08/31 18:35:36
+$context  = $this->getContext();
+$response = $context->getResponse();
+
+
+  $templateName = $response->getParameter($this->moduleName.'_'.$this->actionName.'_template', $this->actionName, 'symfony/action/view');
+  $this->setTemplate($templateName.$this->viewName.$this->getExtension());
+
+
+
+  if (!$context->getRequest()->isXmlHttpRequest())
+  {
+    $this->setDecoratorTemplate('api_documentation_layout'.$this->getExtension());
+  }
+  $response->addHttpMeta('content-type', 'text/html', false);
+  $response->addMeta('title', 'Doctrine - Open Source PHP 5 ORM', false, false);
+  $response->addMeta('robots', 'index, follow', false, false);
+  $response->addMeta('description', 'Doctrine is a Open Source OO PHP 5 ORM', false, false);
+  $response->addMeta('keywords', 'doctrine, php, database, orm', false, false);
+  $response->addMeta('language', 'en', false, false);
+
+  $response->addStylesheet('main', '', array ());
+  $response->addStylesheet('layout', '', array ());
+  $response->addStylesheet('api_documentation', '', array ());
+
+
diff --git a/website/cache/frontend/dev/config/modules_manual_config_filters.yml.php b/website/cache/frontend/dev/config/modules_manual_config_filters.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5b9d61b47249d09d0debf1cc2bce192c8d131ea
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_manual_config_filters.yml.php
@@ -0,0 +1,49 @@
+<?php
+// auto-generated by sfFilterConfigHandler
+// date: 2007/08/31 18:35:26
+
+list($class, $parameters) = (array) sfConfig::get('sf_rendering_filter', array('sfRenderingFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_web_debug_filter', array('sfWebDebugFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+// does this action require security?
+if ($actionInstance->isSecure())
+{
+  if (!in_array('sfSecurityUser', class_implements($this->context->getUser())))
+  {
+    $error = 'Security is enabled, but your sfUser implementation does not implement sfSecurityUser interface';
+    throw new sfSecurityException($error);
+  }
+  
+list($class, $parameters) = (array) sfConfig::get('sf_security_filter', array('sfBasicSecurityFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+}
+
+list($class, $parameters) = (array) sfConfig::get('sf_common_filter', array('sfCommonFilter', null));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_flash_filter', array('sfFlashFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
+list($class, $parameters) = (array) sfConfig::get('sf_execution_filter', array('sfExecutionFilter', array (
+)));
+$filter = new $class();
+$filter->initialize($this->context, $parameters);
+$filterChain->register($filter);
+
diff --git a/website/cache/frontend/dev/config/modules_manual_config_generator.yml.php b/website/cache/frontend/dev/config/modules_manual_config_generator.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/cache/frontend/dev/config/modules_manual_config_module.yml.php b/website/cache/frontend/dev/config/modules_manual_config_module.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..01ee1f40111a19e59b363b1d22a701b50b9316bd
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_manual_config_module.yml.php
@@ -0,0 +1,8 @@
+<?php
+// auto-generated by sfDefineEnvironmentConfigHandler
+// date: 2007/08/31 18:35:26
+sfConfig::add(array(
+  'mod_'.strtolower($moduleName).'_enabled' => true,
+  'mod_'.strtolower($moduleName).'_view_class' => 'sfPHP',
+  'mod_'.strtolower($moduleName).'_is_internal' => false,
+));
diff --git a/website/cache/frontend/dev/config/modules_manual_config_security.yml.php b/website/cache/frontend/dev/config/modules_manual_config_security.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..fccba23a29947b9179208f97e5b70ffccb44225c
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_manual_config_security.yml.php
@@ -0,0 +1,9 @@
+<?php
+// auto-generated by sfSecurityConfigHandler
+// date: 2007/08/31 18:35:26
+$this->security = array (
+  'all' => 
+  array (
+    'is_secure' => false,
+  ),
+);
diff --git a/website/cache/frontend/dev/config/modules_manual_config_view.yml.php b/website/cache/frontend/dev/config/modules_manual_config_view.yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1c03920d3eac93e3bc0adf86140cce569af58d2
--- /dev/null
+++ b/website/cache/frontend/dev/config/modules_manual_config_view.yml.php
@@ -0,0 +1,31 @@
+<?php
+// auto-generated by sfViewConfigHandler
+// date: 2007/08/31 18:35:26
+$context  = $this->getContext();
+$response = $context->getResponse();
+
+
+  $templateName = $response->getParameter($this->moduleName.'_'.$this->actionName.'_template', $this->actionName, 'symfony/action/view');
+  $this->setTemplate($templateName.$this->viewName.$this->getExtension());
+
+
+
+  if (!$context->getRequest()->isXmlHttpRequest())
+  {
+    $this->setDecoratorTemplate('layout'.$this->getExtension());
+  }
+  $response->addHttpMeta('content-type', 'text/html', false);
+  $response->addMeta('title', 'Doctrine - Open Source PHP 5 ORM', false, false);
+  $response->addMeta('robots', 'index, follow', false, false);
+  $response->addMeta('description', 'Doctrine is a Open Source OO PHP 5 ORM', false, false);
+  $response->addMeta('keywords', 'doctrine, php, database, orm', false, false);
+  $response->addMeta('language', 'en', false, false);
+
+  $response->addStylesheet('main', '', array ());
+  $response->addStylesheet('layout', '', array ());
+  $response->addStylesheet('manual', '', array ());
+  $response->addJavascript('manual_toc');
+  $response->addJavascript('manual_tree');
+  $response->addJavascript('mootools.v1.11');
+
+
diff --git a/website/config/config.php b/website/config/config.php
new file mode 100644
index 0000000000000000000000000000000000000000..792104a65fe942dd35dbc2d48ba09d0e8c59f4a9
--- /dev/null
+++ b/website/config/config.php
@@ -0,0 +1,5 @@
+<?php
+
+// symfony directories
+$sf_symfony_lib_dir  = '/usr/local/php5/lib/php/symfony';
+$sf_symfony_data_dir = '/usr/local/php5/lib/php/data/symfony';
diff --git a/website/config/databases.yml b/website/config/databases.yml
new file mode 100644
index 0000000000000000000000000000000000000000..90f13b2e97c231cb6c4f8e9731fe885f7ad5fb75
--- /dev/null
+++ b/website/config/databases.yml
@@ -0,0 +1,5 @@
+#all:
+#  doctrine:
+#    class:          sfDoctrineDatabase
+#    param:
+#      dsn:          mysql://user:pass@localhost/doctrine
\ No newline at end of file
diff --git a/website/config/doctrine.db b/website/config/doctrine.db
new file mode 100644
index 0000000000000000000000000000000000000000..dc5f49c477bcfbcc519a0d59af9c49e2448f4ac4
Binary files /dev/null and b/website/config/doctrine.db differ
diff --git a/website/config/properties.ini b/website/config/properties.ini
new file mode 100644
index 0000000000000000000000000000000000000000..953a86fc8cf165b56513e343ceaba6ec6bdc6445
--- /dev/null
+++ b/website/config/properties.ini
@@ -0,0 +1,2 @@
+[symfony]
+  name=doctrine_website
diff --git a/website/config/rsync_exclude.txt b/website/config/rsync_exclude.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4b76ea817a06a11d347b676a46bbc1fa742ee767
--- /dev/null
+++ b/website/config/rsync_exclude.txt
@@ -0,0 +1,4 @@
+.svn
+/web/uploads/*
+/cache/*
+/log/*
diff --git a/website/data/sql/doctrine-sfGuardDoctrinePlugin.model.sql b/website/data/sql/doctrine-sfGuardDoctrinePlugin.model.sql
new file mode 100644
index 0000000000000000000000000000000000000000..edde626361553b52919681f4945ce492dea6cd41
--- /dev/null
+++ b/website/data/sql/doctrine-sfGuardDoctrinePlugin.model.sql
@@ -0,0 +1,63 @@
+CREATE TABLE sf_guard_user_permission(
+ created_at DATETIME,
+ updated_at DATETIME,
+ user_id INTEGER,
+ permission_id INTEGER,
+ PRIMARY KEY(user_id,
+ permission_id));
+
+CREATE TABLE sf_guard_user_group(
+ created_at DATETIME,
+ updated_at DATETIME,
+ group_id INTEGER,
+ user_id INTEGER,
+ PRIMARY KEY(group_id,
+ user_id));
+
+CREATE TABLE sf_guard_user(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME,
+ updated_at DATETIME,
+ username VARCHAR(128)
+NOT NULL,
+ algorithm VARCHAR(128)
+DEFAULT 'sha1' NOT NULL,
+ salt VARCHAR(128)
+NOT NULL,
+ password VARCHAR(128)
+NOT NULL,
+ last_login DATETIME,
+ is_active INTEGER DEFAULT 1 NOT NULL,
+ is_super_admin INTEGER DEFAULT 0 NOT NULL);
+
+CREATE TABLE sf_guard_remember_key(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME,
+ updated_at DATETIME,
+ user_id INTEGER,
+ remember_key VARCHAR(32),
+ ip_address VARCHAR(15));
+
+CREATE TABLE sf_guard_permission(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME,
+ updated_at DATETIME,
+ name VARCHAR(255)
+NOT NULL,
+ description VARCHAR(4000));
+
+CREATE TABLE sf_guard_group_permission(
+ created_at DATETIME,
+ updated_at DATETIME,
+ group_id INTEGER,
+ permission_id INTEGER NOT NULL,
+ PRIMARY KEY(group_id,
+ permission_id));
+
+CREATE TABLE sf_guard_group(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME,
+ updated_at DATETIME,
+ name VARCHAR(255)
+NOT NULL,
+ description VARCHAR(4000));
diff --git a/website/data/sql/doctrine.model.sql b/website/data/sql/doctrine.model.sql
new file mode 100644
index 0000000000000000000000000000000000000000..092bc2b04126100878530888e6b1b30602dce213
--- /dev/null
+++ b/website/data/sql/doctrine.model.sql
@@ -0,0 +1 @@
+;
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroup.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroup.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c7cc5c007e70fbe51651bfceb03bd1986c14b30
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroup.class.php
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardGroup extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_group');
+
+    $this->hasColumn('id', 'integer', 4, array (  'primary' => true,  'autoincrement' => true,));
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('name', 'string', 255, array (  'notnull' => true,));
+    $this->hasColumn('description', 'string', 4000, array ());
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasMany('sfGuardUser as users', array('refClass' => 'sfGuardUserGroup', 'local' => 'group_id', 'foreign' => 'user_id'));
+    $this->hasMany('sfGuardPermission as permissions', array('refClass' => 'sfGuardGroupPermission', 'local' => 'group_id', 'foreign' => 'permission_id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroupPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroupPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..dfa02e49b0d51cb3ff2f488aa2e161383159fdb0
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardGroupPermission.class.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardGroupPermission extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_group_permission');
+
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('group_id', 'integer', 4, array (  'primary' => true,));
+    $this->hasColumn('permission_id', 'integer', 4, array (  'notnull' => true,  'primary' => true,));
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasOne('sfGuardGroup as sfGuardGroup', array('local' => 'group_id', 'foreign' => 'id'));
+    $this->hasOne('sfGuardPermission as sfGuardPermission', array('local' => 'permission_id', 'foreign' => 'id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a36a21335e3ec573dd2471569a7f9422033f221
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardPermission.class.php
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardPermission extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_permission');
+
+    $this->hasColumn('id', 'integer', 4, array (  'primary' => true,  'autoincrement' => true,));
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('name', 'string', 255, array (  'notnull' => true,));
+    $this->hasColumn('description', 'string', 4000, array ());
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasMany('sfGuardUser as users', array('refClass' => 'sfGuardUserPermission', 'local' => 'permission_id', 'foreign' => 'user_id'));
+    $this->hasMany('sfGuardGroup as groups', array('refClass' => 'sfGuardGroupPermission', 'local' => 'permission_id', 'foreign' => 'group_id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardRememberKey.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardRememberKey.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..57651a8f21d6bb30d4523c6431c0033aede1e471
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardRememberKey.class.php
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardRememberKey extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_remember_key');
+
+    $this->hasColumn('id', 'integer', 4, array (  'primary' => true,  'autoincrement' => true,));
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('user_id', 'integer', 4, array (  'primary' => true,));
+    $this->hasColumn('remember_key', 'string', 32, array ());
+    $this->hasColumn('ip_address', 'string', 15, array (  'primary' => true,));
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasOne('sfGuardUser as user', array('local' => 'user_id', 'foreign' => 'id', 'onDelete' => 'CASCADE'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUser.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUser.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..98e64c73850e2c139540aae85867693553fffda3
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUser.class.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardUser extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_user');
+
+    $this->hasColumn('id', 'integer', 4, array (  'primary' => true,  'autoincrement' => true,));
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('username', 'string', 128, array (  'notnull' => true,));
+    $this->hasColumn('algorithm', 'string', 128, array (  'default' => 'sha1',  'notnull' => true,));
+    $this->hasColumn('salt', 'string', 128, array (  'notnull' => true,));
+    $this->hasColumn('password', 'string', 128, array (  'notnull' => true,));
+    $this->hasColumn('last_login', 'timestamp', null, array ());
+    $this->hasColumn('is_active', 'boolean', null, array (  'default' => 1,  'notnull' => true,));
+    $this->hasColumn('is_super_admin', 'boolean', null, array (  'default' => 0,  'notnull' => true,));
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasMany('sfGuardGroup as groups', array('refClass' => 'sfGuardUserGroup', 'local' => 'user_id', 'foreign' => 'group_id'));
+    $this->hasMany('sfGuardPermission as permissions', array('refClass' => 'sfGuardUserPermission', 'local' => 'user_id', 'foreign' => 'permission_id'));
+    $this->hasMany('sfGuardRememberKey as remember_key', array('local' => 'id', 'foreign' => 'user_id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserGroup.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserGroup.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..dbb85972fb48fd35a8f6577d48103e249f39a2ab
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserGroup.class.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardUserGroup extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_user_group');
+
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('group_id', 'integer', 4, array (  'primary' => true,));
+    $this->hasColumn('user_id', 'integer', 4, array (  'primary' => true,));
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasOne('sfGuardGroup as sfGuardGroup', array('local' => 'group_id', 'foreign' => 'id'));
+    $this->hasOne('sfGuardUser as sfGuardUser', array('local' => 'user_id', 'foreign' => 'id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ee3b8606c89ec8a9195b266dbafdedd5a0171ae
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/generated/BasesfGuardUserPermission.class.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Base class; DO NOT EDIT
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class BasesfGuardUserPermission extends sfDoctrineRecord
+{
+  
+  
+  public function setTableDefinition()
+  {
+    $this->setTableName('sf_guard_user_permission');
+
+    $this->hasColumn('created_at', 'timestamp', null, array ());
+    $this->hasColumn('updated_at', 'timestamp', null, array ());
+    $this->hasColumn('user_id', 'integer', 4, array (  'primary' => true,));
+    $this->hasColumn('permission_id', 'integer', 4, array (  'primary' => true,));
+  }
+  
+
+  
+  public function setUp()
+  {
+    $this->hasOne('sfGuardUser as sfGuardUser', array('local' => 'user_id', 'foreign' => 'id'));
+    $this->hasOne('sfGuardPermission as sfGuardPermission', array('local' => 'permission_id', 'foreign' => 'id'));
+  }
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroup.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroup.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f0256d8dfe164a1e287514e2cf7ebbf99522c6b
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroup.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardGroup extends PluginsfGuardGroup
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c30dbf144aa4bde9c6451ecfdadbff4787e3815b
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermission.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardGroupPermission extends PluginsfGuardGroupPermission
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermissionTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermissionTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..26325d110e0aef3331ff474d1db6d000ad9a6f75
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupPermissionTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardGroupPermissionTable extends PluginsfGuardGroupPermissionTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..7aa602ec569718071c19d882302255377852cba8
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardGroupTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardGroupTable extends PluginsfGuardGroupTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cceb4875c815f0a19c05e205083cc71bceb98e8
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermission.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardPermission extends PluginsfGuardPermission
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermissionTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermissionTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..40522d966f8485b6de519d85e85bcdc77bc96356
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardPermissionTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardPermissionTable extends PluginsfGuardPermissionTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKey.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKey.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..b52d37bbbf23a22cf5d729f8466c07094a96bf08
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKey.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardRememberKey extends PluginsfGuardRememberKey
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKeyTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKeyTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..a273167922335b36c0ca6c5bc959b107dc689d2f
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardRememberKeyTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardRememberKeyTable extends PluginsfGuardRememberKeyTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUser.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUser.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc19771fb9b06aa48d0df1f03af2a4758e18328d
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUser.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUser extends PluginsfGuardUser
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroup.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroup.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ba64fb003898cfebf8c67c648869fd139a80025
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroup.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUserGroup extends PluginsfGuardUserGroup
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroupTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroupTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad30562267c2fc541218fbfdbcb8cb6ad772cdfa
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserGroupTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUserGroupTable extends PluginsfGuardUserGroupTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermission.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermission.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..450baf58e0f5e8cbfa239357f24409ec73c54438
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermission.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model class
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUserPermission extends PluginsfGuardUserPermission
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermissionTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermissionTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..46ccffc4fb1d426ae47be86394cdff0d0c70bef3
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserPermissionTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUserPermissionTable extends PluginsfGuardUserPermissionTable
+{
+  
+}
diff --git a/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserTable.class.php b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserTable.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..2eacda4604bdfe866b550129b90539a7c08cad98
--- /dev/null
+++ b/website/lib/model/doctrine/sfGuardDoctrinePlugin/sfGuardUserTable.class.php
@@ -0,0 +1,10 @@
+<?php
+/*
+ * Edit this file to customise your model table
+ *
+ * auto-generated by the sfDoctrine plugin
+ */
+class sfGuardUserTable extends PluginsfGuardUserTable
+{
+  
+}
diff --git a/website/log/frontend_dev.log b/website/log/frontend_dev.log
new file mode 100644
index 0000000000000000000000000000000000000000..b3c31eed3850b0a86ac16e5463a092790744d4fa
--- /dev/null
+++ b/website/log/frontend_dev.log
@@ -0,0 +1,11000 @@
+Aug 31 10:24:54 symfony [info] {sfRouting} connect "/"
+Aug 31 10:24:54 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 10:24:54 symfony [info] {sfRouting} connect "/:module"
+Aug 31 10:24:54 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 10:24:54 symfony [info] {sfContext} initialization
+Aug 31 10:24:54 symfony [info] {sfController} initialization
+Aug 31 10:24:54 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:24:54 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:24:54 symfony [info] {sfController} dispatch request
+Aug 31 10:24:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:24:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:24:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:24:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:24:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:24:54 symfony [info] {sfAction} call "defaultActions->executeIndex()"
+Aug 31 10:24:54 symfony [info] {sfView} initialize view for "default/index"
+Aug 31 10:24:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/indexSuccess.php"
+Aug 31 10:24:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:24:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:24:54 symfony [info] {sfFilter} render to client
+Aug 31 10:24:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:24:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:24:54 symfony [info] {sfResponse} send content (22480 o)
+Aug 31 10:24:54 symfony [info] {sfTimerManager} Configuration 44.70 ms (10)
+Aug 31 10:24:54 symfony [info] {sfTimerManager} Action "default/index" 0.19 ms (1)
+Aug 31 10:24:54 symfony [info] {sfTimerManager} View "Success" for "default/index" 27.66 ms (1)
+Aug 31 10:27:28 symfony [info] {sfContext} initialization
+Aug 31 10:27:28 symfony [info] {sfController} initialization
+Aug 31 10:27:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:27:28 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:27:28 symfony [info] {sfController} dispatch request
+Aug 31 10:27:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:27:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:27:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:27:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:27:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:27:28 symfony [info] {sfAction} call "defaultActions->executeIndex()"
+Aug 31 10:27:28 symfony [info] {sfView} initialize view for "default/index"
+Aug 31 10:27:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/indexSuccess.php"
+Aug 31 10:27:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:27:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:27:28 symfony [info] {sfFilter} render to client
+Aug 31 10:27:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:27:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:27:28 symfony [info] {sfResponse} send content (21526 o)
+Aug 31 10:27:28 symfony [info] {sfTimerManager} Configuration 4.35 ms (11)
+Aug 31 10:27:28 symfony [info] {sfTimerManager} Action "default/index" 0.16 ms (1)
+Aug 31 10:27:28 symfony [info] {sfTimerManager} View "Success" for "default/index" 18.50 ms (1)
+Aug 31 10:36:14 symfony [info] {sfContext} initialization
+Aug 31 10:36:14 symfony [info] {sfController} initialization
+Aug 31 10:36:14 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:36:14 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:36:14 symfony [info] {sfController} dispatch request
+Aug 31 10:36:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:36:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:36:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:36:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:36:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:36:14 symfony [info] {sfAction} call "defaultActions->executeIndex()"
+Aug 31 10:36:14 symfony [info] {sfView} initialize view for "default/index"
+Aug 31 10:36:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/indexSuccess.php"
+Aug 31 10:36:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:36:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:36:14 symfony [info] {sfFilter} render to client
+Aug 31 10:36:14 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:36:14 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:36:14 symfony [info] {sfResponse} send content (21528 o)
+Aug 31 10:36:14 symfony [info] {sfTimerManager} Configuration 26.88 ms (13)
+Aug 31 10:36:14 symfony [info] {sfTimerManager} Action "default/index" 0.16 ms (1)
+Aug 31 10:36:14 symfony [info] {sfTimerManager} View "Success" for "default/index" 18.42 ms (1)
+Aug 31 10:36:44 symfony [info] {sfRouting} connect "/"
+Aug 31 10:36:44 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 10:36:44 symfony [info] {sfRouting} connect "/:module"
+Aug 31 10:36:44 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 10:36:44 symfony [info] {sfContext} initialization
+Aug 31 10:36:44 symfony [info] {sfController} initialization
+Aug 31 10:36:44 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:36:44 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:37:23 symfony [info] {sfRouting} connect "/"
+Aug 31 10:37:23 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 10:37:23 symfony [info] {sfRouting} connect "/:module"
+Aug 31 10:37:23 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 10:37:23 symfony [info] {sfContext} initialization
+Aug 31 10:37:23 symfony [info] {sfController} initialization
+Aug 31 10:37:23 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:37:23 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:40:07 symfony [info] {sfRouting} connect "/"
+Aug 31 10:40:07 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 10:40:07 symfony [info] {sfRouting} connect "/:module"
+Aug 31 10:40:07 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 10:40:07 symfony [info] {sfContext} initialization
+Aug 31 10:40:07 symfony [info] {sfController} initialization
+Aug 31 10:40:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:07 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:40:07 symfony [info] {sfController} dispatch request
+Aug 31 10:40:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:07 symfony [info] {sfAction} call "defaultActions->executeIndex()"
+Aug 31 10:40:07 symfony [info] {sfView} initialize view for "default/index"
+Aug 31 10:40:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/indexSuccess.php"
+Aug 31 10:40:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:40:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:40:07 symfony [info] {sfFilter} render to client
+Aug 31 10:40:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:07 symfony [info] {sfResponse} send content (22761 o)
+Aug 31 10:40:07 symfony [info] {sfTimerManager} Configuration 39.44 ms (11)
+Aug 31 10:40:07 symfony [info] {sfTimerManager} Action "default/index" 0.14 ms (1)
+Aug 31 10:40:07 symfony [info] {sfTimerManager} View "Success" for "default/index" 20.77 ms (1)
+Aug 31 10:40:08 symfony [info] {sfContext} initialization
+Aug 31 10:40:08 symfony [info] {sfController} initialization
+Aug 31 10:40:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:08 symfony [info] {sfRequest} request parameters array (  'module' => 'default',  'action' => 'index',)
+Aug 31 10:40:08 symfony [info] {sfController} dispatch request
+Aug 31 10:40:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:08 symfony [info] {sfAction} call "defaultActions->executeIndex()"
+Aug 31 10:40:08 symfony [info] {sfView} initialize view for "default/index"
+Aug 31 10:40:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/indexSuccess.php"
+Aug 31 10:40:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:40:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 10:40:08 symfony [info] {sfFilter} render to client
+Aug 31 10:40:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:08 symfony [info] {sfResponse} send content (21527 o)
+Aug 31 10:40:08 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 10:40:08 symfony [info] {sfTimerManager} Action "default/index" 0.14 ms (1)
+Aug 31 10:40:08 symfony [info] {sfTimerManager} View "Success" for "default/index" 16.02 ms (1)
+Aug 31 10:40:22 symfony [info] {sfRouting} connect "/"
+Aug 31 10:40:22 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 10:40:22 symfony [info] {sfRouting} connect "/:module"
+Aug 31 10:40:22 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 10:40:22 symfony [info] {sfContext} initialization
+Aug 31 10:40:22 symfony [info] {sfController} initialization
+Aug 31 10:40:22 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:22 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:40:22 symfony [info] {sfController} dispatch request
+Aug 31 10:40:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:22 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:40:22 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:40:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:40:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:22 symfony [info] {sfFilter} render to client
+Aug 31 10:40:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:22 symfony [info] {sfResponse} send content (20800 o)
+Aug 31 10:40:22 symfony [info] {sfTimerManager} Configuration 44.78 ms (13)
+Aug 31 10:40:22 symfony [info] {sfTimerManager} Action "main/index" 0.17 ms (1)
+Aug 31 10:40:22 symfony [info] {sfTimerManager} View "Success" for "main/index" 20.90 ms (1)
+Aug 31 10:40:23 symfony [info] {sfContext} initialization
+Aug 31 10:40:23 symfony [info] {sfController} initialization
+Aug 31 10:40:23 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:23 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:40:23 symfony [info] {sfController} dispatch request
+Aug 31 10:40:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:23 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:40:23 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:40:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:40:23 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:23 symfony [info] {sfFilter} render to client
+Aug 31 10:40:23 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:23 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:23 symfony [info] {sfResponse} send content (19565 o)
+Aug 31 10:40:23 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 10:40:23 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:40:23 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.19 ms (1)
+Aug 31 10:40:27 symfony [info] {sfContext} initialization
+Aug 31 10:40:27 symfony [info] {sfController} initialization
+Aug 31 10:40:27 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:27 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:40:27 symfony [info] {sfController} dispatch request
+Aug 31 10:40:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:27 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:40:27 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:40:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:40:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:27 symfony [info] {sfFilter} render to client
+Aug 31 10:40:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:27 symfony [info] {sfResponse} send content (19565 o)
+Aug 31 10:40:27 symfony [info] {sfTimerManager} Configuration 5.11 ms (12)
+Aug 31 10:40:27 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:40:27 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.16 ms (1)
+Aug 31 10:40:29 symfony [info] {sfContext} initialization
+Aug 31 10:40:29 symfony [info] {sfController} initialization
+Aug 31 10:40:29 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:40:29 symfony [info] {sfController} dispatch request
+Aug 31 10:40:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:29 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:40:29 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:40:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:40:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:29 symfony [info] {sfFilter} render to client
+Aug 31 10:40:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:29 symfony [info] {sfResponse} send content (19565 o)
+Aug 31 10:40:29 symfony [info] {sfTimerManager} Configuration 5.48 ms (12)
+Aug 31 10:40:29 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:40:29 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.40 ms (1)
+Aug 31 10:40:40 symfony [info] {sfContext} initialization
+Aug 31 10:40:40 symfony [info] {sfController} initialization
+Aug 31 10:40:40 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:40:40 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:40:40 symfony [info] {sfController} dispatch request
+Aug 31 10:40:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:40:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:40:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:40:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:40:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:40:40 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:40:40 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:40:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:40:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:40:40 symfony [info] {sfFilter} render to client
+Aug 31 10:40:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:40:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:40:40 symfony [info] {sfResponse} send content (19566 o)
+Aug 31 10:40:40 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 10:40:40 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:40:40 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.26 ms (1)
+Aug 31 10:42:05 symfony [info] {sfContext} initialization
+Aug 31 10:42:05 symfony [info] {sfController} initialization
+Aug 31 10:42:05 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:42:05 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:42:05 symfony [info] {sfController} dispatch request
+Aug 31 10:42:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:42:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:42:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:42:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:42:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:42:05 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:42:05 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:42:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:42:05 symfony [info] {sfFilter} render to client
+Aug 31 10:42:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:42:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:42:05 symfony [info] {sfResponse} send content (19565 o)
+Aug 31 10:42:05 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 10:42:05 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:42:05 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.18 ms (1)
+Aug 31 10:43:00 symfony [info] {sfContext} initialization
+Aug 31 10:43:00 symfony [info] {sfController} initialization
+Aug 31 10:43:00 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:43:00 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:43:00 symfony [info] {sfController} dispatch request
+Aug 31 10:43:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:43:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:43:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:43:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:43:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:43:00 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:43:00 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:43:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:43:00 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:43:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:43:00 symfony [info] {sfFilter} render to client
+Aug 31 10:43:00 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:43:00 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:43:00 symfony [info] {sfResponse} send content (19566 o)
+Aug 31 10:43:00 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 10:43:00 symfony [info] {sfTimerManager} Action "main/index" 21.58 ms (1)
+Aug 31 10:43:00 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.43 ms (1)
+Aug 31 10:43:01 symfony [info] {sfContext} initialization
+Aug 31 10:43:01 symfony [info] {sfController} initialization
+Aug 31 10:43:01 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:43:01 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:43:01 symfony [info] {sfController} dispatch request
+Aug 31 10:43:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:43:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:43:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:43:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:43:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:43:01 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:43:01 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:43:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:43:01 symfony [info] {sfFilter} render to client
+Aug 31 10:43:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:43:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:43:01 symfony [info] {sfResponse} send content (19567 o)
+Aug 31 10:43:01 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 10:43:01 symfony [info] {sfTimerManager} Action "main/index" 20.31 ms (1)
+Aug 31 10:43:01 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.32 ms (1)
+Aug 31 10:43:17 symfony [info] {sfContext} initialization
+Aug 31 10:43:17 symfony [info] {sfController} initialization
+Aug 31 10:43:17 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:43:17 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:43:17 symfony [info] {sfController} dispatch request
+Aug 31 10:43:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:43:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:43:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:43:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:43:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:43:17 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:43:17 symfony [err] {sfException} 
+Aug 31 10:44:03 symfony [info] {sfContext} initialization
+Aug 31 10:44:03 symfony [info] {sfController} initialization
+Aug 31 10:44:03 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:44:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:44:03 symfony [info] {sfController} dispatch request
+Aug 31 10:44:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:44:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:44:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:44:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:44:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:44:03 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:44:03 symfony [err] {sfException} 
+Aug 31 10:44:04 symfony [info] {sfContext} initialization
+Aug 31 10:44:04 symfony [info] {sfController} initialization
+Aug 31 10:44:04 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:44:04 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:44:04 symfony [info] {sfController} dispatch request
+Aug 31 10:44:04 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:44:04 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:44:04 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:44:04 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:44:04 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:44:04 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:44:04 symfony [err] {sfException} 
+Aug 31 10:44:13 symfony [info] {sfContext} initialization
+Aug 31 10:44:14 symfony [info] {sfContext} initialization
+Aug 31 10:44:19 symfony [info] {sfContext} initialization
+Aug 31 10:44:19 symfony [info] {sfController} initialization
+Aug 31 10:44:19 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:44:19 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:44:19 symfony [info] {sfController} dispatch request
+Aug 31 10:44:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:44:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:44:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:44:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:44:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:44:19 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:44:19 symfony [err] {sfException} 
+Aug 31 10:45:42 symfony [info] {sfContext} initialization
+Aug 31 10:45:42 symfony [info] {sfController} initialization
+Aug 31 10:45:42 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:45:42 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:45:42 symfony [info] {sfController} dispatch request
+Aug 31 10:45:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:45:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:45:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:45:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:45:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:45:42 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:45:43 symfony [err] {sfException} 
+Aug 31 10:45:57 symfony [info] {sfContext} initialization
+Aug 31 10:45:57 symfony [info] {sfController} initialization
+Aug 31 10:45:57 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:45:57 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:45:57 symfony [info] {sfController} dispatch request
+Aug 31 10:45:57 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:45:57 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:45:57 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:45:57 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:45:57 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:45:57 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:45:57 symfony [err] {sfException} 
+Aug 31 10:47:08 symfony [info] {sfContext} initialization
+Aug 31 10:47:08 symfony [info] {sfController} initialization
+Aug 31 10:47:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:47:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:47:08 symfony [info] {sfController} dispatch request
+Aug 31 10:47:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:47:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:47:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:47:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:47:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:47:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:47:08 symfony [err] {sfException} 
+Aug 31 10:48:56 symfony [info] {sfContext} initialization
+Aug 31 10:48:56 symfony [info] {sfController} initialization
+Aug 31 10:48:56 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:48:56 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:48:56 symfony [info] {sfController} dispatch request
+Aug 31 10:48:56 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:48:56 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:48:56 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:48:56 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:48:56 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:48:56 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:48:56 symfony [err] {sfException} 
+Aug 31 10:49:50 symfony [info] {sfContext} initialization
+Aug 31 10:49:50 symfony [info] {sfController} initialization
+Aug 31 10:49:50 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:49:50 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:49:50 symfony [info] {sfController} dispatch request
+Aug 31 10:49:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:49:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:49:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:49:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:49:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:49:50 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:50:00 symfony [info] {sfContext} initialization
+Aug 31 10:50:00 symfony [info] {sfController} initialization
+Aug 31 10:50:00 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:50:00 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:50:00 symfony [info] {sfController} dispatch request
+Aug 31 10:50:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:50:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:50:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:50:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:50:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:50:00 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:50:06 symfony [info] {sfContext} initialization
+Aug 31 10:50:06 symfony [info] {sfController} initialization
+Aug 31 10:50:06 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:50:06 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:50:06 symfony [info] {sfController} dispatch request
+Aug 31 10:50:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:50:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:50:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:50:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:50:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:50:06 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:50:29 symfony [info] {sfContext} initialization
+Aug 31 10:50:30 symfony [info] {sfController} initialization
+Aug 31 10:50:30 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:50:30 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:50:30 symfony [info] {sfController} dispatch request
+Aug 31 10:50:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:50:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:50:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:50:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:50:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:50:30 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:50:30 symfony [err] {sfException} 
+Aug 31 10:51:41 symfony [info] {sfContext} initialization
+Aug 31 10:51:42 symfony [info] {sfContext} initialization
+Aug 31 10:51:47 symfony [info] {sfContext} initialization
+Aug 31 10:51:47 symfony [info] {sfContext} initialization
+Aug 31 10:51:58 symfony [info] {sfContext} initialization
+Aug 31 10:51:58 symfony [info] {sfController} initialization
+Aug 31 10:51:58 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:51:58 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:51:58 symfony [info] {sfController} dispatch request
+Aug 31 10:51:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:51:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:51:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:51:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:51:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:51:58 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:51:58 symfony [err] {sfException} 
+Aug 31 10:52:06 symfony [info] {sfContext} initialization
+Aug 31 10:52:06 symfony [info] {sfController} initialization
+Aug 31 10:52:06 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:52:06 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:52:06 symfony [info] {sfController} dispatch request
+Aug 31 10:52:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:52:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:52:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:52:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:52:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:52:06 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:52:06 symfony [err] {sfException} 
+Aug 31 10:52:45 symfony [info] {sfContext} initialization
+Aug 31 10:52:45 symfony [info] {sfController} initialization
+Aug 31 10:52:45 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:52:45 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:52:45 symfony [info] {sfController} dispatch request
+Aug 31 10:52:45 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:52:45 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:52:45 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:52:45 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:52:45 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:52:45 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:52:46 symfony [err] {sfException} 
+Aug 31 10:54:22 symfony [info] {sfContext} initialization
+Aug 31 10:54:22 symfony [info] {sfController} initialization
+Aug 31 10:54:22 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:54:22 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:54:22 symfony [info] {sfController} dispatch request
+Aug 31 10:54:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:54:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:54:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:54:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:54:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:54:22 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:54:22 symfony [info] {sfDoctrine Statement} executeQuery : INSERT INTO sf_guard_user (id, created_at, updated_at, username, algorithm, salt, password, last_login, is_active, is_super_admin) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - (, 2007-08-31 10:54:22, 2007-08-31 10:54:22, test, sha1, , , , 1, 0 )
+Aug 31 10:54:22 symfony [err] {sfException} 
+Aug 31 10:54:23 symfony [info] {sfContext} initialization
+Aug 31 10:54:23 symfony [info] {sfController} initialization
+Aug 31 10:54:23 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:54:23 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:54:23 symfony [info] {sfController} dispatch request
+Aug 31 10:54:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:54:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:54:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:54:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:54:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:54:23 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:54:23 symfony [info] {sfDoctrine Statement} executeQuery : INSERT INTO sf_guard_user (id, created_at, updated_at, username, algorithm, salt, password, last_login, is_active, is_super_admin) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - (, 2007-08-31 10:54:23, 2007-08-31 10:54:23, test, sha1, , , , 1, 0 )
+Aug 31 10:54:23 symfony [err] {sfException} 
+Aug 31 10:54:31 symfony [info] {sfContext} initialization
+Aug 31 10:54:31 symfony [info] {sfController} initialization
+Aug 31 10:54:31 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:54:31 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:54:33 symfony [info] {sfContext} initialization
+Aug 31 10:54:33 symfony [info] {sfController} initialization
+Aug 31 10:54:33 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:54:33 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:54:33 symfony [info] {sfController} dispatch request
+Aug 31 10:54:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:54:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:54:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:54:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:54:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:54:33 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:54:33 symfony [info] {sfDoctrine Statement} executeQuery : INSERT INTO sf_guard_user (id, created_at, updated_at, username, algorithm, salt, password, last_login, is_active, is_super_admin) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - (, 2007-08-31 10:54:33, 2007-08-31 10:54:33, test, sha1, , , , 1, 0 )
+Aug 31 10:54:33 symfony [err] {sfException} 
+Aug 31 10:54:55 symfony [info] {sfContext} initialization
+Aug 31 10:54:55 symfony [info] {sfController} initialization
+Aug 31 10:54:55 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:54:55 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:54:55 symfony [info] {sfController} dispatch request
+Aug 31 10:54:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:54:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:54:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:54:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:54:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:54:55 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:54:55 symfony [info] {sfDoctrine Statement} executeQuery : INSERT INTO sf_guard_user (id, created_at, updated_at, username, algorithm, salt, password, last_login, is_active, is_super_admin) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - (, 2007-08-31 10:54:55, 2007-08-31 10:54:55, test, sha1, , , , 1, 0 )
+Aug 31 10:54:55 symfony [err] {sfException} 
+Aug 31 10:55:18 symfony [info] {sfContext} initialization
+Aug 31 10:55:18 symfony [info] {sfController} initialization
+Aug 31 10:55:18 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:55:18 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:55:18 symfony [info] {sfController} dispatch request
+Aug 31 10:55:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:55:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:55:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:55:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:55:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:55:18 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:55:18 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:55:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:55:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:55:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:55:18 symfony [info] {sfFilter} render to client
+Aug 31 10:55:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:55:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:55:18 symfony [info] {sfResponse} send content (19566 o)
+Aug 31 10:55:18 symfony [info] {sfTimerManager} Configuration 4.96 ms (12)
+Aug 31 10:55:18 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:55:18 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.23 ms (1)
+Aug 31 10:57:16 symfony [info] {sfContext} initialization
+Aug 31 10:57:16 symfony [info] {sfController} initialization
+Aug 31 10:57:16 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 10:57:16 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 10:57:16 symfony [info] {sfController} dispatch request
+Aug 31 10:57:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 10:57:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 10:57:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 10:57:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 10:57:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 10:57:16 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 10:57:16 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 10:57:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 10:57:16 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:57:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 10:57:16 symfony [info] {sfFilter} render to client
+Aug 31 10:57:16 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 10:57:16 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 10:57:16 symfony [info] {sfResponse} send content (19687 o)
+Aug 31 10:57:16 symfony [info] {sfTimerManager} Configuration 5.64 ms (12)
+Aug 31 10:57:16 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 10:57:16 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.63 ms (1)
+Aug 31 11:00:40 symfony [info] {sfContext} initialization
+Aug 31 11:00:40 symfony [info] {sfController} initialization
+Aug 31 11:00:40 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:00:40 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:00:40 symfony [info] {sfController} dispatch request
+Aug 31 11:00:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:00:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:00:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:00:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:00:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:00:40 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:00:40 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:00:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:00:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:00:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:00:40 symfony [info] {sfFilter} render to client
+Aug 31 11:00:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:00:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:00:40 symfony [info] {sfResponse} send content (20070 o)
+Aug 31 11:00:40 symfony [info] {sfTimerManager} Configuration 27.15 ms (13)
+Aug 31 11:00:40 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:00:40 symfony [info] {sfTimerManager} View "Success" for "main/index" 37.93 ms (1)
+Aug 31 11:07:22 symfony [info] {sfContext} initialization
+Aug 31 11:07:22 symfony [info] {sfController} initialization
+Aug 31 11:07:22 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:07:22 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:07:22 symfony [info] {sfController} dispatch request
+Aug 31 11:07:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:07:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:07:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:07:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:07:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:07:22 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:07:22 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:07:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:07:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:07:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:07:22 symfony [info] {sfFilter} render to client
+Aug 31 11:07:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:07:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:07:22 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:07:22 symfony [info] {sfTimerManager} Configuration 5.42 ms (12)
+Aug 31 11:07:22 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:07:22 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.57 ms (1)
+Aug 31 11:07:38 symfony [info] {sfContext} initialization
+Aug 31 11:07:38 symfony [info] {sfController} initialization
+Aug 31 11:07:38 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:07:38 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:07:38 symfony [info] {sfController} dispatch request
+Aug 31 11:07:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:07:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:07:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:07:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:07:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:07:38 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:07:38 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:07:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:07:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:07:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:07:38 symfony [info] {sfFilter} render to client
+Aug 31 11:07:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:07:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:07:38 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:07:38 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 11:07:38 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:07:38 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.03 ms (1)
+Aug 31 11:08:28 symfony [info] {sfContext} initialization
+Aug 31 11:08:28 symfony [info] {sfController} initialization
+Aug 31 11:08:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:08:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:08:28 symfony [info] {sfController} dispatch request
+Aug 31 11:08:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:08:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:08:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:08:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:08:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:08:28 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:08:28 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:08:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:08:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:08:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:08:28 symfony [info] {sfFilter} render to client
+Aug 31 11:08:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:08:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:08:28 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:08:28 symfony [info] {sfTimerManager} Configuration 5.59 ms (12)
+Aug 31 11:08:28 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:08:28 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.97 ms (1)
+Aug 31 11:08:52 symfony [info] {sfContext} initialization
+Aug 31 11:08:52 symfony [info] {sfController} initialization
+Aug 31 11:08:52 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:08:52 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:08:52 symfony [info] {sfController} dispatch request
+Aug 31 11:08:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:08:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:08:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:08:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:08:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:08:52 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:08:52 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:08:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:08:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:08:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:08:52 symfony [info] {sfFilter} render to client
+Aug 31 11:08:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:08:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:08:52 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:08:52 symfony [info] {sfTimerManager} Configuration 5.01 ms (12)
+Aug 31 11:08:52 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:08:52 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.80 ms (1)
+Aug 31 11:09:15 symfony [info] {sfContext} initialization
+Aug 31 11:09:15 symfony [info] {sfController} initialization
+Aug 31 11:09:15 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:09:15 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:09:15 symfony [info] {sfController} dispatch request
+Aug 31 11:09:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:09:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:09:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:09:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:09:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:09:15 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:09:15 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:09:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:09:15 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:15 symfony [info] {sfFilter} render to client
+Aug 31 11:09:15 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:09:15 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:09:15 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:09:15 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 11:09:15 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:09:15 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.41 ms (1)
+Aug 31 11:09:28 symfony [info] {sfContext} initialization
+Aug 31 11:09:28 symfony [info] {sfController} initialization
+Aug 31 11:09:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:09:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:09:28 symfony [info] {sfController} dispatch request
+Aug 31 11:09:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:09:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:09:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:09:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:09:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:09:28 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:09:28 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:09:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:09:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:28 symfony [info] {sfFilter} render to client
+Aug 31 11:09:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:09:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:09:28 symfony [info] {sfResponse} send content (20067 o)
+Aug 31 11:09:28 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 11:09:28 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:09:28 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.68 ms (1)
+Aug 31 11:09:32 symfony [info] {sfContext} initialization
+Aug 31 11:09:32 symfony [info] {sfController} initialization
+Aug 31 11:09:32 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:09:32 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:09:32 symfony [info] {sfController} dispatch request
+Aug 31 11:09:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:09:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:09:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:09:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:09:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:09:32 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:09:32 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:09:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:09:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:32 symfony [info] {sfFilter} render to client
+Aug 31 11:09:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:09:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:09:32 symfony [info] {sfResponse} send content (20068 o)
+Aug 31 11:09:32 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 11:09:32 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:09:32 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.95 ms (1)
+Aug 31 11:09:49 symfony [info] {sfContext} initialization
+Aug 31 11:09:49 symfony [info] {sfController} initialization
+Aug 31 11:09:49 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:09:49 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:09:49 symfony [info] {sfController} dispatch request
+Aug 31 11:09:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:09:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:09:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:09:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:09:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:09:49 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:09:49 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:09:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:09:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:09:49 symfony [info] {sfFilter} render to client
+Aug 31 11:09:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:09:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:09:49 symfony [info] {sfResponse} send content (20068 o)
+Aug 31 11:09:49 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 11:09:49 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:09:49 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.73 ms (1)
+Aug 31 11:10:07 symfony [info] {sfContext} initialization
+Aug 31 11:10:07 symfony [info] {sfController} initialization
+Aug 31 11:10:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:10:07 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:10:07 symfony [info] {sfController} dispatch request
+Aug 31 11:10:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:10:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:10:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:10:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:10:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:10:07 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:10:07 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:10:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:10:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:07 symfony [info] {sfFilter} render to client
+Aug 31 11:10:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:10:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:10:07 symfony [info] {sfResponse} send content (20068 o)
+Aug 31 11:10:07 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 11:10:07 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:10:07 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.91 ms (1)
+Aug 31 11:10:11 symfony [info] {sfContext} initialization
+Aug 31 11:10:11 symfony [info] {sfController} initialization
+Aug 31 11:10:11 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:10:11 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:10:11 symfony [info] {sfController} dispatch request
+Aug 31 11:10:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:10:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:10:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:10:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:10:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:10:11 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:10:11 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:10:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:10:11 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:11 symfony [info] {sfFilter} render to client
+Aug 31 11:10:11 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:10:11 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:10:11 symfony [info] {sfResponse} send content (20068 o)
+Aug 31 11:10:11 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 11:10:11 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:10:11 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.30 ms (1)
+Aug 31 11:10:36 symfony [info] {sfContext} initialization
+Aug 31 11:10:36 symfony [info] {sfController} initialization
+Aug 31 11:10:36 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:10:36 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:10:36 symfony [info] {sfController} dispatch request
+Aug 31 11:10:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:10:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:10:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:10:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:10:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:10:36 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:10:36 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:10:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:10:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:10:36 symfony [info] {sfFilter} render to client
+Aug 31 11:10:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:10:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:10:36 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:10:36 symfony [info] {sfTimerManager} Configuration 5.22 ms (12)
+Aug 31 11:10:36 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:10:36 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.18 ms (1)
+Aug 31 11:11:37 symfony [info] {sfContext} initialization
+Aug 31 11:11:37 symfony [info] {sfController} initialization
+Aug 31 11:11:37 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:11:37 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:11:37 symfony [info] {sfController} dispatch request
+Aug 31 11:11:37 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:11:37 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:11:37 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:11:37 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:11:37 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:11:37 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:11:37 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:11:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:11:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:11:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:11:37 symfony [info] {sfFilter} render to client
+Aug 31 11:11:37 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:11:37 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:11:37 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:11:37 symfony [info] {sfTimerManager} Configuration 4.96 ms (12)
+Aug 31 11:11:37 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:11:37 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.41 ms (1)
+Aug 31 11:14:01 symfony [info] {sfContext} initialization
+Aug 31 11:14:02 symfony [info] {sfController} initialization
+Aug 31 11:14:02 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:14:02 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:14:02 symfony [info] {sfController} dispatch request
+Aug 31 11:14:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:14:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:14:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:14:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:14:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:14:02 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:14:02 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:14:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:14:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:14:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:14:02 symfony [info] {sfFilter} render to client
+Aug 31 11:14:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:14:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:14:02 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:14:02 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 11:14:02 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:14:02 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.18 ms (1)
+Aug 31 11:14:03 symfony [info] {sfContext} initialization
+Aug 31 11:14:03 symfony [info] {sfController} initialization
+Aug 31 11:14:03 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:14:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:14:03 symfony [info] {sfController} dispatch request
+Aug 31 11:14:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:14:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:14:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:14:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:14:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:14:03 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:14:03 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:14:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:14:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:14:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:14:03 symfony [info] {sfFilter} render to client
+Aug 31 11:14:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:14:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:14:03 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:14:03 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 11:14:03 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:14:03 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.41 ms (1)
+Aug 31 11:16:19 symfony [info] {sfContext} initialization
+Aug 31 11:16:19 symfony [info] {sfController} initialization
+Aug 31 11:16:19 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:16:19 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:16:19 symfony [info] {sfController} dispatch request
+Aug 31 11:16:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:16:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:16:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:16:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:16:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:16:19 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:16:19 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:16:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:16:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:19 symfony [info] {sfFilter} render to client
+Aug 31 11:16:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:16:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:16:19 symfony [info] {sfResponse} send content (20069 o)
+Aug 31 11:16:19 symfony [info] {sfTimerManager} Configuration 5.30 ms (12)
+Aug 31 11:16:19 symfony [info] {sfTimerManager} Action "main/index" 0.17 ms (1)
+Aug 31 11:16:19 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.16 ms (1)
+Aug 31 11:16:33 symfony [info] {sfContext} initialization
+Aug 31 11:16:33 symfony [info] {sfController} initialization
+Aug 31 11:16:33 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:16:33 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:16:33 symfony [info] {sfController} dispatch request
+Aug 31 11:16:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:16:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:16:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:16:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:16:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:16:33 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:16:33 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:16:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:16:33 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:33 symfony [info] {sfFilter} render to client
+Aug 31 11:16:33 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:16:33 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:16:33 symfony [info] {sfResponse} send content (20078 o)
+Aug 31 11:16:33 symfony [info] {sfTimerManager} Configuration 5.03 ms (12)
+Aug 31 11:16:33 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:16:33 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.84 ms (1)
+Aug 31 11:16:45 symfony [info] {sfContext} initialization
+Aug 31 11:16:45 symfony [info] {sfController} initialization
+Aug 31 11:16:45 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:16:45 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:16:45 symfony [info] {sfController} dispatch request
+Aug 31 11:16:45 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:16:45 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:16:45 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:16:45 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:16:45 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:16:45 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:16:45 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:16:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:16:45 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:16:45 symfony [info] {sfFilter} render to client
+Aug 31 11:16:45 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:16:45 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:16:45 symfony [info] {sfResponse} send content (20083 o)
+Aug 31 11:16:45 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 11:16:45 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:16:45 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.85 ms (1)
+Aug 31 11:17:06 symfony [info] {sfContext} initialization
+Aug 31 11:17:06 symfony [info] {sfController} initialization
+Aug 31 11:17:06 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:17:06 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:17:06 symfony [info] {sfController} dispatch request
+Aug 31 11:17:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:17:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:17:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:17:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:17:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:17:06 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:17:06 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:17:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:17:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:06 symfony [info] {sfFilter} render to client
+Aug 31 11:17:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:17:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:17:06 symfony [info] {sfResponse} send content (20083 o)
+Aug 31 11:17:06 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 11:17:06 symfony [info] {sfTimerManager} Action "main/index" 0.22 ms (1)
+Aug 31 11:17:06 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.76 ms (1)
+Aug 31 11:17:11 symfony [info] {sfContext} initialization
+Aug 31 11:17:11 symfony [info] {sfController} initialization
+Aug 31 11:17:11 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:17:11 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:17:11 symfony [info] {sfController} dispatch request
+Aug 31 11:17:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:17:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:17:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:17:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:17:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:17:11 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:17:11 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:17:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:17:11 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:11 symfony [info] {sfFilter} render to client
+Aug 31 11:17:11 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:17:11 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:17:11 symfony [info] {sfResponse} send content (20087 o)
+Aug 31 11:17:11 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 11:17:11 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:17:11 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.15 ms (1)
+Aug 31 11:17:38 symfony [info] {sfContext} initialization
+Aug 31 11:17:38 symfony [info] {sfController} initialization
+Aug 31 11:17:38 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:17:38 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:17:38 symfony [info] {sfController} dispatch request
+Aug 31 11:17:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:17:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:17:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:17:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:17:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:17:38 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:17:38 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:17:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:17:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:17:38 symfony [info] {sfFilter} render to client
+Aug 31 11:17:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:17:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:17:38 symfony [info] {sfResponse} send content (20073 o)
+Aug 31 11:17:38 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 11:17:38 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:17:38 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.94 ms (1)
+Aug 31 11:18:29 symfony [info] {sfContext} initialization
+Aug 31 11:18:29 symfony [info] {sfController} initialization
+Aug 31 11:18:29 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:18:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:18:29 symfony [info] {sfController} dispatch request
+Aug 31 11:18:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:18:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:18:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:18:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:18:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:18:29 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:18:29 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:18:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:18:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:29 symfony [info] {sfFilter} render to client
+Aug 31 11:18:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:18:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:18:29 symfony [info] {sfResponse} send content (20073 o)
+Aug 31 11:18:29 symfony [info] {sfTimerManager} Configuration 5.26 ms (12)
+Aug 31 11:18:29 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:18:29 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.08 ms (1)
+Aug 31 11:18:30 symfony [info] {sfContext} initialization
+Aug 31 11:18:30 symfony [info] {sfController} initialization
+Aug 31 11:18:30 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:18:30 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:18:30 symfony [info] {sfController} dispatch request
+Aug 31 11:18:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:18:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:18:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:18:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:18:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:18:30 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:18:30 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:18:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:18:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:30 symfony [info] {sfFilter} render to client
+Aug 31 11:18:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:18:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:18:30 symfony [info] {sfResponse} send content (20072 o)
+Aug 31 11:18:30 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 11:18:30 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:18:30 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.88 ms (1)
+Aug 31 11:18:41 symfony [info] {sfContext} initialization
+Aug 31 11:18:41 symfony [info] {sfController} initialization
+Aug 31 11:18:41 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:18:41 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:18:41 symfony [info] {sfController} dispatch request
+Aug 31 11:18:41 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:18:41 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:18:41 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:18:41 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:18:41 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:18:41 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:18:41 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:18:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:18:41 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:18:41 symfony [info] {sfFilter} render to client
+Aug 31 11:18:41 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:18:41 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:18:41 symfony [info] {sfResponse} send content (20078 o)
+Aug 31 11:18:41 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 11:18:41 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:18:41 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.86 ms (1)
+Aug 31 11:20:26 symfony [info] {sfContext} initialization
+Aug 31 11:20:26 symfony [info] {sfController} initialization
+Aug 31 11:20:26 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:20:26 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:20:26 symfony [info] {sfController} dispatch request
+Aug 31 11:20:26 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:20:26 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:20:26 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:20:26 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:20:26 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:20:26 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:20:26 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:20:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:20:26 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:26 symfony [info] {sfFilter} render to client
+Aug 31 11:20:26 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:20:26 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:20:26 symfony [info] {sfResponse} send content (20079 o)
+Aug 31 11:20:26 symfony [info] {sfTimerManager} Configuration 5.75 ms (12)
+Aug 31 11:20:26 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:20:26 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.12 ms (1)
+Aug 31 11:20:42 symfony [info] {sfContext} initialization
+Aug 31 11:20:42 symfony [info] {sfController} initialization
+Aug 31 11:20:42 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:20:42 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:20:42 symfony [info] {sfController} dispatch request
+Aug 31 11:20:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:20:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:20:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:20:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:20:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:20:42 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:20:42 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:20:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:20:42 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:42 symfony [info] {sfFilter} render to client
+Aug 31 11:20:42 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:20:42 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:20:42 symfony [info] {sfResponse} send content (20078 o)
+Aug 31 11:20:42 symfony [info] {sfTimerManager} Configuration 4.96 ms (12)
+Aug 31 11:20:42 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:20:42 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.31 ms (1)
+Aug 31 11:20:56 symfony [info] {sfContext} initialization
+Aug 31 11:20:56 symfony [info] {sfController} initialization
+Aug 31 11:20:56 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:20:56 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:20:56 symfony [info] {sfController} dispatch request
+Aug 31 11:20:56 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:20:56 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:20:56 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:20:56 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:20:56 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:20:56 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:20:56 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:20:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:20:56 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:20:56 symfony [info] {sfFilter} render to client
+Aug 31 11:20:56 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:20:56 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:20:56 symfony [info] {sfResponse} send content (20079 o)
+Aug 31 11:20:56 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 11:20:56 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:20:56 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.39 ms (1)
+Aug 31 11:21:03 symfony [info] {sfContext} initialization
+Aug 31 11:21:03 symfony [info] {sfController} initialization
+Aug 31 11:21:03 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:21:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:21:03 symfony [info] {sfController} dispatch request
+Aug 31 11:21:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:21:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:21:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:21:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:21:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:21:03 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:21:03 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:21:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:21:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:21:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:21:03 symfony [info] {sfFilter} render to client
+Aug 31 11:21:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:21:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:21:03 symfony [info] {sfResponse} send content (20078 o)
+Aug 31 11:21:03 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 11:21:03 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:21:03 symfony [info] {sfTimerManager} View "Success" for "main/index" 14.79 ms (1)
+Aug 31 11:21:14 symfony [info] {sfContext} initialization
+Aug 31 11:21:14 symfony [info] {sfController} initialization
+Aug 31 11:21:14 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:21:14 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:21:14 symfony [info] {sfController} dispatch request
+Aug 31 11:21:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:21:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:21:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:21:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:21:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:21:14 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:21:14 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:21:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:21:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:21:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:21:14 symfony [info] {sfFilter} render to client
+Aug 31 11:21:14 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:21:14 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:21:14 symfony [info] {sfResponse} send content (20078 o)
+Aug 31 11:21:14 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 11:21:14 symfony [info] {sfTimerManager} Action "main/index" 0.38 ms (1)
+Aug 31 11:21:14 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.26 ms (1)
+Aug 31 11:22:13 symfony [info] {sfContext} initialization
+Aug 31 11:22:13 symfony [info] {sfController} initialization
+Aug 31 11:22:13 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:22:13 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:22:13 symfony [info] {sfController} dispatch request
+Aug 31 11:22:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:22:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:22:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:22:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:22:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:22:13 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:22:13 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:22:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:22:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:13 symfony [info] {sfFilter} render to client
+Aug 31 11:22:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:22:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:22:13 symfony [info] {sfResponse} send content (20113 o)
+Aug 31 11:22:13 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 11:22:13 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:22:13 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.69 ms (1)
+Aug 31 11:22:27 symfony [info] {sfContext} initialization
+Aug 31 11:22:27 symfony [info] {sfController} initialization
+Aug 31 11:22:27 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:22:27 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:22:27 symfony [info] {sfController} dispatch request
+Aug 31 11:22:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:22:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:22:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:22:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:22:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:22:27 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:22:27 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:22:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:22:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:27 symfony [info] {sfFilter} render to client
+Aug 31 11:22:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:22:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:22:27 symfony [info] {sfResponse} send content (20111 o)
+Aug 31 11:22:27 symfony [info] {sfTimerManager} Configuration 5.50 ms (12)
+Aug 31 11:22:27 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:22:27 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.86 ms (1)
+Aug 31 11:22:36 symfony [info] {sfContext} initialization
+Aug 31 11:22:36 symfony [info] {sfController} initialization
+Aug 31 11:22:36 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:22:36 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:22:36 symfony [info] {sfController} dispatch request
+Aug 31 11:22:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:22:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:22:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:22:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:22:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:22:36 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:22:36 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:22:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:22:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:36 symfony [info] {sfFilter} render to client
+Aug 31 11:22:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:22:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:22:36 symfony [info] {sfResponse} send content (20110 o)
+Aug 31 11:22:36 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 11:22:36 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:22:36 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.22 ms (1)
+Aug 31 11:22:39 symfony [info] {sfContext} initialization
+Aug 31 11:22:39 symfony [info] {sfController} initialization
+Aug 31 11:22:39 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:22:39 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:22:39 symfony [info] {sfController} dispatch request
+Aug 31 11:22:39 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:22:39 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:22:39 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:22:39 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:22:39 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:22:39 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:22:39 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:22:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:22:39 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:39 symfony [info] {sfFilter} render to client
+Aug 31 11:22:39 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:22:39 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:22:39 symfony [info] {sfResponse} send content (20113 o)
+Aug 31 11:22:39 symfony [info] {sfTimerManager} Configuration 5.56 ms (12)
+Aug 31 11:22:39 symfony [info] {sfTimerManager} Action "main/index" 0.24 ms (1)
+Aug 31 11:22:39 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.15 ms (1)
+Aug 31 11:22:48 symfony [info] {sfContext} initialization
+Aug 31 11:22:48 symfony [info] {sfController} initialization
+Aug 31 11:22:48 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:22:48 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:22:48 symfony [info] {sfController} dispatch request
+Aug 31 11:22:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:22:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:22:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:22:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:22:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:22:48 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:22:48 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:22:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:22:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:22:48 symfony [info] {sfFilter} render to client
+Aug 31 11:22:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:22:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:22:48 symfony [info] {sfResponse} send content (20113 o)
+Aug 31 11:22:48 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 11:22:48 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:22:48 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.89 ms (1)
+Aug 31 11:23:02 symfony [info] {sfContext} initialization
+Aug 31 11:23:02 symfony [info] {sfController} initialization
+Aug 31 11:23:02 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:23:02 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:23:02 symfony [info] {sfController} dispatch request
+Aug 31 11:23:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:23:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:23:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:23:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:23:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:23:02 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:23:02 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:23:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:23:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:02 symfony [info] {sfFilter} render to client
+Aug 31 11:23:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:23:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:23:02 symfony [info] {sfResponse} send content (20112 o)
+Aug 31 11:23:02 symfony [info] {sfTimerManager} Configuration 5.40 ms (12)
+Aug 31 11:23:02 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:23:02 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.75 ms (1)
+Aug 31 11:23:06 symfony [info] {sfContext} initialization
+Aug 31 11:23:07 symfony [info] {sfController} initialization
+Aug 31 11:23:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:23:07 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:23:07 symfony [info] {sfController} dispatch request
+Aug 31 11:23:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:23:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:23:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:23:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:23:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:23:07 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:23:07 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:23:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:23:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:07 symfony [info] {sfFilter} render to client
+Aug 31 11:23:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:23:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:23:07 symfony [info] {sfResponse} send content (20113 o)
+Aug 31 11:23:07 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 11:23:07 symfony [info] {sfTimerManager} Action "main/index" 0.19 ms (1)
+Aug 31 11:23:07 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.15 ms (1)
+Aug 31 11:23:48 symfony [info] {sfContext} initialization
+Aug 31 11:23:48 symfony [info] {sfController} initialization
+Aug 31 11:23:48 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:23:48 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:23:48 symfony [info] {sfController} dispatch request
+Aug 31 11:23:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:23:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:23:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:23:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:23:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:23:48 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:23:48 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:23:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:23:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:23:49 symfony [info] {sfFilter} render to client
+Aug 31 11:23:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:23:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:23:49 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:23:49 symfony [info] {sfTimerManager} Configuration 5.17 ms (12)
+Aug 31 11:23:49 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:23:49 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.90 ms (1)
+Aug 31 11:24:22 symfony [info] {sfContext} initialization
+Aug 31 11:24:22 symfony [info] {sfController} initialization
+Aug 31 11:24:22 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:22 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:22 symfony [info] {sfController} dispatch request
+Aug 31 11:24:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:22 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:22 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:22 symfony [info] {sfFilter} render to client
+Aug 31 11:24:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:22 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:24:22 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 11:24:22 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:24:22 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.18 ms (1)
+Aug 31 11:24:23 symfony [info] {sfContext} initialization
+Aug 31 11:24:23 symfony [info] {sfController} initialization
+Aug 31 11:24:23 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:23 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:23 symfony [info] {sfController} dispatch request
+Aug 31 11:24:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:23 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:23 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:23 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:23 symfony [info] {sfFilter} render to client
+Aug 31 11:24:23 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:23 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:23 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:24:23 symfony [info] {sfTimerManager} Configuration 4.96 ms (12)
+Aug 31 11:24:23 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:24:23 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.32 ms (1)
+Aug 31 11:24:32 symfony [info] {sfContext} initialization
+Aug 31 11:24:32 symfony [info] {sfController} initialization
+Aug 31 11:24:32 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:32 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:32 symfony [info] {sfController} dispatch request
+Aug 31 11:24:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:32 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:32 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:32 symfony [info] {sfFilter} render to client
+Aug 31 11:24:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:32 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:24:32 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 11:24:32 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:24:32 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.91 ms (1)
+Aug 31 11:24:36 symfony [info] {sfContext} initialization
+Aug 31 11:24:36 symfony [info] {sfController} initialization
+Aug 31 11:24:36 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:36 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:36 symfony [info] {sfController} dispatch request
+Aug 31 11:24:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:36 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:36 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:36 symfony [info] {sfFilter} render to client
+Aug 31 11:24:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:36 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:24:36 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 11:24:36 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:24:36 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.38 ms (1)
+Aug 31 11:24:46 symfony [info] {sfContext} initialization
+Aug 31 11:24:46 symfony [info] {sfController} initialization
+Aug 31 11:24:46 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:46 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:46 symfony [info] {sfController} dispatch request
+Aug 31 11:24:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:46 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:46 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:46 symfony [info] {sfFilter} render to client
+Aug 31 11:24:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:46 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:24:46 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 11:24:46 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:24:46 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.30 ms (1)
+Aug 31 11:24:54 symfony [info] {sfContext} initialization
+Aug 31 11:24:54 symfony [info] {sfController} initialization
+Aug 31 11:24:54 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:54 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:54 symfony [info] {sfController} dispatch request
+Aug 31 11:24:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:54 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:54 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:54 symfony [info] {sfFilter} render to client
+Aug 31 11:24:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:54 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:24:54 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 11:24:54 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:24:54 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.18 ms (1)
+Aug 31 11:24:55 symfony [info] {sfContext} initialization
+Aug 31 11:24:55 symfony [info] {sfController} initialization
+Aug 31 11:24:55 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:24:55 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:24:55 symfony [info] {sfController} dispatch request
+Aug 31 11:24:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:24:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:24:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:24:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:24:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:24:55 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:24:55 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:24:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:24:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:24:55 symfony [info] {sfFilter} render to client
+Aug 31 11:24:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:24:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:24:55 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:24:55 symfony [info] {sfTimerManager} Configuration 4.95 ms (12)
+Aug 31 11:24:55 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:24:55 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.44 ms (1)
+Aug 31 11:25:02 symfony [info] {sfContext} initialization
+Aug 31 11:25:02 symfony [info] {sfController} initialization
+Aug 31 11:25:02 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:25:02 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:25:02 symfony [info] {sfController} dispatch request
+Aug 31 11:25:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:25:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:25:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:25:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:25:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:25:02 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:25:02 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:25:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:25:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:02 symfony [info] {sfFilter} render to client
+Aug 31 11:25:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:25:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:25:02 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:25:02 symfony [info] {sfTimerManager} Configuration 5.04 ms (12)
+Aug 31 11:25:02 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:25:02 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.97 ms (1)
+Aug 31 11:25:13 symfony [info] {sfContext} initialization
+Aug 31 11:25:13 symfony [info] {sfController} initialization
+Aug 31 11:25:13 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:25:13 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:25:13 symfony [info] {sfController} dispatch request
+Aug 31 11:25:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:25:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:25:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:25:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:25:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:25:13 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:25:13 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:25:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:25:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:13 symfony [info] {sfFilter} render to client
+Aug 31 11:25:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:25:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:25:13 symfony [info] {sfResponse} send content (20260 o)
+Aug 31 11:25:13 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 11:25:13 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:25:13 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.81 ms (1)
+Aug 31 11:25:31 symfony [info] {sfContext} initialization
+Aug 31 11:25:31 symfony [info] {sfController} initialization
+Aug 31 11:25:31 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:25:31 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:25:31 symfony [info] {sfController} dispatch request
+Aug 31 11:25:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:25:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:25:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:25:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:25:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:25:31 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:25:31 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:25:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:25:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:31 symfony [info] {sfFilter} render to client
+Aug 31 11:25:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:25:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:25:31 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:25:31 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 11:25:31 symfony [info] {sfTimerManager} Action "main/index" 0.18 ms (1)
+Aug 31 11:25:31 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.29 ms (1)
+Aug 31 11:25:48 symfony [info] {sfContext} initialization
+Aug 31 11:25:48 symfony [info] {sfController} initialization
+Aug 31 11:25:48 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:25:48 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:25:48 symfony [info] {sfController} dispatch request
+Aug 31 11:25:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:25:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:25:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:25:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:25:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:25:48 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:25:48 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:25:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:25:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:48 symfony [info] {sfFilter} render to client
+Aug 31 11:25:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:25:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:25:48 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:25:48 symfony [info] {sfTimerManager} Configuration 4.92 ms (12)
+Aug 31 11:25:48 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:25:48 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.33 ms (1)
+Aug 31 11:25:53 symfony [info] {sfContext} initialization
+Aug 31 11:25:53 symfony [info] {sfController} initialization
+Aug 31 11:25:53 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:25:53 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:25:53 symfony [info] {sfController} dispatch request
+Aug 31 11:25:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:25:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:25:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:25:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:25:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:25:53 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:25:53 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:25:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:25:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:25:53 symfony [info] {sfFilter} render to client
+Aug 31 11:25:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:25:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:25:53 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:25:53 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 11:25:53 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:25:53 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.81 ms (1)
+Aug 31 11:26:00 symfony [info] {sfContext} initialization
+Aug 31 11:26:00 symfony [info] {sfController} initialization
+Aug 31 11:26:00 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:26:00 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:26:00 symfony [info] {sfController} dispatch request
+Aug 31 11:26:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:26:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:26:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:26:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:26:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:26:00 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:26:00 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:26:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:26:00 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:26:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:26:00 symfony [info] {sfFilter} render to client
+Aug 31 11:26:00 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:26:00 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:26:00 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:26:00 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 11:26:00 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:26:00 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.96 ms (1)
+Aug 31 11:26:10 symfony [info] {sfContext} initialization
+Aug 31 11:26:10 symfony [info] {sfController} initialization
+Aug 31 11:26:10 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:26:10 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:26:10 symfony [info] {sfController} dispatch request
+Aug 31 11:26:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:26:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:26:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:26:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:26:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:26:10 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:26:10 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:26:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:26:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:26:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:26:10 symfony [info] {sfFilter} render to client
+Aug 31 11:26:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:26:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:26:10 symfony [info] {sfResponse} send content (20259 o)
+Aug 31 11:26:10 symfony [info] {sfTimerManager} Configuration 5.26 ms (12)
+Aug 31 11:26:10 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:26:10 symfony [info] {sfTimerManager} View "Success" for "main/index" 15.46 ms (1)
+Aug 31 11:27:12 symfony [info] {sfContext} initialization
+Aug 31 11:27:12 symfony [info] {sfController} initialization
+Aug 31 11:27:12 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:27:12 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:27:12 symfony [info] {sfController} dispatch request
+Aug 31 11:27:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:27:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:27:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:27:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:27:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:27:12 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:27:12 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:27:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:27:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:12 symfony [err] {sfConfigurationException} The route "about" does not exist.
+Aug 31 11:27:13 symfony [info] {sfContext} initialization
+Aug 31 11:27:13 symfony [info] {sfController} initialization
+Aug 31 11:27:13 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:27:13 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:27:13 symfony [info] {sfController} dispatch request
+Aug 31 11:27:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:27:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:27:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:27:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:27:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:27:13 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:27:13 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:27:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:13 symfony [err] {sfConfigurationException} The route "about" does not exist.
+Aug 31 11:27:37 symfony [info] {sfRouting} connect "/"
+Aug 31 11:27:37 symfony [info] {sfRouting} connect "/about"
+Aug 31 11:27:37 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 11:27:37 symfony [info] {sfRouting} connect "/:module"
+Aug 31 11:27:37 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 11:27:37 symfony [info] {sfContext} initialization
+Aug 31 11:27:37 symfony [info] {sfController} initialization
+Aug 31 11:27:37 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:27:37 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:27:37 symfony [info] {sfController} dispatch request
+Aug 31 11:27:37 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:27:37 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:27:37 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:27:37 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:27:37 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:27:37 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:27:37 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:27:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:27:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:37 symfony [err] {sfConfigurationException} The route "download" does not exist.
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/"
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/about"
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/download"
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/:module"
+Aug 31 11:27:52 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 11:27:52 symfony [info] {sfContext} initialization
+Aug 31 11:27:52 symfony [info] {sfController} initialization
+Aug 31 11:27:52 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:27:52 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:27:52 symfony [info] {sfController} dispatch request
+Aug 31 11:27:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:27:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:27:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:27:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:27:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:27:53 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:27:53 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:27:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:27:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:27:53 symfony [err] {sfConfigurationException} The route "manual" does not exist.
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/about"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/download"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/manual"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/:module"
+Aug 31 11:28:07 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 11:28:07 symfony [info] {sfContext} initialization
+Aug 31 11:28:07 symfony [info] {sfController} initialization
+Aug 31 11:28:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:28:07 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:28:07 symfony [info] {sfController} dispatch request
+Aug 31 11:28:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:28:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:28:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:28:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:28:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:28:07 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:28:07 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:28:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:28:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:07 symfony [err] {sfConfigurationException} The route "api_documentation" does not exist.
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/about"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/download"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/documentation/manual"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/documentation/api"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/:module"
+Aug 31 11:28:38 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 11:28:38 symfony [info] {sfContext} initialization
+Aug 31 11:28:38 symfony [info] {sfController} initialization
+Aug 31 11:28:38 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:28:38 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:28:38 symfony [info] {sfController} dispatch request
+Aug 31 11:28:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:28:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:28:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:28:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:28:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:28:38 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:28:38 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:28:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:28:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:38 symfony [err] {sfConfigurationException} The route "trac" does not exist.
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/about"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/download"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/documentation/manual"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/documentation/api"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/trac"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/:module"
+Aug 31 11:28:51 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 11:28:51 symfony [info] {sfContext} initialization
+Aug 31 11:28:51 symfony [info] {sfController} initialization
+Aug 31 11:28:51 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:28:51 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:28:51 symfony [info] {sfController} dispatch request
+Aug 31 11:28:51 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:28:51 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:28:51 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:28:51 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:28:51 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:28:51 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:28:51 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:28:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:28:51 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:28:51 symfony [info] {sfFilter} render to client
+Aug 31 11:28:51 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:28:51 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:28:51 symfony [info] {sfResponse} send content (23625 o)
+Aug 31 11:28:51 symfony [info] {sfTimerManager} Configuration 32.90 ms (13)
+Aug 31 11:28:51 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:28:51 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.84 ms (1)
+Aug 31 11:29:05 symfony [info] {sfContext} initialization
+Aug 31 11:29:05 symfony [info] {sfController} initialization
+Aug 31 11:29:05 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:29:05 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:29:05 symfony [info] {sfController} dispatch request
+Aug 31 11:29:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:29:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:29:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:29:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:29:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:29:05 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:29:05 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:29:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:29:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:05 symfony [info] {sfFilter} render to client
+Aug 31 11:29:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:29:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:29:05 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 11:29:05 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 11:29:05 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:29:05 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.64 ms (1)
+Aug 31 11:29:52 symfony [info] {sfContext} initialization
+Aug 31 11:29:52 symfony [info] {sfController} initialization
+Aug 31 11:29:52 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:29:52 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:29:52 symfony [info] {sfController} dispatch request
+Aug 31 11:29:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:29:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:29:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:29:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:29:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:29:52 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:29:52 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:29:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:29:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:52 symfony [info] {sfFilter} render to client
+Aug 31 11:29:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:29:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:29:52 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 11:29:52 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 11:29:52 symfony [info] {sfTimerManager} Action "main/index" 0.17 ms (1)
+Aug 31 11:29:52 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.32 ms (1)
+Aug 31 11:29:58 symfony [info] {sfContext} initialization
+Aug 31 11:29:58 symfony [info] {sfController} initialization
+Aug 31 11:29:58 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:29:58 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:29:58 symfony [info] {sfController} dispatch request
+Aug 31 11:29:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:29:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:29:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:29:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:29:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:29:58 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:29:58 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:29:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:29:58 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:29:58 symfony [info] {sfFilter} render to client
+Aug 31 11:29:58 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:29:58 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:29:58 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 11:29:58 symfony [info] {sfTimerManager} Configuration 5.21 ms (12)
+Aug 31 11:29:58 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:29:58 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.48 ms (1)
+Aug 31 11:30:06 symfony [info] {sfContext} initialization
+Aug 31 11:30:06 symfony [info] {sfController} initialization
+Aug 31 11:30:06 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:30:06 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:30:06 symfony [info] {sfController} dispatch request
+Aug 31 11:30:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:30:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:30:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:30:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:30:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:30:06 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:30:06 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:30:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:30:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:06 symfony [info] {sfFilter} render to client
+Aug 31 11:30:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:30:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:30:06 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 11:30:06 symfony [info] {sfTimerManager} Configuration 5.18 ms (12)
+Aug 31 11:30:06 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:30:06 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.29 ms (1)
+Aug 31 11:30:12 symfony [info] {sfContext} initialization
+Aug 31 11:30:12 symfony [info] {sfController} initialization
+Aug 31 11:30:12 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:30:12 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:30:12 symfony [info] {sfController} dispatch request
+Aug 31 11:30:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:30:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:30:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:30:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:30:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:30:12 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:30:12 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:30:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:30:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:12 symfony [info] {sfFilter} render to client
+Aug 31 11:30:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:30:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:30:12 symfony [info] {sfResponse} send content (20859 o)
+Aug 31 11:30:12 symfony [info] {sfTimerManager} Configuration 5.22 ms (12)
+Aug 31 11:30:12 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:30:12 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.12 ms (1)
+Aug 31 11:30:43 symfony [info] {sfContext} initialization
+Aug 31 11:30:43 symfony [info] {sfController} initialization
+Aug 31 11:30:43 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:30:43 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:30:43 symfony [info] {sfController} dispatch request
+Aug 31 11:30:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:30:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:30:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:30:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:30:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:30:43 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:30:43 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:30:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:30:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:43 symfony [info] {sfFilter} render to client
+Aug 31 11:30:43 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:30:43 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:30:43 symfony [info] {sfResponse} send content (20773 o)
+Aug 31 11:30:43 symfony [info] {sfTimerManager} Configuration 5.21 ms (12)
+Aug 31 11:30:43 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:30:43 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.62 ms (1)
+Aug 31 11:30:48 symfony [info] {sfContext} initialization
+Aug 31 11:30:48 symfony [info] {sfController} initialization
+Aug 31 11:30:48 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:30:48 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:30:48 symfony [info] {sfController} dispatch request
+Aug 31 11:30:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:30:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:30:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:30:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:30:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:30:48 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:30:48 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:30:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:30:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:48 symfony [info] {sfFilter} render to client
+Aug 31 11:30:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:30:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:30:48 symfony [info] {sfResponse} send content (20773 o)
+Aug 31 11:30:48 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 11:30:48 symfony [info] {sfTimerManager} Action "main/index" 0.19 ms (1)
+Aug 31 11:30:48 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.14 ms (1)
+Aug 31 11:30:55 symfony [info] {sfContext} initialization
+Aug 31 11:30:55 symfony [info] {sfController} initialization
+Aug 31 11:30:55 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:30:55 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:30:55 symfony [info] {sfController} dispatch request
+Aug 31 11:30:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:30:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:30:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:30:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:30:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:30:55 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:30:55 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:30:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:30:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:30:55 symfony [info] {sfFilter} render to client
+Aug 31 11:30:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:30:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:30:55 symfony [info] {sfResponse} send content (20772 o)
+Aug 31 11:30:55 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 11:30:55 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:30:55 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.71 ms (1)
+Aug 31 11:31:08 symfony [info] {sfContext} initialization
+Aug 31 11:31:08 symfony [info] {sfController} initialization
+Aug 31 11:31:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:31:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:31:08 symfony [info] {sfController} dispatch request
+Aug 31 11:31:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:31:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:31:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:31:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:31:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:31:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:31:08 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:31:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:31:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:08 symfony [info] {sfFilter} render to client
+Aug 31 11:31:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:31:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:31:08 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 11:31:08 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 11:31:08 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:31:08 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.87 ms (1)
+Aug 31 11:31:09 symfony [info] {sfContext} initialization
+Aug 31 11:31:09 symfony [info] {sfController} initialization
+Aug 31 11:31:09 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:31:09 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:31:09 symfony [info] {sfController} dispatch request
+Aug 31 11:31:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:31:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:31:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:31:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:31:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:31:09 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:31:09 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:31:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:31:09 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:09 symfony [info] {sfFilter} render to client
+Aug 31 11:31:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:31:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:31:09 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 11:31:09 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 11:31:09 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:31:09 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.14 ms (1)
+Aug 31 11:31:21 symfony [info] {sfContext} initialization
+Aug 31 11:31:21 symfony [info] {sfController} initialization
+Aug 31 11:31:21 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:31:21 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:31:21 symfony [info] {sfController} dispatch request
+Aug 31 11:31:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:31:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:31:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:31:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:31:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:31:21 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:31:21 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:31:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:31:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:21 symfony [info] {sfFilter} render to client
+Aug 31 11:31:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:31:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:31:21 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:31:21 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 11:31:21 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:31:21 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.65 ms (1)
+Aug 31 11:31:29 symfony [info] {sfContext} initialization
+Aug 31 11:31:29 symfony [info] {sfController} initialization
+Aug 31 11:31:29 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:31:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:31:29 symfony [info] {sfController} dispatch request
+Aug 31 11:31:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:31:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:31:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:31:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:31:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:31:29 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:31:29 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:31:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:31:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:29 symfony [info] {sfFilter} render to client
+Aug 31 11:31:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:31:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:31:29 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:31:29 symfony [info] {sfTimerManager} Configuration 4.93 ms (12)
+Aug 31 11:31:29 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:31:29 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.56 ms (1)
+Aug 31 11:31:53 symfony [info] {sfContext} initialization
+Aug 31 11:31:53 symfony [info] {sfController} initialization
+Aug 31 11:31:53 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:31:53 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:31:53 symfony [info] {sfController} dispatch request
+Aug 31 11:31:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:31:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:31:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:31:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:31:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:31:53 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:31:53 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:31:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:31:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:31:54 symfony [info] {sfFilter} render to client
+Aug 31 11:31:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:31:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:31:54 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:31:54 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 11:31:54 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:31:54 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.78 ms (1)
+Aug 31 11:32:55 symfony [info] {sfContext} initialization
+Aug 31 11:32:55 symfony [info] {sfController} initialization
+Aug 31 11:32:55 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:32:55 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:32:55 symfony [info] {sfController} dispatch request
+Aug 31 11:32:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:32:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:32:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:32:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:32:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:32:55 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:32:55 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:32:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:32:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:32:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:32:55 symfony [info] {sfFilter} render to client
+Aug 31 11:32:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:32:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:32:55 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 11:32:55 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 11:32:55 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:32:55 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.10 ms (1)
+Aug 31 11:33:08 symfony [info] {sfContext} initialization
+Aug 31 11:33:08 symfony [info] {sfController} initialization
+Aug 31 11:33:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:33:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:33:08 symfony [info] {sfController} dispatch request
+Aug 31 11:33:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:33:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:33:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:33:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:33:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:33:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:33:08 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:33:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:33:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:33:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:33:09 symfony [info] {sfFilter} render to client
+Aug 31 11:33:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:33:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:33:09 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:33:09 symfony [info] {sfTimerManager} Configuration 5.03 ms (12)
+Aug 31 11:33:09 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:33:09 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.72 ms (1)
+Aug 31 11:33:22 symfony [info] {sfContext} initialization
+Aug 31 11:33:22 symfony [info] {sfController} initialization
+Aug 31 11:33:22 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:33:22 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:33:22 symfony [info] {sfController} dispatch request
+Aug 31 11:33:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:33:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:33:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:33:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:33:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:33:22 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:33:22 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:33:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:33:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:33:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:33:22 symfony [info] {sfFilter} render to client
+Aug 31 11:33:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:33:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:33:22 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:33:22 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 11:33:22 symfony [info] {sfTimerManager} Action "main/index" 0.19 ms (1)
+Aug 31 11:33:22 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.26 ms (1)
+Aug 31 11:34:17 symfony [info] {sfContext} initialization
+Aug 31 11:34:17 symfony [info] {sfController} initialization
+Aug 31 11:34:17 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:34:17 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:34:17 symfony [info] {sfController} dispatch request
+Aug 31 11:34:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:34:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:34:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:34:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:34:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:34:17 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:34:17 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:34:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:34:17 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:34:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:34:17 symfony [info] {sfFilter} render to client
+Aug 31 11:34:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:34:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:34:17 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:34:17 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 11:34:17 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 11:34:17 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.30 ms (1)
+Aug 31 11:41:23 symfony [info] {sfContext} initialization
+Aug 31 11:41:23 symfony [info] {sfController} initialization
+Aug 31 11:41:23 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:41:23 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:41:23 symfony [info] {sfController} dispatch request
+Aug 31 11:41:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:41:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:41:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:41:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:41:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:41:23 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:41:23 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:41:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:41:23 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:41:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:41:23 symfony [info] {sfFilter} render to client
+Aug 31 11:41:23 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:41:23 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:41:23 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:41:23 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 11:41:23 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 11:41:23 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.09 ms (1)
+Aug 31 11:48:28 symfony [info] {sfContext} initialization
+Aug 31 11:48:28 symfony [info] {sfController} initialization
+Aug 31 11:48:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 11:48:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 11:48:28 symfony [info] {sfController} dispatch request
+Aug 31 11:48:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:48:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:48:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:48:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:48:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:48:29 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 11:48:29 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 11:48:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 11:48:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:48:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:48:29 symfony [info] {sfFilter} render to client
+Aug 31 11:48:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:48:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:48:29 symfony [info] {sfResponse} send content (20770 o)
+Aug 31 11:48:29 symfony [info] {sfTimerManager} Configuration 8.80 ms (12)
+Aug 31 11:48:29 symfony [info] {sfTimerManager} Action "main/index" 0.19 ms (1)
+Aug 31 11:48:29 symfony [info] {sfTimerManager} View "Success" for "main/index" 78.95 ms (1)
+Aug 31 11:48:34 symfony [info] {sfContext} initialization
+Aug 31 11:48:34 symfony [info] {sfController} initialization
+Aug 31 11:48:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:48:34 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:48:34 symfony [info] {sfController} dispatch request
+Aug 31 11:48:34 symfony [info] {sfController} action does not exist
+Aug 31 11:48:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:48:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:48:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:48:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:48:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:48:34 symfony [info] {sfAction} call "defaultActions->executeError404()"
+Aug 31 11:48:34 symfony [info] {sfView} initialize view for "default/error404"
+Aug 31 11:48:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/error404Success.php"
+Aug 31 11:48:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 11:48:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 11:48:34 symfony [info] {sfFilter} render to client
+Aug 31 11:48:34 symfony [info] {sfResponse} send status "HTTP/1.0 404 Not Found"
+Aug 31 11:48:34 symfony [info] {sfResponse} send header "Status": "404 Not Found"
+Aug 31 11:48:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:48:34 symfony [info] {sfResponse} send content (22496 o)
+Aug 31 11:48:34 symfony [info] {sfTimerManager} Configuration 98.14 ms (13)
+Aug 31 11:48:34 symfony [info] {sfTimerManager} Action "default/error404" 0.24 ms (1)
+Aug 31 11:48:34 symfony [info] {sfTimerManager} View "Success" for "default/error404" 49.12 ms (1)
+Aug 31 11:49:01 symfony [info] {sfContext} initialization
+Aug 31 11:49:01 symfony [info] {sfController} initialization
+Aug 31 11:49:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:49:01 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:49:01 symfony [info] {sfController} dispatch request
+Aug 31 11:49:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:49:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:49:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:49:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:49:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:49:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:49:01 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:49:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:49:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:49:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:49:01 symfony [info] {sfFilter} render to client
+Aug 31 11:49:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:49:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:49:01 symfony [info] {sfResponse} send content (21011 o)
+Aug 31 11:49:01 symfony [info] {sfTimerManager} Configuration 60.38 ms (13)
+Aug 31 11:49:01 symfony [info] {sfTimerManager} Action "manual/index" 0.18 ms (1)
+Aug 31 11:49:01 symfony [info] {sfTimerManager} View "Success" for "manual/index" 25.92 ms (1)
+Aug 31 11:49:44 symfony [info] {sfContext} initialization
+Aug 31 11:49:44 symfony [info] {sfController} initialization
+Aug 31 11:49:44 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:49:44 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:49:44 symfony [info] {sfController} dispatch request
+Aug 31 11:49:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:49:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:49:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:49:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:49:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:49:44 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:49:44 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:49:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:49:44 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:49:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 11:49:44 symfony [info] {sfFilter} render to client
+Aug 31 11:49:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 11:49:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 11:49:44 symfony [info] {sfResponse} send content (21009 o)
+Aug 31 11:49:44 symfony [info] {sfTimerManager} Configuration 5.23 ms (12)
+Aug 31 11:49:44 symfony [info] {sfTimerManager} Action "manual/index" 0.18 ms (1)
+Aug 31 11:49:44 symfony [info] {sfTimerManager} View "Success" for "manual/index" 17.44 ms (1)
+Aug 31 11:51:38 symfony [info] {sfContext} initialization
+Aug 31 11:51:38 symfony [info] {sfController} initialization
+Aug 31 11:51:38 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:51:38 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:51:38 symfony [info] {sfController} dispatch request
+Aug 31 11:51:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:51:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:51:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:51:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:51:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:51:38 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:51:38 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:51:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:51:38 symfony [info] {sfContext} initialization
+Aug 31 11:51:39 symfony [info] {sfController} initialization
+Aug 31 11:51:39 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:51:39 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:51:39 symfony [info] {sfController} dispatch request
+Aug 31 11:51:39 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:51:39 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:51:39 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:51:39 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:51:39 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:51:39 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:51:39 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:51:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:53:19 symfony [info] {sfContext} initialization
+Aug 31 11:53:19 symfony [info] {sfController} initialization
+Aug 31 11:53:19 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:53:19 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:53:19 symfony [info] {sfController} dispatch request
+Aug 31 11:53:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:53:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:53:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:53:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:53:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:53:19 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:53:19 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:53:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:54:10 symfony [info] {sfContext} initialization
+Aug 31 11:54:10 symfony [info] {sfController} initialization
+Aug 31 11:54:10 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:54:10 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:54:10 symfony [info] {sfController} dispatch request
+Aug 31 11:54:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:54:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:54:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:54:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:54:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:54:10 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:54:47 symfony [info] {sfContext} initialization
+Aug 31 11:54:47 symfony [info] {sfController} initialization
+Aug 31 11:54:47 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:54:47 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:54:47 symfony [info] {sfController} dispatch request
+Aug 31 11:54:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:54:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:54:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:54:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:54:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:54:47 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:55:05 symfony [info] {sfContext} initialization
+Aug 31 11:55:05 symfony [info] {sfController} initialization
+Aug 31 11:55:05 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:55:05 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:55:05 symfony [info] {sfController} dispatch request
+Aug 31 11:55:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:55:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:55:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:55:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:55:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:55:05 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:55:17 symfony [info] {sfContext} initialization
+Aug 31 11:55:17 symfony [info] {sfController} initialization
+Aug 31 11:55:17 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:55:17 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:55:17 symfony [info] {sfController} dispatch request
+Aug 31 11:55:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:55:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:55:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:55:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:55:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:55:17 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:55:40 symfony [info] {sfContext} initialization
+Aug 31 11:55:40 symfony [info] {sfController} initialization
+Aug 31 11:55:40 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:55:40 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:55:40 symfony [info] {sfController} dispatch request
+Aug 31 11:55:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:55:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:55:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:55:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:55:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:55:40 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:22 symfony [info] {sfContext} initialization
+Aug 31 11:56:22 symfony [info] {sfController} initialization
+Aug 31 11:56:22 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:22 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:22 symfony [info] {sfController} dispatch request
+Aug 31 11:56:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:22 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:27 symfony [info] {sfContext} initialization
+Aug 31 11:56:27 symfony [info] {sfController} initialization
+Aug 31 11:56:27 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:27 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:27 symfony [info] {sfController} dispatch request
+Aug 31 11:56:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:27 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:30 symfony [info] {sfContext} initialization
+Aug 31 11:56:30 symfony [info] {sfController} initialization
+Aug 31 11:56:30 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:30 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:30 symfony [info] {sfController} dispatch request
+Aug 31 11:56:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:30 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:33 symfony [info] {sfContext} initialization
+Aug 31 11:56:33 symfony [info] {sfController} initialization
+Aug 31 11:56:33 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:33 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:33 symfony [info] {sfController} dispatch request
+Aug 31 11:56:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:33 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:36 symfony [info] {sfContext} initialization
+Aug 31 11:56:36 symfony [info] {sfController} initialization
+Aug 31 11:56:36 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:36 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:36 symfony [info] {sfController} dispatch request
+Aug 31 11:56:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:36 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:39 symfony [info] {sfContext} initialization
+Aug 31 11:56:39 symfony [info] {sfController} initialization
+Aug 31 11:56:39 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:39 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:39 symfony [info] {sfController} dispatch request
+Aug 31 11:56:39 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:39 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:39 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:39 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:39 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:39 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:42 symfony [info] {sfContext} initialization
+Aug 31 11:56:42 symfony [info] {sfController} initialization
+Aug 31 11:56:42 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:42 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:42 symfony [info] {sfController} dispatch request
+Aug 31 11:56:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:42 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:45 symfony [info] {sfContext} initialization
+Aug 31 11:56:45 symfony [info] {sfController} initialization
+Aug 31 11:56:45 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:45 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:45 symfony [info] {sfController} dispatch request
+Aug 31 11:56:45 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:45 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:45 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:45 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:45 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:45 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:48 symfony [info] {sfContext} initialization
+Aug 31 11:56:48 symfony [info] {sfController} initialization
+Aug 31 11:56:48 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:48 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:48 symfony [info] {sfController} dispatch request
+Aug 31 11:56:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:48 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:52 symfony [info] {sfContext} initialization
+Aug 31 11:56:52 symfony [info] {sfController} initialization
+Aug 31 11:56:52 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:52 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:52 symfony [info] {sfController} dispatch request
+Aug 31 11:56:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:52 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:54 symfony [info] {sfContext} initialization
+Aug 31 11:56:55 symfony [info] {sfController} initialization
+Aug 31 11:56:55 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:55 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:55 symfony [info] {sfController} dispatch request
+Aug 31 11:56:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:55 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:56:57 symfony [info] {sfContext} initialization
+Aug 31 11:56:57 symfony [info] {sfController} initialization
+Aug 31 11:56:57 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:56:57 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:56:57 symfony [info] {sfController} dispatch request
+Aug 31 11:56:57 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:56:57 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:56:57 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:56:57 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:56:57 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:56:57 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:57:02 symfony [info] {sfContext} initialization
+Aug 31 11:57:02 symfony [info] {sfController} initialization
+Aug 31 11:57:02 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:57:02 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:57:02 symfony [info] {sfController} dispatch request
+Aug 31 11:57:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:57:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:57:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:57:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:57:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:57:02 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:57:16 symfony [info] {sfContext} initialization
+Aug 31 11:57:16 symfony [info] {sfController} initialization
+Aug 31 11:57:16 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:57:16 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:57:16 symfony [info] {sfController} dispatch request
+Aug 31 11:57:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:57:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:57:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:57:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:57:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:57:16 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:57:41 symfony [info] {sfContext} initialization
+Aug 31 11:57:41 symfony [info] {sfController} initialization
+Aug 31 11:57:41 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:57:41 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:57:41 symfony [info] {sfController} dispatch request
+Aug 31 11:57:41 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:57:41 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:57:41 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:57:41 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:57:41 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:57:41 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:57:51 symfony [info] {sfContext} initialization
+Aug 31 11:57:51 symfony [info] {sfController} initialization
+Aug 31 11:57:51 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:57:51 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:57:51 symfony [info] {sfController} dispatch request
+Aug 31 11:57:51 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:57:51 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:57:51 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:57:51 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:57:51 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:57:51 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:58:15 symfony [info] {sfContext} initialization
+Aug 31 11:58:15 symfony [info] {sfController} initialization
+Aug 31 11:58:15 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:58:15 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:58:15 symfony [info] {sfController} dispatch request
+Aug 31 11:58:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:58:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:58:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:58:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:58:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:58:15 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:16 symfony [info] {sfContext} initialization
+Aug 31 11:59:16 symfony [info] {sfController} initialization
+Aug 31 11:59:16 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:16 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:16 symfony [info] {sfController} dispatch request
+Aug 31 11:59:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:16 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:34 symfony [info] {sfContext} initialization
+Aug 31 11:59:34 symfony [info] {sfController} initialization
+Aug 31 11:59:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:34 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:34 symfony [info] {sfController} dispatch request
+Aug 31 11:59:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:40 symfony [info] {sfContext} initialization
+Aug 31 11:59:40 symfony [info] {sfController} initialization
+Aug 31 11:59:40 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:40 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:40 symfony [info] {sfController} dispatch request
+Aug 31 11:59:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:40 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:40 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:59:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:59:41 symfony [info] {sfContext} initialization
+Aug 31 11:59:41 symfony [info] {sfController} initialization
+Aug 31 11:59:41 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:41 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:41 symfony [info] {sfController} dispatch request
+Aug 31 11:59:41 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:41 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:41 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:41 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:41 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:41 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:41 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:59:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:59:53 symfony [info] {sfContext} initialization
+Aug 31 11:59:53 symfony [info] {sfController} initialization
+Aug 31 11:59:53 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:53 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:53 symfony [info] {sfController} dispatch request
+Aug 31 11:59:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:53 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:53 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:59:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 11:59:53 symfony [info] {sfContext} initialization
+Aug 31 11:59:54 symfony [info] {sfController} initialization
+Aug 31 11:59:54 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 11:59:54 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 11:59:54 symfony [info] {sfController} dispatch request
+Aug 31 11:59:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 11:59:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 11:59:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 11:59:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 11:59:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 11:59:54 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 11:59:54 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 11:59:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 12:01:22 symfony [info] {sfContext} initialization
+Aug 31 12:01:22 symfony [info] {sfController} initialization
+Aug 31 12:01:22 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:01:22 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:01:22 symfony [info] {sfController} dispatch request
+Aug 31 12:01:22 symfony [info] {sfContext} initialization
+Aug 31 12:01:22 symfony [info] {sfController} initialization
+Aug 31 12:01:22 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:01:22 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:01:22 symfony [info] {sfController} dispatch request
+Aug 31 12:01:43 symfony [info] {sfContext} initialization
+Aug 31 12:01:43 symfony [info] {sfController} initialization
+Aug 31 12:01:43 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:01:43 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:01:43 symfony [info] {sfController} dispatch request
+Aug 31 12:01:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 12:01:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 12:01:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 12:01:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 12:01:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 12:01:43 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 12:01:43 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 12:01:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 12:02:14 symfony [info] {sfContext} initialization
+Aug 31 12:02:14 symfony [info] {sfController} initialization
+Aug 31 12:02:14 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:02:14 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:02:14 symfony [info] {sfController} dispatch request
+Aug 31 12:02:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 12:02:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 12:02:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 12:02:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 12:02:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 12:02:15 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 12:02:15 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 12:02:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 12:02:15 symfony [info] {PartialHelper} set slot "right"
+Aug 31 12:02:15 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 12:02:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 12:02:23 symfony [info] {sfContext} initialization
+Aug 31 12:02:23 symfony [info] {sfController} initialization
+Aug 31 12:02:23 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:02:23 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:02:23 symfony [info] {sfController} dispatch request
+Aug 31 12:02:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 12:02:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 12:02:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 12:02:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 12:02:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 12:02:23 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 12:02:24 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 12:02:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 12:02:24 symfony [info] {PartialHelper} set slot "right"
+Aug 31 12:02:24 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 12:02:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 12:02:46 symfony [info] {sfContext} initialization
+Aug 31 12:02:46 symfony [info] {sfController} initialization
+Aug 31 12:02:46 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 12:02:46 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 12:02:46 symfony [info] {sfController} dispatch request
+Aug 31 12:02:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 12:02:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 12:02:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 12:02:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 12:02:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 12:02:46 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 12:02:46 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 12:02:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 12:02:46 symfony [info] {PartialHelper} set slot "right"
+Aug 31 12:02:46 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 12:02:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:47:25 symfony [info] {sfContext} initialization
+Aug 31 13:47:25 symfony [info] {sfController} initialization
+Aug 31 13:47:25 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:47:25 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:47:25 symfony [info] {sfUser} automatic user logout
+Aug 31 13:47:25 symfony [info] {sfUser} user is not authenticated
+Aug 31 13:47:25 symfony [info] {sfController} dispatch request
+Aug 31 13:47:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:47:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:47:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:47:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:47:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:47:25 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:47:25 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:47:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:47:25 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:47:25 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:47:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:47:32 symfony [info] {sfContext} initialization
+Aug 31 13:47:32 symfony [info] {sfController} initialization
+Aug 31 13:47:32 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:47:32 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:47:32 symfony [info] {sfController} dispatch request
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:47:33 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:47:33 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:47:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:47:33 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:47:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:47:33 symfony [info] {sfFilter} render to client
+Aug 31 13:47:33 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:47:33 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:47:33 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:47:33 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 13:47:33 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:47:33 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.34 ms (1)
+Aug 31 13:47:33 symfony [info] {sfContext} initialization
+Aug 31 13:47:33 symfony [info] {sfController} initialization
+Aug 31 13:47:33 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:47:33 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:47:33 symfony [info] {sfController} dispatch request
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:47:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:47:33 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:47:33 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:47:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:47:33 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:47:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:47:34 symfony [info] {sfFilter} render to client
+Aug 31 13:47:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:47:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:47:34 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:47:34 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 13:47:34 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:47:34 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.29 ms (1)
+Aug 31 13:48:01 symfony [info] {sfContext} initialization
+Aug 31 13:48:01 symfony [info] {sfController} initialization
+Aug 31 13:48:01 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:48:01 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:48:01 symfony [info] {sfController} dispatch request
+Aug 31 13:48:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:48:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:48:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:48:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:48:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:48:01 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:48:01 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:48:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:48:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:01 symfony [info] {sfFilter} render to client
+Aug 31 13:48:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:48:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:48:01 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:48:01 symfony [info] {sfTimerManager} Configuration 5.18 ms (12)
+Aug 31 13:48:01 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:48:01 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.15 ms (1)
+Aug 31 13:48:02 symfony [info] {sfContext} initialization
+Aug 31 13:48:02 symfony [info] {sfController} initialization
+Aug 31 13:48:02 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:48:02 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:48:02 symfony [info] {sfController} dispatch request
+Aug 31 13:48:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:48:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:48:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:48:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:48:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:48:02 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:48:02 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:48:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:48:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:02 symfony [info] {sfFilter} render to client
+Aug 31 13:48:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:48:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:48:02 symfony [info] {sfResponse} send content (20768 o)
+Aug 31 13:48:02 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 13:48:02 symfony [info] {sfTimerManager} Action "main/index" 0.16 ms (1)
+Aug 31 13:48:02 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.67 ms (1)
+Aug 31 13:48:06 symfony [info] {sfContext} initialization
+Aug 31 13:48:06 symfony [info] {sfController} initialization
+Aug 31 13:48:06 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:48:06 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:48:06 symfony [info] {sfController} dispatch request
+Aug 31 13:48:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:48:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:48:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:48:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:48:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:48:06 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:48:06 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:48:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:48:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:06 symfony [info] {sfFilter} render to client
+Aug 31 13:48:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:48:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:48:06 symfony [info] {sfResponse} send content (20767 o)
+Aug 31 13:48:06 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 13:48:06 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:48:06 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.68 ms (1)
+Aug 31 13:48:20 symfony [info] {sfContext} initialization
+Aug 31 13:48:20 symfony [info] {sfController} initialization
+Aug 31 13:48:20 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:48:20 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:48:20 symfony [info] {sfController} dispatch request
+Aug 31 13:48:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:48:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:48:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:48:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:48:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:48:20 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:48:20 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:48:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:48:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:20 symfony [info] {sfFilter} render to client
+Aug 31 13:48:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:48:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:48:20 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:48:20 symfony [info] {sfTimerManager} Configuration 5.00 ms (12)
+Aug 31 13:48:20 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:48:20 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.52 ms (1)
+Aug 31 13:48:21 symfony [info] {sfContext} initialization
+Aug 31 13:48:21 symfony [info] {sfController} initialization
+Aug 31 13:48:21 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:48:21 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:48:21 symfony [info] {sfController} dispatch request
+Aug 31 13:48:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:48:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:48:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:48:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:48:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:48:21 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:48:21 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:48:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:48:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:48:21 symfony [info] {sfFilter} render to client
+Aug 31 13:48:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:48:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:48:21 symfony [info] {sfResponse} send content (20768 o)
+Aug 31 13:48:21 symfony [info] {sfTimerManager} Configuration 4.93 ms (12)
+Aug 31 13:48:21 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:48:21 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.05 ms (1)
+Aug 31 13:49:01 symfony [info] {sfContext} initialization
+Aug 31 13:49:01 symfony [info] {sfController} initialization
+Aug 31 13:49:01 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:01 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:01 symfony [info] {sfController} dispatch request
+Aug 31 13:49:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:01 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:01 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:01 symfony [info] {sfFilter} render to client
+Aug 31 13:49:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:01 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:01 symfony [info] {sfTimerManager} Configuration 4.98 ms (12)
+Aug 31 13:49:01 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:49:01 symfony [info] {sfTimerManager} View "Success" for "main/index" 19.06 ms (1)
+Aug 31 13:49:20 symfony [info] {sfContext} initialization
+Aug 31 13:49:20 symfony [info] {sfController} initialization
+Aug 31 13:49:20 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:20 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:20 symfony [info] {sfController} dispatch request
+Aug 31 13:49:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:20 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:20 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:20 symfony [info] {sfFilter} render to client
+Aug 31 13:49:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:20 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:20 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 13:49:20 symfony [info] {sfTimerManager} Action "main/index" 0.18 ms (1)
+Aug 31 13:49:20 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.89 ms (1)
+Aug 31 13:49:36 symfony [info] {sfContext} initialization
+Aug 31 13:49:36 symfony [info] {sfController} initialization
+Aug 31 13:49:36 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:36 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:36 symfony [info] {sfController} dispatch request
+Aug 31 13:49:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:36 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:36 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:36 symfony [info] {sfFilter} render to client
+Aug 31 13:49:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:36 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:36 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 13:49:36 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:49:36 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.80 ms (1)
+Aug 31 13:49:47 symfony [info] {sfContext} initialization
+Aug 31 13:49:47 symfony [info] {sfController} initialization
+Aug 31 13:49:47 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:47 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:47 symfony [info] {sfController} dispatch request
+Aug 31 13:49:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:47 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:47 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:47 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:47 symfony [info] {sfFilter} render to client
+Aug 31 13:49:47 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:47 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:47 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:47 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 13:49:47 symfony [info] {sfTimerManager} Action "main/index" 0.18 ms (1)
+Aug 31 13:49:47 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.26 ms (1)
+Aug 31 13:49:49 symfony [info] {sfContext} initialization
+Aug 31 13:49:49 symfony [info] {sfController} initialization
+Aug 31 13:49:49 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:49 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:49 symfony [info] {sfController} dispatch request
+Aug 31 13:49:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:49 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:49 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:49 symfony [info] {sfFilter} render to client
+Aug 31 13:49:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:49 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:49 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 13:49:49 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:49:49 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.66 ms (1)
+Aug 31 13:49:52 symfony [info] {sfContext} initialization
+Aug 31 13:49:52 symfony [info] {sfController} initialization
+Aug 31 13:49:52 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:52 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:52 symfony [info] {sfController} dispatch request
+Aug 31 13:49:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:52 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:52 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:52 symfony [info] {sfFilter} render to client
+Aug 31 13:49:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:52 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:52 symfony [info] {sfTimerManager} Configuration 5.29 ms (12)
+Aug 31 13:49:52 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:49:52 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.92 ms (1)
+Aug 31 13:49:57 symfony [info] {sfContext} initialization
+Aug 31 13:49:57 symfony [info] {sfController} initialization
+Aug 31 13:49:57 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:49:57 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:49:57 symfony [info] {sfController} dispatch request
+Aug 31 13:49:57 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:49:57 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:49:57 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:49:57 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:49:57 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:49:57 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:49:57 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:49:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:49:57 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:49:57 symfony [info] {sfFilter} render to client
+Aug 31 13:49:57 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:49:57 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:49:57 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:49:57 symfony [info] {sfTimerManager} Configuration 5.19 ms (12)
+Aug 31 13:49:57 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 13:49:57 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.18 ms (1)
+Aug 31 13:50:07 symfony [info] {sfContext} initialization
+Aug 31 13:50:07 symfony [info] {sfController} initialization
+Aug 31 13:50:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:50:07 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:50:07 symfony [info] {sfController} dispatch request
+Aug 31 13:50:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:50:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:50:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:50:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:50:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:50:07 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:50:07 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:50:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:50:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:50:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:50:07 symfony [info] {sfFilter} render to client
+Aug 31 13:50:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:50:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:50:07 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:50:07 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 13:50:07 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:50:07 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.94 ms (1)
+Aug 31 13:50:35 symfony [info] {sfContext} initialization
+Aug 31 13:50:35 symfony [info] {sfController} initialization
+Aug 31 13:50:35 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:50:35 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:50:35 symfony [info] {sfController} dispatch request
+Aug 31 13:50:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:50:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:50:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:50:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:50:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:50:35 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:50:35 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:50:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:50:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:50:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:50:35 symfony [info] {sfFilter} render to client
+Aug 31 13:50:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:50:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:50:35 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:50:35 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 13:50:35 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:50:35 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.22 ms (1)
+Aug 31 13:51:37 symfony [info] {sfContext} initialization
+Aug 31 13:51:37 symfony [info] {sfController} initialization
+Aug 31 13:51:37 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:51:37 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:51:37 symfony [info] {sfController} dispatch request
+Aug 31 13:51:37 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:51:37 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:51:37 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:51:37 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:51:37 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:51:37 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:51:37 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:51:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:51:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:51:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:51:37 symfony [info] {sfFilter} render to client
+Aug 31 13:51:37 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:51:37 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:51:37 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:51:37 symfony [info] {sfTimerManager} Configuration 5.31 ms (12)
+Aug 31 13:51:37 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 13:51:37 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.25 ms (1)
+Aug 31 13:52:07 symfony [info] {sfContext} initialization
+Aug 31 13:52:07 symfony [info] {sfController} initialization
+Aug 31 13:52:07 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:52:07 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:52:07 symfony [info] {sfController} dispatch request
+Aug 31 13:52:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:52:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:52:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:52:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:52:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:52:07 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:52:07 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:52:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:52:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:07 symfony [info] {sfFilter} render to client
+Aug 31 13:52:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:52:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:52:07 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:52:07 symfony [info] {sfTimerManager} Configuration 5.18 ms (12)
+Aug 31 13:52:07 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:52:07 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.89 ms (1)
+Aug 31 13:52:08 symfony [info] {sfContext} initialization
+Aug 31 13:52:08 symfony [info] {sfController} initialization
+Aug 31 13:52:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:52:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:52:08 symfony [info] {sfController} dispatch request
+Aug 31 13:52:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:52:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:52:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:52:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:52:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:52:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:52:08 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:52:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:08 symfony [info] {sfFilter} render to client
+Aug 31 13:52:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:52:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:52:08 symfony [info] {sfResponse} send content (20768 o)
+Aug 31 13:52:08 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 13:52:08 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:52:08 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.44 ms (1)
+Aug 31 13:52:20 symfony [info] {sfContext} initialization
+Aug 31 13:52:20 symfony [info] {sfController} initialization
+Aug 31 13:52:20 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:52:20 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:52:20 symfony [info] {sfController} dispatch request
+Aug 31 13:52:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:52:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:52:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:52:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:52:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:52:20 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:52:20 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:52:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:20 symfony [info] {sfFilter} render to client
+Aug 31 13:52:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:52:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:52:20 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:52:20 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 13:52:20 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:52:20 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.77 ms (1)
+Aug 31 13:52:39 symfony [info] {sfContext} initialization
+Aug 31 13:52:39 symfony [info] {sfController} initialization
+Aug 31 13:52:39 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:52:39 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:52:39 symfony [info] {sfController} dispatch request
+Aug 31 13:52:39 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:52:39 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:52:39 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:52:39 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:52:39 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:52:39 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:52:39 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:52:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:52:39 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:39 symfony [info] {sfFilter} render to client
+Aug 31 13:52:39 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:52:39 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:52:39 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:52:39 symfony [info] {sfTimerManager} Configuration 5.34 ms (12)
+Aug 31 13:52:39 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:52:39 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.64 ms (1)
+Aug 31 13:52:54 symfony [info] {sfContext} initialization
+Aug 31 13:52:54 symfony [info] {sfController} initialization
+Aug 31 13:52:54 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:52:54 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:52:54 symfony [info] {sfController} dispatch request
+Aug 31 13:52:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:52:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:52:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:52:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:52:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:52:54 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:52:54 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:52:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:52:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:52:54 symfony [info] {sfFilter} render to client
+Aug 31 13:52:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:52:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:52:54 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:52:54 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 13:52:54 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 13:52:54 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.65 ms (1)
+Aug 31 13:53:03 symfony [info] {sfContext} initialization
+Aug 31 13:53:03 symfony [info] {sfController} initialization
+Aug 31 13:53:03 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:53:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:53:03 symfony [info] {sfController} dispatch request
+Aug 31 13:53:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:53:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:53:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:53:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:53:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:53:03 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:53:03 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:53:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:53:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:03 symfony [info] {sfFilter} render to client
+Aug 31 13:53:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:53:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:53:03 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:53:03 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 13:53:03 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:53:03 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.61 ms (1)
+Aug 31 13:53:12 symfony [info] {sfContext} initialization
+Aug 31 13:53:12 symfony [info] {sfController} initialization
+Aug 31 13:53:12 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:53:12 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:53:12 symfony [info] {sfController} dispatch request
+Aug 31 13:53:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:53:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:53:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:53:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:53:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:53:12 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:53:12 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:53:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:53:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:12 symfony [info] {sfFilter} render to client
+Aug 31 13:53:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:53:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:53:12 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:53:12 symfony [info] {sfTimerManager} Configuration 4.96 ms (12)
+Aug 31 13:53:12 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 13:53:12 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.35 ms (1)
+Aug 31 13:53:28 symfony [info] {sfContext} initialization
+Aug 31 13:53:28 symfony [info] {sfController} initialization
+Aug 31 13:53:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:53:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:53:28 symfony [info] {sfController} dispatch request
+Aug 31 13:53:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:53:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:53:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:53:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:53:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:53:28 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:53:28 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:53:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:28 symfony [info] {sfFilter} render to client
+Aug 31 13:53:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:53:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:53:28 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:53:28 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 13:53:28 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:53:28 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.80 ms (1)
+Aug 31 13:53:29 symfony [info] {sfContext} initialization
+Aug 31 13:53:29 symfony [info] {sfController} initialization
+Aug 31 13:53:29 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:53:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:53:29 symfony [info] {sfController} dispatch request
+Aug 31 13:53:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:53:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:53:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:53:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:53:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:53:29 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:53:29 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:53:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:29 symfony [info] {sfFilter} render to client
+Aug 31 13:53:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:53:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:53:29 symfony [info] {sfResponse} send content (20769 o)
+Aug 31 13:53:29 symfony [info] {sfTimerManager} Configuration 4.90 ms (12)
+Aug 31 13:53:29 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:53:29 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.28 ms (1)
+Aug 31 13:53:49 symfony [info] {sfContext} initialization
+Aug 31 13:53:49 symfony [info] {sfController} initialization
+Aug 31 13:53:49 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 13:53:49 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 13:53:49 symfony [info] {sfController} dispatch request
+Aug 31 13:53:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:53:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:53:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:53:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:53:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:53:49 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 13:53:49 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 13:53:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 13:53:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:53:49 symfony [info] {sfFilter} render to client
+Aug 31 13:53:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:53:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:53:49 symfony [info] {sfResponse} send content (20768 o)
+Aug 31 13:53:49 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 13:53:49 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 13:53:49 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.94 ms (1)
+Aug 31 13:54:01 symfony [info] {sfContext} initialization
+Aug 31 13:54:01 symfony [info] {sfController} initialization
+Aug 31 13:54:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:54:01 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:54:01 symfony [info] {sfController} dispatch request
+Aug 31 13:54:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:54:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:54:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:54:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:54:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:54:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:54:01 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:54:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:54:01 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:54:01 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:54:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:55:29 symfony [info] {sfContext} initialization
+Aug 31 13:55:29 symfony [info] {sfController} initialization
+Aug 31 13:55:29 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:55:29 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:55:29 symfony [info] {sfController} dispatch request
+Aug 31 13:55:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:55:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:55:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:55:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:55:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:55:29 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:55:30 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:55:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:55:30 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:55:30 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:55:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:55:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:30 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:55:30 symfony [info] {sfFilter} render to client
+Aug 31 13:55:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:55:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:55:30 symfony [info] {sfResponse} send content (23255 o)
+Aug 31 13:55:30 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 13:55:30 symfony [info] {sfTimerManager} Action "manual/index" 99.30 ms (1)
+Aug 31 13:55:30 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.66 ms (1)
+Aug 31 13:55:30 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:55:48 symfony [info] {sfContext} initialization
+Aug 31 13:55:48 symfony [info] {sfController} initialization
+Aug 31 13:55:48 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:55:48 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:55:48 symfony [info] {sfController} dispatch request
+Aug 31 13:55:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:55:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:55:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:55:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:55:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:55:48 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:55:48 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:55:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:55:48 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:55:48 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:55:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:55:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:48 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:55:48 symfony [info] {sfFilter} render to client
+Aug 31 13:55:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:55:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:55:48 symfony [info] {sfResponse} send content (23255 o)
+Aug 31 13:55:48 symfony [info] {sfTimerManager} Configuration 5.48 ms (12)
+Aug 31 13:55:48 symfony [info] {sfTimerManager} Action "manual/index" 99.50 ms (1)
+Aug 31 13:55:48 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.23 ms (1)
+Aug 31 13:55:48 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:55:54 symfony [info] {sfContext} initialization
+Aug 31 13:55:54 symfony [info] {sfController} initialization
+Aug 31 13:55:54 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:55:54 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:55:54 symfony [info] {sfController} dispatch request
+Aug 31 13:55:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:55:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:55:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:55:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:55:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:55:54 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:55:55 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:55:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:55:55 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:55:55 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:55:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:55:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:55:55 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:55:55 symfony [info] {sfFilter} render to client
+Aug 31 13:55:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:55:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:55:55 symfony [info] {sfResponse} send content (23256 o)
+Aug 31 13:55:55 symfony [info] {sfTimerManager} Configuration 5.23 ms (12)
+Aug 31 13:55:55 symfony [info] {sfTimerManager} Action "manual/index" 108.47 ms (1)
+Aug 31 13:55:55 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.05 ms (1)
+Aug 31 13:55:55 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:56:21 symfony [info] {sfContext} initialization
+Aug 31 13:56:21 symfony [info] {sfController} initialization
+Aug 31 13:56:21 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:56:21 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:56:21 symfony [info] {sfController} dispatch request
+Aug 31 13:56:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:56:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:56:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:56:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:56:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:56:21 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:56:21 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:56:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:56:21 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:56:21 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:56:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:56:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:21 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:56:21 symfony [info] {sfFilter} render to client
+Aug 31 13:56:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:56:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:56:21 symfony [info] {sfResponse} send content (23256 o)
+Aug 31 13:56:21 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 13:56:21 symfony [info] {sfTimerManager} Action "manual/index" 102.14 ms (1)
+Aug 31 13:56:21 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.12 ms (1)
+Aug 31 13:56:21 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.79 ms (1)
+Aug 31 13:56:34 symfony [info] {sfContext} initialization
+Aug 31 13:56:34 symfony [info] {sfController} initialization
+Aug 31 13:56:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:56:34 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:56:34 symfony [info] {sfController} dispatch request
+Aug 31 13:56:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:56:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:56:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:56:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:56:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:56:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:56:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:56:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:56:34 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:56:34 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:56:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:56:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:34 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:56:34 symfony [info] {sfFilter} render to client
+Aug 31 13:56:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:56:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:56:34 symfony [info] {sfResponse} send content (23255 o)
+Aug 31 13:56:34 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 13:56:34 symfony [info] {sfTimerManager} Action "manual/index" 99.17 ms (1)
+Aug 31 13:56:34 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.53 ms (1)
+Aug 31 13:56:34 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:56:44 symfony [info] {sfContext} initialization
+Aug 31 13:56:44 symfony [info] {sfController} initialization
+Aug 31 13:56:44 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:56:44 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:56:44 symfony [info] {sfController} dispatch request
+Aug 31 13:56:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:56:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:56:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:56:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:56:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:56:44 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:56:45 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:56:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:56:45 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:56:45 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:56:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:56:45 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:56:45 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:56:45 symfony [info] {sfFilter} render to client
+Aug 31 13:56:45 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:56:45 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:56:45 symfony [info] {sfResponse} send content (23255 o)
+Aug 31 13:56:45 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 13:56:45 symfony [info] {sfTimerManager} Action "manual/index" 99.49 ms (1)
+Aug 31 13:56:45 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.83 ms (1)
+Aug 31 13:56:45 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.79 ms (1)
+Aug 31 13:57:12 symfony [info] {sfContext} initialization
+Aug 31 13:57:12 symfony [info] {sfController} initialization
+Aug 31 13:57:12 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:57:12 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:57:12 symfony [info] {sfController} dispatch request
+Aug 31 13:57:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:57:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:57:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:57:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:57:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:57:12 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:57:12 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:57:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:57:12 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:57:12 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:57:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:57:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:57:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:57:12 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:57:12 symfony [info] {sfFilter} render to client
+Aug 31 13:57:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:57:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:57:12 symfony [info] {sfResponse} send content (23256 o)
+Aug 31 13:57:12 symfony [info] {sfTimerManager} Configuration 5.86 ms (12)
+Aug 31 13:57:12 symfony [info] {sfTimerManager} Action "manual/index" 100.39 ms (1)
+Aug 31 13:57:12 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.97 ms (1)
+Aug 31 13:57:12 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:57:32 symfony [info] {sfContext} initialization
+Aug 31 13:57:32 symfony [info] {sfController} initialization
+Aug 31 13:57:32 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:57:32 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:57:32 symfony [info] {sfController} dispatch request
+Aug 31 13:57:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:57:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:57:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:57:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:57:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:57:32 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:57:32 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:57:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:57:32 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:57:32 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:57:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:57:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:57:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:57:32 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:57:32 symfony [info] {sfFilter} render to client
+Aug 31 13:57:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:57:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:57:32 symfony [info] {sfResponse} send content (23244 o)
+Aug 31 13:57:32 symfony [info] {sfTimerManager} Configuration 5.19 ms (12)
+Aug 31 13:57:32 symfony [info] {sfTimerManager} Action "manual/index" 97.96 ms (1)
+Aug 31 13:57:32 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.50 ms (1)
+Aug 31 13:57:32 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.82 ms (1)
+Aug 31 13:58:02 symfony [info] {sfContext} initialization
+Aug 31 13:58:02 symfony [info] {sfController} initialization
+Aug 31 13:58:02 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:58:02 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:58:02 symfony [info] {sfController} dispatch request
+Aug 31 13:58:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:58:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:58:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:58:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:58:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:58:02 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:58:02 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:58:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:58:02 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:58:02 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:58:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:58:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:02 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:58:02 symfony [info] {sfFilter} render to client
+Aug 31 13:58:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:58:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:58:02 symfony [info] {sfResponse} send content (23246 o)
+Aug 31 13:58:02 symfony [info] {sfTimerManager} Configuration 5.40 ms (12)
+Aug 31 13:58:02 symfony [info] {sfTimerManager} Action "manual/index" 164.12 ms (1)
+Aug 31 13:58:02 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.32 ms (1)
+Aug 31 13:58:02 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 13:58:20 symfony [info] {sfContext} initialization
+Aug 31 13:58:20 symfony [info] {sfController} initialization
+Aug 31 13:58:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:58:20 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:58:20 symfony [info] {sfController} dispatch request
+Aug 31 13:58:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:58:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:58:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:58:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:58:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:58:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:58:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:58:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:58:20 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:58:20 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:58:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:58:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:20 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:58:20 symfony [info] {sfFilter} render to client
+Aug 31 13:58:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:58:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:58:20 symfony [info] {sfResponse} send content (23246 o)
+Aug 31 13:58:20 symfony [info] {sfTimerManager} Configuration 6.02 ms (12)
+Aug 31 13:58:20 symfony [info] {sfTimerManager} Action "manual/index" 102.72 ms (1)
+Aug 31 13:58:20 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.56 ms (1)
+Aug 31 13:58:20 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.75 ms (1)
+Aug 31 13:58:30 symfony [info] {sfContext} initialization
+Aug 31 13:58:30 symfony [info] {sfController} initialization
+Aug 31 13:58:30 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:58:30 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:58:30 symfony [info] {sfController} dispatch request
+Aug 31 13:58:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:58:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:58:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:58:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:58:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:58:30 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:58:30 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:58:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:58:30 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:58:30 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:58:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:58:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:30 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:58:30 symfony [info] {sfFilter} render to client
+Aug 31 13:58:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:58:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:58:30 symfony [info] {sfResponse} send content (23245 o)
+Aug 31 13:58:30 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 13:58:30 symfony [info] {sfTimerManager} Action "manual/index" 96.61 ms (1)
+Aug 31 13:58:30 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.55 ms (1)
+Aug 31 13:58:30 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 13:58:59 symfony [info] {sfContext} initialization
+Aug 31 13:58:59 symfony [info] {sfController} initialization
+Aug 31 13:58:59 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:58:59 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:58:59 symfony [info] {sfController} dispatch request
+Aug 31 13:58:59 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:58:59 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:58:59 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:58:59 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:58:59 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:58:59 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:58:59 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:58:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:58:59 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:58:59 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:58:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:58:59 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:58:59 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:58:59 symfony [info] {sfFilter} render to client
+Aug 31 13:58:59 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:58:59 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:58:59 symfony [info] {sfResponse} send content (23246 o)
+Aug 31 13:58:59 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 13:58:59 symfony [info] {sfTimerManager} Action "manual/index" 100.86 ms (1)
+Aug 31 13:58:59 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.08 ms (1)
+Aug 31 13:58:59 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 13:59:18 symfony [info] {sfContext} initialization
+Aug 31 13:59:18 symfony [info] {sfController} initialization
+Aug 31 13:59:18 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:59:18 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:59:18 symfony [info] {sfController} dispatch request
+Aug 31 13:59:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:59:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:59:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:59:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:59:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:59:18 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:59:18 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:59:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:59:18 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:59:18 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:59:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:59:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:18 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:59:18 symfony [info] {sfFilter} render to client
+Aug 31 13:59:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:59:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:59:18 symfony [info] {sfResponse} send content (23246 o)
+Aug 31 13:59:18 symfony [info] {sfTimerManager} Configuration 5.84 ms (12)
+Aug 31 13:59:18 symfony [info] {sfTimerManager} Action "manual/index" 108.17 ms (1)
+Aug 31 13:59:18 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.92 ms (1)
+Aug 31 13:59:18 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 13:59:50 symfony [info] {sfContext} initialization
+Aug 31 13:59:50 symfony [info] {sfController} initialization
+Aug 31 13:59:50 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:59:50 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:59:50 symfony [info] {sfController} dispatch request
+Aug 31 13:59:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:59:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:59:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:59:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:59:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:59:50 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:59:50 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:59:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:59:50 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:59:50 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:59:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:59:50 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:50 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:59:50 symfony [info] {sfFilter} render to client
+Aug 31 13:59:50 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:59:50 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:59:50 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 13:59:50 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 13:59:50 symfony [info] {sfTimerManager} Action "manual/index" 97.97 ms (1)
+Aug 31 13:59:50 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.90 ms (1)
+Aug 31 13:59:50 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 13:59:59 symfony [info] {sfContext} initialization
+Aug 31 13:59:59 symfony [info] {sfController} initialization
+Aug 31 13:59:59 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 13:59:59 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 13:59:59 symfony [info] {sfController} dispatch request
+Aug 31 13:59:59 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 13:59:59 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 13:59:59 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 13:59:59 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 13:59:59 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 13:59:59 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 13:59:59 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 13:59:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 13:59:59 symfony [info] {PartialHelper} set slot "right"
+Aug 31 13:59:59 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 13:59:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 13:59:59 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 13:59:59 symfony [info] {PartialHelper} get slot "right"
+Aug 31 13:59:59 symfony [info] {sfFilter} render to client
+Aug 31 13:59:59 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 13:59:59 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 13:59:59 symfony [info] {sfResponse} send content (23204 o)
+Aug 31 13:59:59 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 13:59:59 symfony [info] {sfTimerManager} Action "manual/index" 98.23 ms (1)
+Aug 31 13:59:59 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.49 ms (1)
+Aug 31 13:59:59 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:00:06 symfony [info] {sfContext} initialization
+Aug 31 14:00:06 symfony [info] {sfController} initialization
+Aug 31 14:00:06 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:00:06 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:00:06 symfony [info] {sfController} dispatch request
+Aug 31 14:00:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:00:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:00:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:00:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:00:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:00:06 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:00:06 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:00:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:00:06 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:00:06 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:00:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:00:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:06 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:00:06 symfony [info] {sfFilter} render to client
+Aug 31 14:00:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:00:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:00:06 symfony [info] {sfResponse} send content (23238 o)
+Aug 31 14:00:06 symfony [info] {sfTimerManager} Configuration 5.26 ms (12)
+Aug 31 14:00:06 symfony [info] {sfTimerManager} Action "manual/index" 100.51 ms (1)
+Aug 31 14:00:06 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.18 ms (1)
+Aug 31 14:00:06 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 14:00:25 symfony [info] {sfContext} initialization
+Aug 31 14:00:25 symfony [info] {sfController} initialization
+Aug 31 14:00:25 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:00:25 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:00:25 symfony [info] {sfController} dispatch request
+Aug 31 14:00:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:00:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:00:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:00:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:00:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:00:25 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:00:25 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:00:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:00:25 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:00:25 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:00:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:00:25 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:25 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:00:25 symfony [info] {sfFilter} render to client
+Aug 31 14:00:25 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:00:25 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:00:25 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:00:25 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 14:00:25 symfony [info] {sfTimerManager} Action "manual/index" 97.58 ms (1)
+Aug 31 14:00:25 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.16 ms (1)
+Aug 31 14:00:25 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 14:00:31 symfony [info] {sfContext} initialization
+Aug 31 14:00:31 symfony [info] {sfController} initialization
+Aug 31 14:00:31 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:00:31 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:00:31 symfony [info] {sfController} dispatch request
+Aug 31 14:00:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:00:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:00:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:00:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:00:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:00:31 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:00:31 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:00:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:00:31 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:00:31 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:00:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:00:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:31 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:00:31 symfony [info] {sfFilter} render to client
+Aug 31 14:00:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:00:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:00:31 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:00:31 symfony [info] {sfTimerManager} Configuration 5.21 ms (12)
+Aug 31 14:00:31 symfony [info] {sfTimerManager} Action "manual/index" 96.94 ms (1)
+Aug 31 14:00:31 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.13 ms (1)
+Aug 31 14:00:31 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:00:34 symfony [info] {sfContext} initialization
+Aug 31 14:00:34 symfony [info] {sfController} initialization
+Aug 31 14:00:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:00:34 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:00:34 symfony [info] {sfController} dispatch request
+Aug 31 14:00:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:00:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:00:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:00:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:00:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:00:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:00:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:00:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:00:36 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:00:36 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:00:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:00:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:00:36 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:00:36 symfony [info] {sfFilter} render to client
+Aug 31 14:00:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:00:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:00:36 symfony [info] {sfResponse} send content (963472 o)
+Aug 31 14:00:37 symfony [info] {sfTimerManager} Configuration 5.22 ms (12)
+Aug 31 14:00:37 symfony [info] {sfTimerManager} Action "manual/index" 96.40 ms (1)
+Aug 31 14:00:37 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1921.56 ms (1)
+Aug 31 14:00:37 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.97 ms (1)
+Aug 31 14:01:20 symfony [info] {sfContext} initialization
+Aug 31 14:01:20 symfony [info] {sfController} initialization
+Aug 31 14:01:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:01:20 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:01:20 symfony [info] {sfController} dispatch request
+Aug 31 14:01:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:01:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:01:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:01:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:01:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:01:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:01:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:01:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:01:22 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:01:22 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:01:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:01:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:22 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:01:22 symfony [info] {sfFilter} render to client
+Aug 31 14:01:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:01:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:01:22 symfony [info] {sfResponse} send content (963473 o)
+Aug 31 14:01:23 symfony [info] {sfTimerManager} Configuration 5.17 ms (12)
+Aug 31 14:01:23 symfony [info] {sfTimerManager} Action "manual/index" 101.52 ms (1)
+Aug 31 14:01:23 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1700.30 ms (1)
+Aug 31 14:01:23 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.95 ms (1)
+Aug 31 14:01:43 symfony [info] {sfContext} initialization
+Aug 31 14:01:43 symfony [info] {sfController} initialization
+Aug 31 14:01:43 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:01:43 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:01:43 symfony [info] {sfController} dispatch request
+Aug 31 14:01:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:01:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:01:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:01:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:01:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:01:43 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:01:43 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:01:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:01:43 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:01:43 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:01:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:01:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:43 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:01:43 symfony [info] {sfFilter} render to client
+Aug 31 14:01:43 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:01:43 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:01:43 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:01:43 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 14:01:43 symfony [info] {sfTimerManager} Action "manual/index" 96.62 ms (1)
+Aug 31 14:01:43 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.29 ms (1)
+Aug 31 14:01:43 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:01:44 symfony [info] {sfContext} initialization
+Aug 31 14:01:44 symfony [info] {sfController} initialization
+Aug 31 14:01:44 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:01:44 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:01:44 symfony [info] {sfController} dispatch request
+Aug 31 14:01:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:01:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:01:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:01:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:01:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:01:44 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:01:45 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:01:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:01:45 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:01:45 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:01:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:01:45 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:45 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:01:45 symfony [info] {sfFilter} render to client
+Aug 31 14:01:45 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:01:45 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:01:45 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:01:45 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 14:01:45 symfony [info] {sfTimerManager} Action "manual/index" 96.92 ms (1)
+Aug 31 14:01:45 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.32 ms (1)
+Aug 31 14:01:45 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:01:52 symfony [info] {sfContext} initialization
+Aug 31 14:01:52 symfony [info] {sfController} initialization
+Aug 31 14:01:52 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:01:52 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:01:52 symfony [info] {sfController} dispatch request
+Aug 31 14:01:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:01:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:01:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:01:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:01:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:01:52 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:01:52 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:01:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:01:52 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:01:52 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:01:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:01:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:01:52 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:01:52 symfony [info] {sfFilter} render to client
+Aug 31 14:01:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:01:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:01:52 symfony [info] {sfResponse} send content (22678 o)
+Aug 31 14:01:52 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 14:01:52 symfony [info] {sfTimerManager} Action "manual/index" 98.48 ms (1)
+Aug 31 14:01:52 symfony [info] {sfTimerManager} View "Success" for "manual/index" 18.98 ms (1)
+Aug 31 14:01:52 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.43 ms (1)
+Aug 31 14:02:08 symfony [info] {sfContext} initialization
+Aug 31 14:02:08 symfony [info] {sfController} initialization
+Aug 31 14:02:08 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:02:08 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:02:08 symfony [info] {sfController} dispatch request
+Aug 31 14:02:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:02:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:02:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:02:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:02:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:02:08 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:02:08 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:02:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:02:08 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:02:08 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:02:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:02:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:08 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:02:08 symfony [info] {sfFilter} render to client
+Aug 31 14:02:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:02:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:02:08 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:02:08 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 14:02:08 symfony [info] {sfTimerManager} Action "manual/index" 99.87 ms (1)
+Aug 31 14:02:08 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.30 ms (1)
+Aug 31 14:02:08 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.73 ms (1)
+Aug 31 14:02:13 symfony [info] {sfContext} initialization
+Aug 31 14:02:13 symfony [info] {sfController} initialization
+Aug 31 14:02:13 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:02:13 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:02:13 symfony [info] {sfController} dispatch request
+Aug 31 14:02:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:02:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:02:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:02:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:02:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:02:13 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:02:13 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:02:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:02:13 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:02:13 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:02:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:02:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:13 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:02:13 symfony [info] {sfFilter} render to client
+Aug 31 14:02:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:02:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:02:13 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:02:13 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 14:02:13 symfony [info] {sfTimerManager} Action "manual/index" 97.44 ms (1)
+Aug 31 14:02:13 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.15 ms (1)
+Aug 31 14:02:13 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:02:29 symfony [info] {sfContext} initialization
+Aug 31 14:02:29 symfony [info] {sfController} initialization
+Aug 31 14:02:29 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:02:29 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:02:29 symfony [info] {sfController} dispatch request
+Aug 31 14:02:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:02:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:02:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:02:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:02:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:02:29 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:02:29 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:02:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:02:29 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:02:29 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:02:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:02:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:29 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:02:29 symfony [info] {sfFilter} render to client
+Aug 31 14:02:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:02:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:02:29 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:02:29 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 14:02:29 symfony [info] {sfTimerManager} Action "manual/index" 98.80 ms (1)
+Aug 31 14:02:29 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.57 ms (1)
+Aug 31 14:02:29 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.80 ms (1)
+Aug 31 14:02:49 symfony [info] {sfContext} initialization
+Aug 31 14:02:49 symfony [info] {sfController} initialization
+Aug 31 14:02:49 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:02:49 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:02:49 symfony [info] {sfController} dispatch request
+Aug 31 14:02:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:02:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:02:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:02:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:02:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:02:49 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:02:49 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:02:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:02:49 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:02:49 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:02:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:02:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:49 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:02:49 symfony [info] {sfFilter} render to client
+Aug 31 14:02:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:02:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:02:49 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:02:49 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 14:02:49 symfony [info] {sfTimerManager} Action "manual/index" 96.87 ms (1)
+Aug 31 14:02:49 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.07 ms (1)
+Aug 31 14:02:49 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 14:02:59 symfony [info] {sfContext} initialization
+Aug 31 14:02:59 symfony [info] {sfController} initialization
+Aug 31 14:02:59 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:02:59 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:02:59 symfony [info] {sfController} dispatch request
+Aug 31 14:02:59 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:02:59 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:02:59 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:02:59 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:02:59 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:02:59 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:02:59 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:02:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:02:59 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:02:59 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:02:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:02:59 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:02:59 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:02:59 symfony [info] {sfFilter} render to client
+Aug 31 14:02:59 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:02:59 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:02:59 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:02:59 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 14:02:59 symfony [info] {sfTimerManager} Action "manual/index" 99.25 ms (1)
+Aug 31 14:02:59 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.43 ms (1)
+Aug 31 14:02:59 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.92 ms (1)
+Aug 31 14:03:08 symfony [info] {sfContext} initialization
+Aug 31 14:03:08 symfony [info] {sfController} initialization
+Aug 31 14:03:08 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:03:08 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:03:08 symfony [info] {sfController} dispatch request
+Aug 31 14:03:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:03:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:03:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:03:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:03:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:03:08 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:03:08 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:03:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:03:08 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:03:08 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:03:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:03:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:03:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:03:08 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:03:08 symfony [info] {sfFilter} render to client
+Aug 31 14:03:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:03:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:03:08 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:03:08 symfony [info] {sfTimerManager} Configuration 5.49 ms (12)
+Aug 31 14:03:08 symfony [info] {sfTimerManager} Action "manual/index" 96.88 ms (1)
+Aug 31 14:03:08 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.82 ms (1)
+Aug 31 14:03:08 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.79 ms (1)
+Aug 31 14:03:50 symfony [info] {sfContext} initialization
+Aug 31 14:03:50 symfony [info] {sfController} initialization
+Aug 31 14:03:50 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:03:50 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:03:50 symfony [info] {sfController} dispatch request
+Aug 31 14:03:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:03:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:03:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:03:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:03:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:03:50 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:03:50 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:03:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:03:50 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:03:50 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:03:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:03:50 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:03:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:03:50 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:03:50 symfony [info] {sfFilter} render to client
+Aug 31 14:03:50 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:03:50 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:03:50 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:03:50 symfony [info] {sfTimerManager} Configuration 5.87 ms (12)
+Aug 31 14:03:50 symfony [info] {sfTimerManager} Action "manual/index" 99.41 ms (1)
+Aug 31 14:03:50 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.42 ms (1)
+Aug 31 14:03:50 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:04:18 symfony [info] {sfContext} initialization
+Aug 31 14:04:18 symfony [info] {sfController} initialization
+Aug 31 14:04:18 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:04:18 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:04:18 symfony [info] {sfController} dispatch request
+Aug 31 14:04:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:04:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:04:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:04:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:04:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:04:18 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:04:18 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:04:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:04:18 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:04:18 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:04:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:04:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:18 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:04:18 symfony [info] {sfFilter} render to client
+Aug 31 14:04:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:04:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:04:18 symfony [info] {sfResponse} send content (23238 o)
+Aug 31 14:04:18 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 14:04:18 symfony [info] {sfTimerManager} Action "manual/index" 100.26 ms (1)
+Aug 31 14:04:18 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.77 ms (1)
+Aug 31 14:04:18 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:04:30 symfony [info] {sfContext} initialization
+Aug 31 14:04:30 symfony [info] {sfController} initialization
+Aug 31 14:04:30 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:04:30 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:04:30 symfony [info] {sfController} dispatch request
+Aug 31 14:04:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:04:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:04:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:04:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:04:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:04:30 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:04:30 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:04:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:04:30 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:04:30 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:04:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:04:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:30 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:04:30 symfony [info] {sfFilter} render to client
+Aug 31 14:04:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:04:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:04:30 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:04:30 symfony [info] {sfTimerManager} Configuration 5.31 ms (12)
+Aug 31 14:04:30 symfony [info] {sfTimerManager} Action "manual/index" 99.94 ms (1)
+Aug 31 14:04:30 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.98 ms (1)
+Aug 31 14:04:30 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.77 ms (1)
+Aug 31 14:04:34 symfony [info] {sfContext} initialization
+Aug 31 14:04:34 symfony [info] {sfController} initialization
+Aug 31 14:04:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:04:34 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:04:34 symfony [info] {sfController} dispatch request
+Aug 31 14:04:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:04:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:04:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:04:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:04:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:04:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:04:35 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:04:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:04:35 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:04:35 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:04:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:04:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:35 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:04:35 symfony [info] {sfFilter} render to client
+Aug 31 14:04:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:04:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:04:35 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:04:35 symfony [info] {sfTimerManager} Configuration 6.24 ms (12)
+Aug 31 14:04:35 symfony [info] {sfTimerManager} Action "manual/index" 99.84 ms (1)
+Aug 31 14:04:35 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.16 ms (1)
+Aug 31 14:04:35 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 14:04:40 symfony [info] {sfContext} initialization
+Aug 31 14:04:40 symfony [info] {sfController} initialization
+Aug 31 14:04:40 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:04:40 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:04:40 symfony [info] {sfController} dispatch request
+Aug 31 14:04:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:04:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:04:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:04:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:04:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:04:40 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:04:40 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:04:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:04:40 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:04:40 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:04:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:04:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:40 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:04:40 symfony [info] {sfFilter} render to client
+Aug 31 14:04:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:04:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:04:40 symfony [info] {sfResponse} send content (23237 o)
+Aug 31 14:04:40 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 14:04:40 symfony [info] {sfTimerManager} Action "manual/index" 99.99 ms (1)
+Aug 31 14:04:40 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.87 ms (1)
+Aug 31 14:04:40 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:04:44 symfony [info] {sfContext} initialization
+Aug 31 14:04:44 symfony [info] {sfController} initialization
+Aug 31 14:04:44 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:04:44 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:04:44 symfony [info] {sfController} dispatch request
+Aug 31 14:04:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:04:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:04:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:04:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:04:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:04:44 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:04:45 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:04:45 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:04:46 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:04:46 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:04:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:04:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:04:46 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:04:46 symfony [info] {sfFilter} render to client
+Aug 31 14:04:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:04:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:04:46 symfony [info] {sfResponse} send content (963472 o)
+Aug 31 14:04:47 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 14:04:47 symfony [info] {sfTimerManager} Action "manual/index" 97.08 ms (1)
+Aug 31 14:04:47 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1697.82 ms (1)
+Aug 31 14:04:47 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.95 ms (1)
+Aug 31 14:05:02 symfony [info] {sfContext} initialization
+Aug 31 14:05:02 symfony [info] {sfController} initialization
+Aug 31 14:05:02 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:05:02 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:05:02 symfony [info] {sfController} dispatch request
+Aug 31 14:05:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:05:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:05:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:05:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:05:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:05:02 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:05:02 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:05:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:05:03 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:05:03 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:05:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:05:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:05:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:05:03 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:05:03 symfony [info] {sfFilter} render to client
+Aug 31 14:05:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:05:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:05:03 symfony [info] {sfResponse} send content (963473 o)
+Aug 31 14:05:04 symfony [info] {sfTimerManager} Configuration 5.96 ms (12)
+Aug 31 14:05:04 symfony [info] {sfTimerManager} Action "manual/index" 102.06 ms (1)
+Aug 31 14:05:04 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1702.66 ms (1)
+Aug 31 14:05:04 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.09 ms (1)
+Aug 31 14:06:01 symfony [info] {sfContext} initialization
+Aug 31 14:06:01 symfony [info] {sfController} initialization
+Aug 31 14:06:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:06:01 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:06:01 symfony [info] {sfController} dispatch request
+Aug 31 14:06:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:06:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:06:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:06:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:06:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:06:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:06:01 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:06:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:06:03 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:06:03 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:06:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:06:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:03 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:06:03 symfony [info] {sfFilter} render to client
+Aug 31 14:06:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:06:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:06:03 symfony [info] {sfResponse} send content (963472 o)
+Aug 31 14:06:04 symfony [info] {sfTimerManager} Configuration 5.59 ms (12)
+Aug 31 14:06:04 symfony [info] {sfTimerManager} Action "manual/index" 99.98 ms (1)
+Aug 31 14:06:04 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1701.34 ms (1)
+Aug 31 14:06:04 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.84 ms (1)
+Aug 31 14:06:38 symfony [info] {sfContext} initialization
+Aug 31 14:06:38 symfony [info] {sfController} initialization
+Aug 31 14:06:38 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:06:38 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:06:38 symfony [info] {sfController} dispatch request
+Aug 31 14:06:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:06:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:06:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:06:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:06:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:06:38 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:06:38 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:06:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:06:39 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:06:39 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:06:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:06:39 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:39 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:06:40 symfony [info] {sfFilter} render to client
+Aug 31 14:06:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:06:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:06:40 symfony [info] {sfResponse} send content (963471 o)
+Aug 31 14:06:40 symfony [info] {sfTimerManager} Configuration 5.23 ms (12)
+Aug 31 14:06:40 symfony [info] {sfTimerManager} Action "manual/index" 96.78 ms (1)
+Aug 31 14:06:40 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1707.81 ms (1)
+Aug 31 14:06:40 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.94 ms (1)
+Aug 31 14:06:49 symfony [info] {sfContext} initialization
+Aug 31 14:06:49 symfony [info] {sfController} initialization
+Aug 31 14:06:49 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:06:49 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:06:49 symfony [info] {sfController} dispatch request
+Aug 31 14:06:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:06:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:06:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:06:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:06:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:06:49 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:06:49 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:06:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:06:50 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:06:50 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:06:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:06:50 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:06:50 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:06:50 symfony [info] {sfFilter} render to client
+Aug 31 14:06:50 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:06:50 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:06:50 symfony [info] {sfResponse} send content (963472 o)
+Aug 31 14:06:51 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 14:06:51 symfony [info] {sfTimerManager} Action "manual/index" 98.26 ms (1)
+Aug 31 14:06:51 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1691.52 ms (1)
+Aug 31 14:06:51 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.97 ms (1)
+Aug 31 14:07:36 symfony [info] {sfContext} initialization
+Aug 31 14:07:36 symfony [info] {sfController} initialization
+Aug 31 14:07:36 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:07:36 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:07:36 symfony [info] {sfController} dispatch request
+Aug 31 14:07:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:07:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:07:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:07:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:07:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:07:36 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:07:36 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:07:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:07:37 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:07:37 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:07:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:07:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:07:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:07:38 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:07:38 symfony [info] {sfFilter} render to client
+Aug 31 14:07:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:07:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:07:38 symfony [info] {sfResponse} send content (963472 o)
+Aug 31 14:07:39 symfony [info] {sfTimerManager} Configuration 5.42 ms (12)
+Aug 31 14:07:39 symfony [info] {sfTimerManager} Action "manual/index" 98.02 ms (1)
+Aug 31 14:07:39 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1692.58 ms (1)
+Aug 31 14:07:39 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.63 ms (1)
+Aug 31 14:07:49 symfony [info] {sfContext} initialization
+Aug 31 14:07:49 symfony [info] {sfController} initialization
+Aug 31 14:07:49 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:07:49 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:07:49 symfony [info] {sfController} dispatch request
+Aug 31 14:07:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:07:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:07:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:07:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:07:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:07:49 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:07:49 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:07:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:07:51 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:07:51 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:07:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:07:51 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:07:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:07:51 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:07:51 symfony [info] {sfFilter} render to client
+Aug 31 14:07:51 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:07:51 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:07:51 symfony [info] {sfResponse} send content (963480 o)
+Aug 31 14:07:52 symfony [info] {sfTimerManager} Configuration 5.22 ms (12)
+Aug 31 14:07:52 symfony [info] {sfTimerManager} Action "manual/index" 96.62 ms (1)
+Aug 31 14:07:52 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1703.98 ms (1)
+Aug 31 14:07:52 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.03 ms (1)
+Aug 31 14:09:25 symfony [info] {sfContext} initialization
+Aug 31 14:09:25 symfony [info] {sfController} initialization
+Aug 31 14:09:25 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:09:25 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:09:25 symfony [info] {sfController} dispatch request
+Aug 31 14:09:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:09:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:09:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:09:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:09:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:09:25 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:09:25 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:09:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:09:27 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:09:27 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:09:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:09:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:09:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:09:27 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:09:27 symfony [info] {sfFilter} render to client
+Aug 31 14:09:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:09:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:09:27 symfony [info] {sfResponse} send content (963723 o)
+Aug 31 14:09:28 symfony [info] {sfTimerManager} Configuration 28.88 ms (13)
+Aug 31 14:09:28 symfony [info] {sfTimerManager} Action "manual/index" 100.26 ms (1)
+Aug 31 14:09:28 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1853.93 ms (1)
+Aug 31 14:09:28 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.94 ms (1)
+Aug 31 14:11:03 symfony [info] {sfContext} initialization
+Aug 31 14:11:03 symfony [info] {sfController} initialization
+Aug 31 14:11:03 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:11:03 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:11:03 symfony [info] {sfController} dispatch request
+Aug 31 14:11:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:11:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:11:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:11:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:11:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:11:03 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:11:03 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:11:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:11:05 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:11:05 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:11:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:11:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:11:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:11:05 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:11:05 symfony [info] {sfFilter} render to client
+Aug 31 14:11:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:11:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:11:05 symfony [info] {sfResponse} send content (963722 o)
+Aug 31 14:11:05 symfony [info] {sfTimerManager} Configuration 6.04 ms (12)
+Aug 31 14:11:05 symfony [info] {sfTimerManager} Action "manual/index" 101.10 ms (1)
+Aug 31 14:11:05 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1712.49 ms (1)
+Aug 31 14:11:05 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.99 ms (1)
+Aug 31 14:15:35 symfony [info] {sfContext} initialization
+Aug 31 14:15:35 symfony [info] {sfController} initialization
+Aug 31 14:15:35 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:15:35 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:15:35 symfony [info] {sfController} dispatch request
+Aug 31 14:15:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:15:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:15:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:15:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:15:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:15:35 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:15:35 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:15:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:15:37 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:15:37 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:15:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:15:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:37 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:15:37 symfony [info] {sfFilter} render to client
+Aug 31 14:15:37 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:15:37 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:15:37 symfony [info] {sfResponse} send content (963999 o)
+Aug 31 14:15:37 symfony [info] {sfTimerManager} Configuration 32.44 ms (13)
+Aug 31 14:15:37 symfony [info] {sfTimerManager} Action "manual/index" 192.64 ms (1)
+Aug 31 14:15:37 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1756.88 ms (1)
+Aug 31 14:15:37 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.34 ms (1)
+Aug 31 14:15:40 symfony [info] {sfContext} initialization
+Aug 31 14:15:40 symfony [info] {sfController} initialization
+Aug 31 14:15:40 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:15:40 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:15:40 symfony [info] {sfController} dispatch request
+Aug 31 14:15:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:15:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:15:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:15:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:15:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:15:40 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:15:40 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:15:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:15:40 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:15:40 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:15:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:15:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:40 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:15:40 symfony [info] {sfFilter} render to client
+Aug 31 14:15:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:15:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:15:40 symfony [info] {sfResponse} send content (167392 o)
+Aug 31 14:15:40 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 14:15:40 symfony [info] {sfTimerManager} Action "manual/index" 98.19 ms (1)
+Aug 31 14:15:40 symfony [info] {sfTimerManager} View "Success" for "manual/index" 146.65 ms (1)
+Aug 31 14:15:40 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.96 ms (1)
+Aug 31 14:15:52 symfony [info] {sfContext} initialization
+Aug 31 14:15:52 symfony [info] {sfController} initialization
+Aug 31 14:15:52 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:15:52 symfony [info] {sfRequest} request parameters array (  'chapter' => 'connection-management',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:15:52 symfony [info] {sfController} dispatch request
+Aug 31 14:15:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:15:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:15:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:15:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:15:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:15:52 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:15:52 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:15:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:15:52 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:15:52 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:15:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:15:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:52 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:15:53 symfony [info] {sfFilter} render to client
+Aug 31 14:15:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:15:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:15:53 symfony [info] {sfResponse} send content (152216 o)
+Aug 31 14:15:53 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 14:15:53 symfony [info] {sfTimerManager} Action "manual/index" 96.58 ms (1)
+Aug 31 14:15:53 symfony [info] {sfTimerManager} View "Success" for "manual/index" 129.19 ms (1)
+Aug 31 14:15:53 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.87 ms (1)
+Aug 31 14:15:57 symfony [info] {sfContext} initialization
+Aug 31 14:15:57 symfony [info] {sfController} initialization
+Aug 31 14:15:57 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:15:57 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:15:57 symfony [info] {sfController} dispatch request
+Aug 31 14:15:57 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:15:57 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:15:57 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:15:57 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:15:57 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:15:57 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:15:57 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:15:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:15:57 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:15:57 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:15:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:15:57 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:15:57 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:15:57 symfony [info] {sfFilter} render to client
+Aug 31 14:15:57 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:15:57 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:15:57 symfony [info] {sfResponse} send content (149103 o)
+Aug 31 14:15:57 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 14:15:57 symfony [info] {sfTimerManager} Action "manual/index" 97.69 ms (1)
+Aug 31 14:15:57 symfony [info] {sfTimerManager} View "Success" for "manual/index" 138.74 ms (1)
+Aug 31 14:15:57 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.06 ms (1)
+Aug 31 14:16:27 symfony [info] {sfContext} initialization
+Aug 31 14:16:27 symfony [info] {sfController} initialization
+Aug 31 14:16:27 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:16:27 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:16:27 symfony [info] {sfController} dispatch request
+Aug 31 14:16:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:16:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:16:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:16:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:16:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:16:27 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:16:27 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:16:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:16:28 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:16:28 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:16:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:16:28 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:16:28 symfony [info] {sfFilter} render to client
+Aug 31 14:16:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:16:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:16:28 symfony [info] {sfResponse} send content (149103 o)
+Aug 31 14:16:28 symfony [info] {sfTimerManager} Configuration 5.38 ms (12)
+Aug 31 14:16:28 symfony [info] {sfTimerManager} Action "manual/index" 99.48 ms (1)
+Aug 31 14:16:28 symfony [info] {sfTimerManager} View "Success" for "manual/index" 145.03 ms (1)
+Aug 31 14:16:28 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.87 ms (1)
+Aug 31 14:17:29 symfony [info] {sfContext} initialization
+Aug 31 14:17:29 symfony [info] {sfController} initialization
+Aug 31 14:17:29 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:17:29 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:17:29 symfony [info] {sfController} dispatch request
+Aug 31 14:17:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:17:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:17:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:17:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:17:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:17:29 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:17:29 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:17:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:17:29 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:17:29 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:17:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:17:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:17:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:17:29 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:17:29 symfony [info] {sfFilter} render to client
+Aug 31 14:17:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:17:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:17:29 symfony [info] {sfResponse} send content (149104 o)
+Aug 31 14:17:29 symfony [info] {sfTimerManager} Configuration 5.54 ms (12)
+Aug 31 14:17:29 symfony [info] {sfTimerManager} Action "manual/index" 105.83 ms (1)
+Aug 31 14:17:29 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.50 ms (1)
+Aug 31 14:17:29 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.77 ms (1)
+Aug 31 14:18:07 symfony [info] {sfContext} initialization
+Aug 31 14:18:07 symfony [info] {sfController} initialization
+Aug 31 14:18:07 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:18:07 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:18:07 symfony [info] {sfController} dispatch request
+Aug 31 14:18:07 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:18:07 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:18:07 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:18:07 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:18:07 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:18:07 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:18:07 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:18:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:18:07 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:18:07 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:18:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:18:07 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:07 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:07 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:18:07 symfony [info] {sfFilter} render to client
+Aug 31 14:18:07 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:18:07 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:18:07 symfony [info] {sfResponse} send content (149104 o)
+Aug 31 14:18:07 symfony [info] {sfTimerManager} Configuration 5.99 ms (12)
+Aug 31 14:18:07 symfony [info] {sfTimerManager} Action "manual/index" 100.58 ms (1)
+Aug 31 14:18:07 symfony [info] {sfTimerManager} View "Success" for "manual/index" 142.93 ms (1)
+Aug 31 14:18:07 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.60 ms (1)
+Aug 31 14:18:14 symfony [info] {sfContext} initialization
+Aug 31 14:18:14 symfony [info] {sfController} initialization
+Aug 31 14:18:14 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:18:14 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:18:14 symfony [info] {sfController} dispatch request
+Aug 31 14:18:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:18:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:18:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:18:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:18:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:18:14 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:18:14 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:18:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:18:14 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:18:14 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:18:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:18:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:14 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:18:14 symfony [info] {sfFilter} render to client
+Aug 31 14:18:14 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:18:14 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:18:14 symfony [info] {sfResponse} send content (149104 o)
+Aug 31 14:18:14 symfony [info] {sfTimerManager} Configuration 5.34 ms (12)
+Aug 31 14:18:14 symfony [info] {sfTimerManager} Action "manual/index" 100.35 ms (1)
+Aug 31 14:18:14 symfony [info] {sfTimerManager} View "Success" for "manual/index" 145.61 ms (1)
+Aug 31 14:18:14 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.47 ms (1)
+Aug 31 14:18:23 symfony [info] {sfContext} initialization
+Aug 31 14:18:23 symfony [info] {sfController} initialization
+Aug 31 14:18:23 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:18:23 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:18:23 symfony [info] {sfController} dispatch request
+Aug 31 14:18:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:18:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:18:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:18:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:18:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:18:23 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:18:23 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:18:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:18:23 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:18:23 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:18:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:18:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:24 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:18:24 symfony [info] {sfFilter} render to client
+Aug 31 14:18:24 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:18:24 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:18:24 symfony [info] {sfResponse} send content (149103 o)
+Aug 31 14:18:24 symfony [info] {sfTimerManager} Configuration 5.59 ms (12)
+Aug 31 14:18:24 symfony [info] {sfTimerManager} Action "manual/index" 98.69 ms (1)
+Aug 31 14:18:24 symfony [info] {sfTimerManager} View "Success" for "manual/index" 140.44 ms (1)
+Aug 31 14:18:24 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.08 ms (1)
+Aug 31 14:18:31 symfony [info] {sfContext} initialization
+Aug 31 14:18:31 symfony [info] {sfController} initialization
+Aug 31 14:18:31 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:18:31 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:18:31 symfony [info] {sfController} dispatch request
+Aug 31 14:18:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:18:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:18:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:18:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:18:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:18:31 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:18:31 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:18:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:18:31 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:18:31 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:18:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:18:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:18:31 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:18:31 symfony [info] {sfFilter} render to client
+Aug 31 14:18:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:18:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:18:31 symfony [info] {sfResponse} send content (149103 o)
+Aug 31 14:18:31 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 14:18:31 symfony [info] {sfTimerManager} Action "manual/index" 99.04 ms (1)
+Aug 31 14:18:31 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.86 ms (1)
+Aug 31 14:18:31 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.65 ms (1)
+Aug 31 14:19:01 symfony [info] {sfContext} initialization
+Aug 31 14:19:01 symfony [info] {sfController} initialization
+Aug 31 14:19:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:19:01 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:19:01 symfony [info] {sfController} dispatch request
+Aug 31 14:19:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:19:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:19:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:19:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:19:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:19:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:19:01 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:19:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:19:01 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:19:01 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:19:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:19:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:19:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:19:01 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:19:01 symfony [info] {sfFilter} render to client
+Aug 31 14:19:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:19:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:19:01 symfony [info] {sfResponse} send content (149104 o)
+Aug 31 14:19:01 symfony [info] {sfTimerManager} Configuration 5.73 ms (12)
+Aug 31 14:19:01 symfony [info] {sfTimerManager} Action "manual/index" 107.04 ms (1)
+Aug 31 14:19:01 symfony [info] {sfTimerManager} View "Success" for "manual/index" 143.15 ms (1)
+Aug 31 14:19:01 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.23 ms (1)
+Aug 31 14:19:46 symfony [info] {sfContext} initialization
+Aug 31 14:19:46 symfony [info] {sfController} initialization
+Aug 31 14:19:46 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:19:46 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:19:46 symfony [info] {sfController} dispatch request
+Aug 31 14:19:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:19:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:19:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:19:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:19:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:19:46 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:19:46 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:19:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:19:46 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:19:46 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:19:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:19:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:19:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:19:46 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:19:46 symfony [info] {sfFilter} render to client
+Aug 31 14:19:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:19:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:19:46 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:19:46 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 14:19:46 symfony [info] {sfTimerManager} Action "manual/index" 100.46 ms (1)
+Aug 31 14:19:46 symfony [info] {sfTimerManager} View "Success" for "manual/index" 140.29 ms (1)
+Aug 31 14:19:46 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.89 ms (1)
+Aug 31 14:20:16 symfony [info] {sfContext} initialization
+Aug 31 14:20:16 symfony [info] {sfController} initialization
+Aug 31 14:20:16 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:20:16 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:20:16 symfony [info] {sfController} dispatch request
+Aug 31 14:20:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:20:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:20:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:20:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:20:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:20:16 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:20:16 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:20:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:20:16 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:20:16 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:20:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:20:16 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:20:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:20:16 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:20:17 symfony [info] {sfFilter} render to client
+Aug 31 14:20:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:20:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:20:17 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:20:17 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 14:20:17 symfony [info] {sfTimerManager} Action "manual/index" 100.71 ms (1)
+Aug 31 14:20:17 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.21 ms (1)
+Aug 31 14:20:17 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.37 ms (1)
+Aug 31 14:22:01 symfony [info] {sfContext} initialization
+Aug 31 14:22:01 symfony [info] {sfController} initialization
+Aug 31 14:22:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:22:01 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:22:01 symfony [info] {sfController} dispatch request
+Aug 31 14:22:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:22:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:22:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:22:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:22:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:22:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:22:01 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:22:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:22:02 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:22:02 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:22:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:22:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:02 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:22:02 symfony [info] {sfFilter} render to client
+Aug 31 14:22:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:22:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:22:02 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:22:02 symfony [info] {sfTimerManager} Configuration 5.73 ms (12)
+Aug 31 14:22:02 symfony [info] {sfTimerManager} Action "manual/index" 175.17 ms (1)
+Aug 31 14:22:02 symfony [info] {sfTimerManager} View "Success" for "manual/index" 139.22 ms (1)
+Aug 31 14:22:02 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.69 ms (1)
+Aug 31 14:22:24 symfony [info] {sfContext} initialization
+Aug 31 14:22:24 symfony [info] {sfController} initialization
+Aug 31 14:22:24 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:22:24 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:22:24 symfony [info] {sfController} dispatch request
+Aug 31 14:22:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:22:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:22:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:22:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:22:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:22:24 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:22:24 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:22:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:22:24 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:22:24 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:22:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:22:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:24 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:22:25 symfony [info] {sfFilter} render to client
+Aug 31 14:22:25 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:22:25 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:22:25 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:22:25 symfony [info] {sfTimerManager} Configuration 5.29 ms (12)
+Aug 31 14:22:25 symfony [info] {sfTimerManager} Action "manual/index" 99.26 ms (1)
+Aug 31 14:22:25 symfony [info] {sfTimerManager} View "Success" for "manual/index" 140.71 ms (1)
+Aug 31 14:22:25 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.92 ms (1)
+Aug 31 14:22:31 symfony [info] {sfContext} initialization
+Aug 31 14:22:31 symfony [info] {sfController} initialization
+Aug 31 14:22:31 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:22:31 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:22:31 symfony [info] {sfController} dispatch request
+Aug 31 14:22:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:22:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:22:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:22:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:22:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:22:31 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:22:31 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:22:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:22:31 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:22:31 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:22:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:22:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:31 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:22:31 symfony [info] {sfFilter} render to client
+Aug 31 14:22:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:22:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:22:31 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:22:31 symfony [info] {sfTimerManager} Configuration 5.29 ms (12)
+Aug 31 14:22:31 symfony [info] {sfTimerManager} Action "manual/index" 99.26 ms (1)
+Aug 31 14:22:31 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.04 ms (1)
+Aug 31 14:22:31 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.76 ms (1)
+Aug 31 14:22:38 symfony [info] {sfContext} initialization
+Aug 31 14:22:38 symfony [info] {sfController} initialization
+Aug 31 14:22:38 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:22:38 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:22:38 symfony [info] {sfController} dispatch request
+Aug 31 14:22:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:22:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:22:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:22:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:22:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:22:38 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:22:38 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:22:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:22:38 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:22:38 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:22:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:22:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:38 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:22:38 symfony [info] {sfFilter} render to client
+Aug 31 14:22:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:22:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:22:38 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:22:38 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 14:22:38 symfony [info] {sfTimerManager} Action "manual/index" 103.45 ms (1)
+Aug 31 14:22:38 symfony [info] {sfTimerManager} View "Success" for "manual/index" 139.50 ms (1)
+Aug 31 14:22:38 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.61 ms (1)
+Aug 31 14:22:49 symfony [info] {sfContext} initialization
+Aug 31 14:22:49 symfony [info] {sfController} initialization
+Aug 31 14:22:49 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:22:49 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:22:49 symfony [info] {sfController} dispatch request
+Aug 31 14:22:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:22:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:22:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:22:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:22:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:22:49 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:22:49 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:22:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:22:49 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:22:49 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:22:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:22:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:22:49 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:22:49 symfony [info] {sfFilter} render to client
+Aug 31 14:22:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:22:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:22:49 symfony [info] {sfResponse} send content (149133 o)
+Aug 31 14:22:49 symfony [info] {sfTimerManager} Configuration 5.64 ms (12)
+Aug 31 14:22:49 symfony [info] {sfTimerManager} Action "manual/index" 98.85 ms (1)
+Aug 31 14:22:49 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.57 ms (1)
+Aug 31 14:22:49 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.12 ms (1)
+Aug 31 14:23:29 symfony [info] {sfContext} initialization
+Aug 31 14:23:29 symfony [info] {sfController} initialization
+Aug 31 14:23:29 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:23:29 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:23:29 symfony [info] {sfController} dispatch request
+Aug 31 14:23:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:23:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:23:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:23:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:23:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:23:29 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:23:29 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:23:29 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:23:29 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:23:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:29 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:23:29 symfony [info] {sfFilter} render to client
+Aug 31 14:23:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:23:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:23:29 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:23:29 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 14:23:29 symfony [info] {sfTimerManager} Action "manual/index" 101.06 ms (1)
+Aug 31 14:23:29 symfony [info] {sfTimerManager} View "Success" for "manual/index" 139.40 ms (1)
+Aug 31 14:23:29 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.43 ms (1)
+Aug 31 14:23:43 symfony [info] {sfContext} initialization
+Aug 31 14:23:44 symfony [info] {sfController} initialization
+Aug 31 14:23:44 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:23:44 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:23:44 symfony [info] {sfController} dispatch request
+Aug 31 14:23:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:23:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:23:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:23:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:23:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:23:44 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:23:44 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:23:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:23:44 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:23:44 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:23:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:23:44 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:44 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:23:44 symfony [info] {sfFilter} render to client
+Aug 31 14:23:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:23:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:23:44 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:23:44 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 14:23:44 symfony [info] {sfTimerManager} Action "manual/index" 98.24 ms (1)
+Aug 31 14:23:44 symfony [info] {sfTimerManager} View "Success" for "manual/index" 139.98 ms (1)
+Aug 31 14:23:44 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.67 ms (1)
+Aug 31 14:23:58 symfony [info] {sfContext} initialization
+Aug 31 14:23:58 symfony [info] {sfController} initialization
+Aug 31 14:23:58 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:23:58 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:23:58 symfony [info] {sfController} dispatch request
+Aug 31 14:23:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:23:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:23:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:23:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:23:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:23:58 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:23:58 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:23:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:23:58 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:23:58 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:23:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:23:58 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:23:58 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:23:58 symfony [info] {sfFilter} render to client
+Aug 31 14:23:58 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:23:58 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:23:58 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:23:58 symfony [info] {sfTimerManager} Configuration 5.49 ms (12)
+Aug 31 14:23:58 symfony [info] {sfTimerManager} Action "manual/index" 102.20 ms (1)
+Aug 31 14:23:58 symfony [info] {sfTimerManager} View "Success" for "manual/index" 141.58 ms (1)
+Aug 31 14:23:58 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.08 ms (1)
+Aug 31 14:24:12 symfony [info] {sfContext} initialization
+Aug 31 14:24:12 symfony [info] {sfController} initialization
+Aug 31 14:24:12 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:24:12 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:24:12 symfony [info] {sfController} dispatch request
+Aug 31 14:24:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:24:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:24:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:24:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:24:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:24:12 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:24:13 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:24:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:24:13 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:24:13 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:24:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:24:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:13 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:24:13 symfony [info] {sfFilter} render to client
+Aug 31 14:24:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:24:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:24:13 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:24:13 symfony [info] {sfTimerManager} Configuration 5.75 ms (12)
+Aug 31 14:24:13 symfony [info] {sfTimerManager} Action "manual/index" 100.67 ms (1)
+Aug 31 14:24:13 symfony [info] {sfTimerManager} View "Success" for "manual/index" 146.67 ms (1)
+Aug 31 14:24:13 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 48.33 ms (1)
+Aug 31 14:24:28 symfony [info] {sfContext} initialization
+Aug 31 14:24:28 symfony [info] {sfController} initialization
+Aug 31 14:24:28 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:24:28 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:24:28 symfony [info] {sfController} dispatch request
+Aug 31 14:24:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:24:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:24:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:24:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:24:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:24:28 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:24:28 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:24:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:24:28 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:24:28 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:24:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:24:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:28 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:24:28 symfony [info] {sfFilter} render to client
+Aug 31 14:24:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:24:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:24:28 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:24:28 symfony [info] {sfTimerManager} Configuration 5.60 ms (12)
+Aug 31 14:24:28 symfony [info] {sfTimerManager} Action "manual/index" 101.59 ms (1)
+Aug 31 14:24:28 symfony [info] {sfTimerManager} View "Success" for "manual/index" 144.09 ms (1)
+Aug 31 14:24:28 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.37 ms (1)
+Aug 31 14:24:50 symfony [info] {sfContext} initialization
+Aug 31 14:24:50 symfony [info] {sfController} initialization
+Aug 31 14:24:50 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:24:50 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:24:50 symfony [info] {sfController} dispatch request
+Aug 31 14:24:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:24:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:24:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:24:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:24:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:24:50 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:24:50 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:24:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:24:50 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:24:50 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:24:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:24:50 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:24:50 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:24:50 symfony [info] {sfFilter} render to client
+Aug 31 14:24:50 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:24:50 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:24:50 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:24:50 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 14:24:50 symfony [info] {sfTimerManager} Action "manual/index" 97.46 ms (1)
+Aug 31 14:24:50 symfony [info] {sfTimerManager} View "Success" for "manual/index" 138.96 ms (1)
+Aug 31 14:24:50 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.20 ms (1)
+Aug 31 14:25:09 symfony [info] {sfContext} initialization
+Aug 31 14:25:09 symfony [info] {sfController} initialization
+Aug 31 14:25:09 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:25:09 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:25:09 symfony [info] {sfController} dispatch request
+Aug 31 14:25:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:25:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:25:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:25:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:25:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:25:09 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:25:09 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:25:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:25:09 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:25:09 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:25:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:25:09 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:09 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:25:09 symfony [info] {sfFilter} render to client
+Aug 31 14:25:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:25:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:25:09 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:25:09 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 14:25:09 symfony [info] {sfTimerManager} Action "manual/index" 99.44 ms (1)
+Aug 31 14:25:09 symfony [info] {sfTimerManager} View "Success" for "manual/index" 139.98 ms (1)
+Aug 31 14:25:09 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.90 ms (1)
+Aug 31 14:25:27 symfony [info] {sfContext} initialization
+Aug 31 14:25:27 symfony [info] {sfController} initialization
+Aug 31 14:25:27 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:25:27 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:25:27 symfony [info] {sfController} dispatch request
+Aug 31 14:25:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:25:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:25:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:25:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:25:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:25:27 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:25:27 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:25:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:25:27 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:25:27 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:25:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:25:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:27 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:25:27 symfony [info] {sfFilter} render to client
+Aug 31 14:25:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:25:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:25:27 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:25:27 symfony [info] {sfTimerManager} Configuration 5.21 ms (12)
+Aug 31 14:25:27 symfony [info] {sfTimerManager} Action "manual/index" 96.88 ms (1)
+Aug 31 14:25:27 symfony [info] {sfTimerManager} View "Success" for "manual/index" 144.16 ms (1)
+Aug 31 14:25:27 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.17 ms (1)
+Aug 31 14:25:34 symfony [info] {sfContext} initialization
+Aug 31 14:25:34 symfony [info] {sfController} initialization
+Aug 31 14:25:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:25:34 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:25:34 symfony [info] {sfController} dispatch request
+Aug 31 14:25:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:25:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:25:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:25:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:25:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:25:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:25:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:25:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:25:35 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:25:35 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:25:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:25:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:25:35 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:25:35 symfony [info] {sfFilter} render to client
+Aug 31 14:25:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:25:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:25:35 symfony [info] {sfResponse} send content (149135 o)
+Aug 31 14:25:35 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 14:25:35 symfony [info] {sfTimerManager} Action "manual/index" 101.34 ms (1)
+Aug 31 14:25:35 symfony [info] {sfTimerManager} View "Success" for "manual/index" 146.30 ms (1)
+Aug 31 14:25:35 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.82 ms (1)
+Aug 31 14:26:10 symfony [info] {sfContext} initialization
+Aug 31 14:26:10 symfony [info] {sfController} initialization
+Aug 31 14:26:10 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:26:10 symfony [info] {sfRequest} request parameters array (  'chapter' => 'configuration',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:26:10 symfony [info] {sfController} dispatch request
+Aug 31 14:26:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:26:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:26:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:26:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:26:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:26:10 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:26:10 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:26:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:26:10 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:26:10 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:26:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:26:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:10 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:26:10 symfony [info] {sfFilter} render to client
+Aug 31 14:26:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:26:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:26:10 symfony [info] {sfResponse} send content (149134 o)
+Aug 31 14:26:10 symfony [info] {sfTimerManager} Configuration 5.22 ms (12)
+Aug 31 14:26:10 symfony [info] {sfTimerManager} Action "manual/index" 99.90 ms (1)
+Aug 31 14:26:10 symfony [info] {sfTimerManager} View "Success" for "manual/index" 140.39 ms (1)
+Aug 31 14:26:10 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.98 ms (1)
+Aug 31 14:26:13 symfony [info] {sfContext} initialization
+Aug 31 14:26:13 symfony [info] {sfController} initialization
+Aug 31 14:26:13 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:26:13 symfony [info] {sfRequest} request parameters array (  'chapter' => 'connection-management',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:26:13 symfony [info] {sfController} dispatch request
+Aug 31 14:26:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:26:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:26:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:26:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:26:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:26:13 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:26:13 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:26:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:26:13 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:26:13 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:26:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:26:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:13 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:26:13 symfony [info] {sfFilter} render to client
+Aug 31 14:26:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:26:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:26:13 symfony [info] {sfResponse} send content (152246 o)
+Aug 31 14:26:13 symfony [info] {sfTimerManager} Configuration 5.23 ms (12)
+Aug 31 14:26:13 symfony [info] {sfTimerManager} Action "manual/index" 141.90 ms (1)
+Aug 31 14:26:13 symfony [info] {sfTimerManager} View "Success" for "manual/index" 129.08 ms (1)
+Aug 31 14:26:13 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.47 ms (1)
+Aug 31 14:26:19 symfony [info] {sfContext} initialization
+Aug 31 14:26:19 symfony [info] {sfController} initialization
+Aug 31 14:26:19 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:26:19 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:26:19 symfony [info] {sfController} dispatch request
+Aug 31 14:26:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:26:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:26:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:26:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:26:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:26:19 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:26:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:26:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:26:21 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:26:21 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:26:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:21 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:26:21 symfony [info] {sfFilter} render to client
+Aug 31 14:26:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:26:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:26:21 symfony [info] {sfResponse} send content (964058 o)
+Aug 31 14:26:22 symfony [info] {sfTimerManager} Configuration 5.18 ms (12)
+Aug 31 14:26:22 symfony [info] {sfTimerManager} Action "manual/index" 97.82 ms (1)
+Aug 31 14:26:22 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1719.56 ms (1)
+Aug 31 14:26:22 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.73 ms (1)
+Aug 31 14:26:33 symfony [info] {sfContext} initialization
+Aug 31 14:26:33 symfony [info] {sfController} initialization
+Aug 31 14:26:33 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:26:33 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:26:33 symfony [info] {sfController} dispatch request
+Aug 31 14:26:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:26:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:26:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:26:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:26:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:26:33 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:26:33 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:26:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:26:33 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:26:33 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:26:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:26:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:34 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:26:34 symfony [info] {sfFilter} render to client
+Aug 31 14:26:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:26:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:26:34 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:26:34 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 14:26:34 symfony [info] {sfTimerManager} Action "manual/index" 97.11 ms (1)
+Aug 31 14:26:34 symfony [info] {sfTimerManager} View "Success" for "manual/index" 151.08 ms (1)
+Aug 31 14:26:34 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.42 ms (1)
+Aug 31 14:26:48 symfony [info] {sfContext} initialization
+Aug 31 14:26:48 symfony [info] {sfController} initialization
+Aug 31 14:26:48 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:26:48 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:26:48 symfony [info] {sfController} dispatch request
+Aug 31 14:26:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:26:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:26:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:26:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:26:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:26:48 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:26:48 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:26:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:26:48 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:26:48 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:26:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:26:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:26:48 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:26:48 symfony [info] {sfFilter} render to client
+Aug 31 14:26:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:26:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:26:48 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:26:48 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 14:26:48 symfony [info] {sfTimerManager} Action "manual/index" 99.80 ms (1)
+Aug 31 14:26:48 symfony [info] {sfTimerManager} View "Success" for "manual/index" 153.50 ms (1)
+Aug 31 14:26:48 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 47.17 ms (1)
+Aug 31 14:27:11 symfony [info] {sfContext} initialization
+Aug 31 14:27:11 symfony [info] {sfController} initialization
+Aug 31 14:27:11 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:27:11 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:27:11 symfony [info] {sfController} dispatch request
+Aug 31 14:27:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:27:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:27:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:27:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:27:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:27:11 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:27:11 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:27:11 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:27:11 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:27:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:12 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:27:12 symfony [info] {sfFilter} render to client
+Aug 31 14:27:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:27:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:27:12 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:27:12 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 14:27:12 symfony [info] {sfTimerManager} Action "manual/index" 98.89 ms (1)
+Aug 31 14:27:12 symfony [info] {sfTimerManager} View "Success" for "manual/index" 235.06 ms (1)
+Aug 31 14:27:12 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.55 ms (1)
+Aug 31 14:27:22 symfony [info] {sfContext} initialization
+Aug 31 14:27:22 symfony [info] {sfController} initialization
+Aug 31 14:27:22 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:27:22 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:27:22 symfony [info] {sfController} dispatch request
+Aug 31 14:27:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:27:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:27:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:27:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:27:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:27:22 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:27:22 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:27:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:27:22 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:27:22 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:27:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:27:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:22 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:27:22 symfony [info] {sfFilter} render to client
+Aug 31 14:27:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:27:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:27:22 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:27:22 symfony [info] {sfTimerManager} Configuration 5.31 ms (12)
+Aug 31 14:27:22 symfony [info] {sfTimerManager} Action "manual/index" 97.49 ms (1)
+Aug 31 14:27:22 symfony [info] {sfTimerManager} View "Success" for "manual/index" 150.62 ms (1)
+Aug 31 14:27:22 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.20 ms (1)
+Aug 31 14:27:32 symfony [info] {sfContext} initialization
+Aug 31 14:27:32 symfony [info] {sfController} initialization
+Aug 31 14:27:32 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:27:32 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:27:32 symfony [info] {sfController} dispatch request
+Aug 31 14:27:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:27:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:27:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:27:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:27:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:27:32 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:27:32 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:27:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:27:32 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:27:32 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:27:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:27:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:32 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:27:32 symfony [info] {sfFilter} render to client
+Aug 31 14:27:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:27:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:27:32 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:27:32 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 14:27:32 symfony [info] {sfTimerManager} Action "manual/index" 99.34 ms (1)
+Aug 31 14:27:32 symfony [info] {sfTimerManager} View "Success" for "manual/index" 147.39 ms (1)
+Aug 31 14:27:32 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.76 ms (1)
+Aug 31 14:27:42 symfony [info] {sfContext} initialization
+Aug 31 14:27:42 symfony [info] {sfController} initialization
+Aug 31 14:27:42 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:27:42 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:27:42 symfony [info] {sfController} dispatch request
+Aug 31 14:27:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:27:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:27:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:27:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:27:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:27:42 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:27:42 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:27:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:27:42 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:27:42 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:27:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:27:42 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:42 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:27:42 symfony [info] {sfFilter} render to client
+Aug 31 14:27:42 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:27:42 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:27:42 symfony [info] {sfResponse} send content (167423 o)
+Aug 31 14:27:42 symfony [info] {sfTimerManager} Configuration 5.59 ms (12)
+Aug 31 14:27:42 symfony [info] {sfTimerManager} Action "manual/index" 99.51 ms (1)
+Aug 31 14:27:42 symfony [info] {sfTimerManager} View "Success" for "manual/index" 147.27 ms (1)
+Aug 31 14:27:42 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.56 ms (1)
+Aug 31 14:27:47 symfony [info] {sfContext} initialization
+Aug 31 14:27:47 symfony [info] {sfController} initialization
+Aug 31 14:27:47 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:27:47 symfony [info] {sfRequest} request parameters array (  'chapter' => 'dql-doctrine-query-language',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:27:47 symfony [info] {sfController} dispatch request
+Aug 31 14:27:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:27:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:27:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:27:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:27:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:27:47 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:27:47 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:27:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:27:47 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:27:47 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:27:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:27:47 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:27:47 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:27:47 symfony [info] {sfFilter} render to client
+Aug 31 14:27:47 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:27:47 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:27:47 symfony [info] {sfResponse} send content (202531 o)
+Aug 31 14:27:47 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 14:27:47 symfony [info] {sfTimerManager} Action "manual/index" 96.54 ms (1)
+Aug 31 14:27:47 symfony [info] {sfTimerManager} View "Success" for "manual/index" 239.87 ms (1)
+Aug 31 14:27:47 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 44.90 ms (1)
+Aug 31 14:28:53 symfony [info] {sfContext} initialization
+Aug 31 14:28:53 symfony [info] {sfController} initialization
+Aug 31 14:28:53 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:28:53 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:28:53 symfony [info] {sfController} dispatch request
+Aug 31 14:28:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:28:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:28:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:28:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:28:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:28:53 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:28:54 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:28:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:28:54 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:28:54 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:28:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:28:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:28:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:28:54 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:28:54 symfony [info] {sfFilter} render to client
+Aug 31 14:28:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:28:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:28:54 symfony [info] {sfResponse} send content (23819 o)
+Aug 31 14:28:54 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 14:28:54 symfony [info] {sfTimerManager} Action "manual/index" 96.65 ms (1)
+Aug 31 14:28:54 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.20 ms (1)
+Aug 31 14:28:54 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:29:16 symfony [info] {sfContext} initialization
+Aug 31 14:29:16 symfony [info] {sfController} initialization
+Aug 31 14:29:16 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:29:16 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:29:16 symfony [info] {sfController} dispatch request
+Aug 31 14:29:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:29:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:29:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:29:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:29:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:29:16 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:29:16 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:29:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:29:16 symfony [err] {sfException} 
+Aug 31 14:29:22 symfony [info] {sfContext} initialization
+Aug 31 14:29:22 symfony [info] {sfController} initialization
+Aug 31 14:29:22 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:29:22 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:29:22 symfony [info] {sfController} dispatch request
+Aug 31 14:29:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:29:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:29:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:29:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:29:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:29:22 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:29:22 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:29:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:29:22 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:29:22 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:29:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:29:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:22 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:29:22 symfony [info] {sfFilter} render to client
+Aug 31 14:29:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:29:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:29:22 symfony [info] {sfResponse} send content (23819 o)
+Aug 31 14:29:22 symfony [info] {sfTimerManager} Configuration 5.46 ms (12)
+Aug 31 14:29:22 symfony [info] {sfTimerManager} Action "manual/index" 99.07 ms (1)
+Aug 31 14:29:22 symfony [info] {sfTimerManager} View "Success" for "manual/index" 20.07 ms (1)
+Aug 31 14:29:22 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.75 ms (1)
+Aug 31 14:29:24 symfony [info] {sfContext} initialization
+Aug 31 14:29:24 symfony [info] {sfController} initialization
+Aug 31 14:29:24 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:29:24 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:29:24 symfony [info] {sfController} dispatch request
+Aug 31 14:29:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:29:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:29:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:29:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:29:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:29:24 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:29:25 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:29:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:29:25 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:29:25 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:29:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:29:25 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:25 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:29:25 symfony [info] {sfFilter} render to client
+Aug 31 14:29:25 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:29:25 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:29:25 symfony [info] {sfResponse} send content (167409 o)
+Aug 31 14:29:25 symfony [info] {sfTimerManager} Configuration 5.19 ms (12)
+Aug 31 14:29:25 symfony [info] {sfTimerManager} Action "manual/index" 97.44 ms (1)
+Aug 31 14:29:25 symfony [info] {sfTimerManager} View "Success" for "manual/index" 152.33 ms (1)
+Aug 31 14:29:25 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.20 ms (1)
+Aug 31 14:29:33 symfony [info] {sfContext} initialization
+Aug 31 14:29:33 symfony [info] {sfController} initialization
+Aug 31 14:29:33 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:29:33 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:29:33 symfony [info] {sfController} dispatch request
+Aug 31 14:29:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:29:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:29:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:29:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:29:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:29:33 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:29:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:29:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:29:34 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:29:34 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:29:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:29:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:29:34 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:29:34 symfony [info] {sfFilter} render to client
+Aug 31 14:29:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:29:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:29:34 symfony [info] {sfResponse} send content (23818 o)
+Aug 31 14:29:34 symfony [info] {sfTimerManager} Configuration 5.53 ms (12)
+Aug 31 14:29:34 symfony [info] {sfTimerManager} Action "manual/index" 97.15 ms (1)
+Aug 31 14:29:34 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.62 ms (1)
+Aug 31 14:29:34 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.71 ms (1)
+Aug 31 14:29:49 symfony [info] {sfContext} initialization
+Aug 31 14:29:50 symfony [info] {sfController} initialization
+Aug 31 14:29:50 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:29:50 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:29:50 symfony [info] {sfController} dispatch request
+Aug 31 14:29:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:29:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:29:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:29:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:29:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:29:50 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:29:50 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:29:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:29:50 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:29:50 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:29:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:30:36 symfony [info] {sfContext} initialization
+Aug 31 14:30:36 symfony [info] {sfController} initialization
+Aug 31 14:30:36 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:30:36 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:30:36 symfony [info] {sfController} dispatch request
+Aug 31 14:30:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:30:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:30:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:30:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:30:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:30:36 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:30:36 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:30:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:30:36 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:30:36 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:30:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:30:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:30:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:30:36 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:30:36 symfony [info] {sfFilter} render to client
+Aug 31 14:30:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:30:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:30:36 symfony [info] {sfResponse} send content (23819 o)
+Aug 31 14:30:36 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 14:30:36 symfony [info] {sfTimerManager} Action "manual/index" 96.75 ms (1)
+Aug 31 14:30:36 symfony [info] {sfTimerManager} View "Success" for "manual/index" 19.83 ms (1)
+Aug 31 14:30:36 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.82 ms (1)
+Aug 31 14:31:20 symfony [info] {sfContext} initialization
+Aug 31 14:31:20 symfony [info] {sfController} initialization
+Aug 31 14:31:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:31:20 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:31:20 symfony [info] {sfController} dispatch request
+Aug 31 14:31:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:31:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:31:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:31:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:31:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:31:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:31:21 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:31:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:31:21 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:31:21 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:31:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:31:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:31:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:31:21 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:31:21 symfony [info] {sfFilter} render to client
+Aug 31 14:31:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:31:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:31:21 symfony [info] {sfResponse} send content (66341 o)
+Aug 31 14:31:21 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 14:31:21 symfony [info] {sfTimerManager} Action "manual/index" 97.73 ms (1)
+Aug 31 14:31:21 symfony [info] {sfTimerManager} View "Success" for "manual/index" 64.84 ms (1)
+Aug 31 14:31:21 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:31:27 symfony [info] {sfContext} initialization
+Aug 31 14:31:27 symfony [info] {sfController} initialization
+Aug 31 14:31:27 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:31:27 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:31:27 symfony [info] {sfController} dispatch request
+Aug 31 14:31:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:31:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:31:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:31:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:31:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:31:27 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:31:27 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:31:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:31:27 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:31:27 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:31:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:31:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:31:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:31:27 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:31:27 symfony [info] {sfFilter} render to client
+Aug 31 14:31:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:31:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:31:27 symfony [info] {sfResponse} send content (223085 o)
+Aug 31 14:31:27 symfony [info] {sfTimerManager} Configuration 5.20 ms (12)
+Aug 31 14:31:27 symfony [info] {sfTimerManager} Action "manual/index" 97.10 ms (1)
+Aug 31 14:31:27 symfony [info] {sfTimerManager} View "Success" for "manual/index" 216.79 ms (1)
+Aug 31 14:31:27 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.56 ms (1)
+Aug 31 14:32:25 symfony [info] {sfContext} initialization
+Aug 31 14:32:26 symfony [info] {sfController} initialization
+Aug 31 14:32:26 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:32:26 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:32:26 symfony [info] {sfController} dispatch request
+Aug 31 14:32:26 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:32:26 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:32:26 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:32:26 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:32:26 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:32:26 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:32:26 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:32:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:32:26 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:32:26 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:32:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:32:26 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:26 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:32:26 symfony [info] {sfFilter} render to client
+Aug 31 14:32:26 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:32:26 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:32:26 symfony [info] {sfResponse} send content (223086 o)
+Aug 31 14:32:26 symfony [info] {sfTimerManager} Configuration 6.25 ms (12)
+Aug 31 14:32:26 symfony [info] {sfTimerManager} Action "manual/index" 186.06 ms (1)
+Aug 31 14:32:26 symfony [info] {sfTimerManager} View "Success" for "manual/index" 221.51 ms (1)
+Aug 31 14:32:26 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.91 ms (1)
+Aug 31 14:32:34 symfony [info] {sfContext} initialization
+Aug 31 14:32:34 symfony [info] {sfController} initialization
+Aug 31 14:32:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:32:34 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:32:34 symfony [info] {sfController} dispatch request
+Aug 31 14:32:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:32:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:32:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:32:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:32:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:32:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:32:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:32:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:32:34 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:32:34 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:32:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:32:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:34 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:32:34 symfony [info] {sfFilter} render to client
+Aug 31 14:32:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:32:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:32:34 symfony [info] {sfResponse} send content (223085 o)
+Aug 31 14:32:34 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 14:32:34 symfony [info] {sfTimerManager} Action "manual/index" 98.09 ms (1)
+Aug 31 14:32:34 symfony [info] {sfTimerManager} View "Success" for "manual/index" 217.15 ms (1)
+Aug 31 14:32:34 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.93 ms (1)
+Aug 31 14:32:46 symfony [info] {sfContext} initialization
+Aug 31 14:32:46 symfony [info] {sfController} initialization
+Aug 31 14:32:46 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:32:46 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:32:46 symfony [info] {sfController} dispatch request
+Aug 31 14:32:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:32:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:32:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:32:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:32:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:32:46 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:32:46 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:32:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:32:47 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:32:47 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:32:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:32:47 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:47 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:32:47 symfony [info] {sfFilter} render to client
+Aug 31 14:32:47 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:32:47 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:32:47 symfony [info] {sfResponse} send content (223086 o)
+Aug 31 14:32:47 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 14:32:47 symfony [info] {sfTimerManager} Action "manual/index" 205.16 ms (1)
+Aug 31 14:32:47 symfony [info] {sfTimerManager} View "Success" for "manual/index" 215.81 ms (1)
+Aug 31 14:32:47 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.21 ms (1)
+Aug 31 14:32:58 symfony [info] {sfContext} initialization
+Aug 31 14:32:58 symfony [info] {sfController} initialization
+Aug 31 14:32:58 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:32:58 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:32:58 symfony [info] {sfController} dispatch request
+Aug 31 14:32:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:32:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:32:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:32:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:32:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:32:58 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:32:58 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:32:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:32:58 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:32:58 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:32:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:32:58 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:32:58 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:32:58 symfony [info] {sfFilter} render to client
+Aug 31 14:32:58 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:32:58 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:32:58 symfony [info] {sfResponse} send content (223085 o)
+Aug 31 14:32:58 symfony [info] {sfTimerManager} Configuration 6.17 ms (12)
+Aug 31 14:32:58 symfony [info] {sfTimerManager} Action "manual/index" 99.51 ms (1)
+Aug 31 14:32:58 symfony [info] {sfTimerManager} View "Success" for "manual/index" 224.64 ms (1)
+Aug 31 14:32:58 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 48.24 ms (1)
+Aug 31 14:33:38 symfony [info] {sfContext} initialization
+Aug 31 14:33:38 symfony [info] {sfController} initialization
+Aug 31 14:33:38 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:33:38 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:33:38 symfony [info] {sfController} dispatch request
+Aug 31 14:33:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:33:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:33:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:33:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:33:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:33:38 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:33:38 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:33:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:33:38 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:33:38 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:33:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:33:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:38 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:33:38 symfony [info] {sfFilter} render to client
+Aug 31 14:33:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:33:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:33:38 symfony [info] {sfResponse} send content (223086 o)
+Aug 31 14:33:38 symfony [info] {sfTimerManager} Configuration 5.61 ms (12)
+Aug 31 14:33:38 symfony [info] {sfTimerManager} Action "manual/index" 100.29 ms (1)
+Aug 31 14:33:38 symfony [info] {sfTimerManager} View "Success" for "manual/index" 222.07 ms (1)
+Aug 31 14:33:38 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.30 ms (1)
+Aug 31 14:33:47 symfony [info] {sfContext} initialization
+Aug 31 14:33:47 symfony [info] {sfController} initialization
+Aug 31 14:33:47 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:33:47 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:33:47 symfony [info] {sfController} dispatch request
+Aug 31 14:33:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:33:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:33:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:33:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:33:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:33:47 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:33:47 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:33:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:33:48 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:33:48 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:33:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:33:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:48 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:33:48 symfony [info] {sfFilter} render to client
+Aug 31 14:33:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:33:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:33:48 symfony [info] {sfResponse} send content (223085 o)
+Aug 31 14:33:48 symfony [info] {sfTimerManager} Configuration 5.36 ms (12)
+Aug 31 14:33:48 symfony [info] {sfTimerManager} Action "manual/index" 99.00 ms (1)
+Aug 31 14:33:48 symfony [info] {sfTimerManager} View "Success" for "manual/index" 222.36 ms (1)
+Aug 31 14:33:48 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.85 ms (1)
+Aug 31 14:33:54 symfony [info] {sfContext} initialization
+Aug 31 14:33:54 symfony [info] {sfController} initialization
+Aug 31 14:33:54 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:33:54 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:33:54 symfony [info] {sfController} dispatch request
+Aug 31 14:33:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:33:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:33:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:33:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:33:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:33:54 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:33:55 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:33:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:33:55 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:33:55 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:33:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:33:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:33:55 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:33:55 symfony [info] {sfFilter} render to client
+Aug 31 14:33:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:33:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:33:55 symfony [info] {sfResponse} send content (234292 o)
+Aug 31 14:33:55 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 14:33:55 symfony [info] {sfTimerManager} Action "manual/index" 97.50 ms (1)
+Aug 31 14:33:55 symfony [info] {sfTimerManager} View "Success" for "manual/index" 288.55 ms (1)
+Aug 31 14:33:55 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.39 ms (1)
+Aug 31 14:34:20 symfony [info] {sfContext} initialization
+Aug 31 14:34:20 symfony [info] {sfController} initialization
+Aug 31 14:34:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:34:20 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:34:20 symfony [info] {sfController} dispatch request
+Aug 31 14:34:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:34:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:34:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:34:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:34:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:34:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:34:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:34:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:34:20 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:34:20 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:34:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:34:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:34:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:34:20 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:34:20 symfony [info] {sfFilter} render to client
+Aug 31 14:34:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:34:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:34:20 symfony [info] {sfResponse} send content (234292 o)
+Aug 31 14:34:20 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 14:34:20 symfony [info] {sfTimerManager} Action "manual/index" 98.91 ms (1)
+Aug 31 14:34:20 symfony [info] {sfTimerManager} View "Success" for "manual/index" 292.05 ms (1)
+Aug 31 14:34:20 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.40 ms (1)
+Aug 31 14:34:36 symfony [info] {sfContext} initialization
+Aug 31 14:34:36 symfony [info] {sfController} initialization
+Aug 31 14:34:36 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:34:36 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:34:36 symfony [info] {sfController} dispatch request
+Aug 31 14:34:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:34:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:34:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:34:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:34:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:34:36 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:34:36 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:34:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:34:37 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:34:37 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:34:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:34:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:34:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:34:37 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:34:37 symfony [info] {sfFilter} render to client
+Aug 31 14:34:37 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:34:37 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:34:37 symfony [info] {sfResponse} send content (234292 o)
+Aug 31 14:34:37 symfony [info] {sfTimerManager} Configuration 5.95 ms (12)
+Aug 31 14:34:37 symfony [info] {sfTimerManager} Action "manual/index" 98.88 ms (1)
+Aug 31 14:34:37 symfony [info] {sfTimerManager} View "Success" for "manual/index" 286.68 ms (1)
+Aug 31 14:34:37 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.01 ms (1)
+Aug 31 14:35:01 symfony [info] {sfContext} initialization
+Aug 31 14:35:01 symfony [info] {sfController} initialization
+Aug 31 14:35:01 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:35:01 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:35:01 symfony [info] {sfController} dispatch request
+Aug 31 14:35:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:35:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:35:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:35:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:35:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:35:01 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:35:02 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:35:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:35:02 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:35:02 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:35:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:35:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:02 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:35:02 symfony [info] {sfFilter} render to client
+Aug 31 14:35:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:35:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:35:02 symfony [info] {sfResponse} send content (234293 o)
+Aug 31 14:35:02 symfony [info] {sfTimerManager} Configuration 5.41 ms (12)
+Aug 31 14:35:02 symfony [info] {sfTimerManager} Action "manual/index" 100.80 ms (1)
+Aug 31 14:35:02 symfony [info] {sfTimerManager} View "Success" for "manual/index" 294.38 ms (1)
+Aug 31 14:35:02 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.32 ms (1)
+Aug 31 14:35:20 symfony [info] {sfContext} initialization
+Aug 31 14:35:20 symfony [info] {sfController} initialization
+Aug 31 14:35:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:35:20 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:35:20 symfony [info] {sfController} dispatch request
+Aug 31 14:35:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:35:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:35:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:35:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:35:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:35:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:35:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:35:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:35:21 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:35:21 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:35:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:35:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:21 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:35:21 symfony [info] {sfFilter} render to client
+Aug 31 14:35:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:35:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:35:21 symfony [info] {sfResponse} send content (234293 o)
+Aug 31 14:35:21 symfony [info] {sfTimerManager} Configuration 5.60 ms (12)
+Aug 31 14:35:21 symfony [info] {sfTimerManager} Action "manual/index" 101.53 ms (1)
+Aug 31 14:35:21 symfony [info] {sfTimerManager} View "Success" for "manual/index" 291.48 ms (1)
+Aug 31 14:35:21 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.11 ms (1)
+Aug 31 14:35:33 symfony [info] {sfContext} initialization
+Aug 31 14:35:33 symfony [info] {sfController} initialization
+Aug 31 14:35:33 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:35:33 symfony [info] {sfRequest} request parameters array (  'chapter' => 'native-sql',  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:35:33 symfony [info] {sfController} dispatch request
+Aug 31 14:35:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:35:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:35:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:35:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:35:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:35:33 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:35:33 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:35:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:35:33 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:35:33 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:35:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:35:33 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:35:33 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:35:33 symfony [info] {sfFilter} render to client
+Aug 31 14:35:33 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:35:33 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:35:33 symfony [info] {sfResponse} send content (141574 o)
+Aug 31 14:35:33 symfony [info] {sfTimerManager} Configuration 5.21 ms (12)
+Aug 31 14:35:33 symfony [info] {sfTimerManager} Action "manual/index" 96.92 ms (1)
+Aug 31 14:35:33 symfony [info] {sfTimerManager} View "Success" for "manual/index" 101.98 ms (1)
+Aug 31 14:35:33 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 45.07 ms (1)
+Aug 31 14:36:30 symfony [info] {sfContext} initialization
+Aug 31 14:36:30 symfony [info] {sfController} initialization
+Aug 31 14:36:30 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:36:30 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:36:30 symfony [info] {sfController} dispatch request
+Aug 31 14:36:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:36:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:36:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:36:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:36:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:36:30 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:36:30 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:36:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:36:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:36:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:36:30 symfony [info] {sfFilter} render to client
+Aug 31 14:36:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:36:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:36:30 symfony [info] {sfResponse} send content (20882 o)
+Aug 31 14:36:30 symfony [info] {sfTimerManager} Configuration 4.95 ms (12)
+Aug 31 14:36:30 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:36:30 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.59 ms (1)
+Aug 31 14:37:24 symfony [info] {sfContext} initialization
+Aug 31 14:37:24 symfony [info] {sfController} initialization
+Aug 31 14:37:24 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:37:24 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:37:24 symfony [info] {sfController} dispatch request
+Aug 31 14:37:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:24 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:37:24 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:37:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:24 symfony [info] {sfFilter} render to client
+Aug 31 14:37:24 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:37:24 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:24 symfony [info] {sfResponse} send content (20882 o)
+Aug 31 14:37:24 symfony [info] {sfTimerManager} Configuration 5.99 ms (12)
+Aug 31 14:37:24 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:37:24 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.08 ms (1)
+Aug 31 14:37:25 symfony [info] {sfContext} initialization
+Aug 31 14:37:25 symfony [info] {sfController} initialization
+Aug 31 14:37:25 symfony [info] {sfRouting} match route [about] "/about"
+Aug 31 14:37:25 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'about',)
+Aug 31 14:37:25 symfony [info] {sfController} dispatch request
+Aug 31 14:37:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:25 symfony [info] {sfAction} call "mainActions->executeAbout()"
+Aug 31 14:37:25 symfony [info] {sfView} initialize view for "main/about"
+Aug 31 14:37:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/aboutSuccess.php"
+Aug 31 14:37:25 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:25 symfony [info] {sfFilter} render to client
+Aug 31 14:37:25 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:37:25 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:25 symfony [info] {sfResponse} send content (20894 o)
+Aug 31 14:37:25 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 14:37:25 symfony [info] {sfTimerManager} Action "main/about" 0.14 ms (1)
+Aug 31 14:37:25 symfony [info] {sfTimerManager} View "Success" for "main/about" 16.72 ms (1)
+Aug 31 14:37:27 symfony [info] {sfContext} initialization
+Aug 31 14:37:27 symfony [info] {sfController} initialization
+Aug 31 14:37:27 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:37:27 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:37:27 symfony [info] {sfController} dispatch request
+Aug 31 14:37:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:27 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:37:27 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:37:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:37:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:27 symfony [info] {sfFilter} render to client
+Aug 31 14:37:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:37:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:27 symfony [info] {sfResponse} send content (20845 o)
+Aug 31 14:37:27 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 14:37:27 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 14:37:27 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.70 ms (1)
+Aug 31 14:37:29 symfony [info] {sfContext} initialization
+Aug 31 14:37:29 symfony [info] {sfController} initialization
+Aug 31 14:37:29 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:37:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:37:29 symfony [info] {sfController} dispatch request
+Aug 31 14:37:29 symfony [info] {sfController} action does not exist
+Aug 31 14:37:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:29 symfony [info] {sfAction} call "defaultActions->executeError404()"
+Aug 31 14:37:29 symfony [info] {sfView} initialize view for "default/error404"
+Aug 31 14:37:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/error404Success.php"
+Aug 31 14:37:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 14:37:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 14:37:29 symfony [info] {sfFilter} render to client
+Aug 31 14:37:29 symfony [info] {sfResponse} send status "HTTP/1.0 404 Not Found"
+Aug 31 14:37:29 symfony [info] {sfResponse} send header "Status": "404 Not Found"
+Aug 31 14:37:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:29 symfony [info] {sfResponse} send content (22407 o)
+Aug 31 14:37:29 symfony [info] {sfTimerManager} Configuration 6.37 ms (12)
+Aug 31 14:37:29 symfony [info] {sfTimerManager} Action "default/error404" 0.18 ms (1)
+Aug 31 14:37:29 symfony [info] {sfTimerManager} View "Success" for "default/error404" 19.25 ms (1)
+Aug 31 14:37:51 symfony [info] {sfContext} initialization
+Aug 31 14:37:51 symfony [info] {sfController} initialization
+Aug 31 14:37:51 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:37:51 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:37:51 symfony [info] {sfController} dispatch request
+Aug 31 14:37:51 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:51 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:51 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:51 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:51 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:51 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 14:37:51 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 14:37:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 14:37:51 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:51 symfony [info] {sfFilter} render to client
+Aug 31 14:37:51 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:37:51 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:51 symfony [info] {sfResponse} send content (20920 o)
+Aug 31 14:37:51 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 14:37:51 symfony [info] {sfTimerManager} Action "main/download" 0.15 ms (1)
+Aug 31 14:37:51 symfony [info] {sfTimerManager} View "Success" for "main/download" 16.84 ms (1)
+Aug 31 14:37:53 symfony [info] {sfContext} initialization
+Aug 31 14:37:53 symfony [info] {sfController} initialization
+Aug 31 14:37:53 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:37:53 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:37:53 symfony [info] {sfController} dispatch request
+Aug 31 14:37:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:37:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:37:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:37:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:37:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:37:53 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:37:53 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:37:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:37:53 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:37:53 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:37:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:37:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:37:53 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:37:53 symfony [info] {sfFilter} render to client
+Aug 31 14:37:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:37:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:37:53 symfony [info] {sfResponse} send content (66293 o)
+Aug 31 14:37:53 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 14:37:53 symfony [info] {sfTimerManager} Action "manual/index" 97.42 ms (1)
+Aug 31 14:37:53 symfony [info] {sfTimerManager} View "Success" for "manual/index" 64.90 ms (1)
+Aug 31 14:37:53 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.73 ms (1)
+Aug 31 14:38:28 symfony [info] {sfContext} initialization
+Aug 31 14:38:28 symfony [info] {sfController} initialization
+Aug 31 14:38:28 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:38:28 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:38:28 symfony [info] {sfController} dispatch request
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:38:28 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:38:28 symfony [info] {sfAction} forward to action "default/module"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:38:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:38:28 symfony [info] {sfAction} call "defaultActions->executeModule()"
+Aug 31 14:38:28 symfony [info] {sfView} initialize view for "default/module"
+Aug 31 14:38:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/moduleSuccess.php"
+Aug 31 14:38:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 14:38:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/config/../data/symfony/modules/default/templates/defaultLayout.php"
+Aug 31 14:38:28 symfony [info] {sfFilter} render to client
+Aug 31 14:38:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:38:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:38:28 symfony [info] {sfResponse} send content (24575 o)
+Aug 31 14:38:28 symfony [info] {sfTimerManager} Configuration 36.54 ms (17)
+Aug 31 14:38:28 symfony [info] {sfTimerManager} Action "api_documentation/index" 37.90 ms (1)
+Aug 31 14:38:28 symfony [info] {sfTimerManager} Action "default/module" 0.14 ms (1)
+Aug 31 14:38:28 symfony [info] {sfTimerManager} View "Success" for "default/module" 25.59 ms (1)
+Aug 31 14:38:54 symfony [info] {sfContext} initialization
+Aug 31 14:38:54 symfony [info] {sfController} initialization
+Aug 31 14:38:54 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:38:54 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:38:54 symfony [info] {sfController} dispatch request
+Aug 31 14:38:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:38:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:38:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:38:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:38:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:38:54 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:38:54 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:38:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:38:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:38:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:38:54 symfony [info] {sfFilter} render to client
+Aug 31 14:38:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:38:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:38:54 symfony [info] {sfResponse} send content (21162 o)
+Aug 31 14:38:54 symfony [info] {sfTimerManager} Configuration 174.16 ms (13)
+Aug 31 14:38:54 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 14:38:54 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 190.12 ms (1)
+Aug 31 14:38:57 symfony [info] {sfContext} initialization
+Aug 31 14:38:57 symfony [info] {sfController} initialization
+Aug 31 14:38:57 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:38:57 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:38:57 symfony [info] {sfController} dispatch request
+Aug 31 14:38:59 symfony [info] {sfContext} initialization
+Aug 31 14:38:59 symfony [info] {sfController} initialization
+Aug 31 14:38:59 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:38:59 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:38:59 symfony [info] {sfController} dispatch request
+Aug 31 14:42:54 symfony [info] {sfContext} initialization
+Aug 31 14:42:54 symfony [info] {sfController} initialization
+Aug 31 14:42:54 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:42:54 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:42:54 symfony [info] {sfController} dispatch request
+Aug 31 14:42:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:42:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:42:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:42:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:42:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:42:54 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:42:54 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:42:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:42:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:42:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:42:54 symfony [info] {sfFilter} render to client
+Aug 31 14:42:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:42:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:42:54 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 14:42:54 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 14:42:54 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:42:54 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.26 ms (1)
+Aug 31 14:43:28 symfony [info] {sfContext} initialization
+Aug 31 14:43:28 symfony [info] {sfController} initialization
+Aug 31 14:43:28 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:43:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:43:28 symfony [info] {sfController} dispatch request
+Aug 31 14:43:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:43:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:43:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:43:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:43:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:43:28 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:43:28 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:43:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:43:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:43:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:43:28 symfony [info] {sfFilter} render to client
+Aug 31 14:43:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:43:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:43:28 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 14:43:28 symfony [info] {sfTimerManager} Configuration 5.33 ms (12)
+Aug 31 14:43:28 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:43:28 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.83 ms (1)
+Aug 31 14:43:59 symfony [info] {sfContext} initialization
+Aug 31 14:43:59 symfony [info] {sfController} initialization
+Aug 31 14:43:59 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:43:59 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:43:59 symfony [info] {sfController} dispatch request
+Aug 31 14:43:59 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:43:59 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:43:59 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:43:59 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:43:59 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:43:59 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:43:59 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:43:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:43:59 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:43:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:43:59 symfony [info] {sfFilter} render to client
+Aug 31 14:43:59 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:43:59 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:43:59 symfony [info] {sfResponse} send content (20905 o)
+Aug 31 14:43:59 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 14:43:59 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:43:59 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.91 ms (1)
+Aug 31 14:45:13 symfony [info] {sfContext} initialization
+Aug 31 14:45:13 symfony [info] {sfController} initialization
+Aug 31 14:45:13 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:45:13 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:45:13 symfony [info] {sfController} dispatch request
+Aug 31 14:45:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:45:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:45:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:45:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:45:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:45:13 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:45:13 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:45:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:45:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:13 symfony [info] {sfFilter} render to client
+Aug 31 14:45:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:45:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:45:13 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 14:45:13 symfony [info] {sfTimerManager} Configuration 5.26 ms (12)
+Aug 31 14:45:13 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:45:13 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.16 ms (1)
+Aug 31 14:45:35 symfony [info] {sfContext} initialization
+Aug 31 14:45:35 symfony [info] {sfController} initialization
+Aug 31 14:45:35 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:45:35 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:45:35 symfony [info] {sfController} dispatch request
+Aug 31 14:45:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:45:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:45:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:45:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:45:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:45:35 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:45:35 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:45:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:45:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:35 symfony [info] {sfFilter} render to client
+Aug 31 14:45:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:45:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:45:35 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 14:45:35 symfony [info] {sfTimerManager} Configuration 5.04 ms (12)
+Aug 31 14:45:35 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 14:45:35 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.11 ms (1)
+Aug 31 14:45:46 symfony [info] {sfContext} initialization
+Aug 31 14:45:46 symfony [info] {sfController} initialization
+Aug 31 14:45:46 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:45:46 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:45:46 symfony [info] {sfController} dispatch request
+Aug 31 14:45:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:45:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:45:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:45:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:45:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:45:46 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:45:46 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:45:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:45:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:46 symfony [info] {sfFilter} render to client
+Aug 31 14:45:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:45:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:45:46 symfony [info] {sfResponse} send content (20860 o)
+Aug 31 14:45:46 symfony [info] {sfTimerManager} Configuration 5.60 ms (12)
+Aug 31 14:45:46 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:45:46 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.79 ms (1)
+Aug 31 14:45:52 symfony [info] {sfContext} initialization
+Aug 31 14:45:52 symfony [info] {sfController} initialization
+Aug 31 14:45:52 symfony [info] {sfRouting} match route [about] "/about"
+Aug 31 14:45:52 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'about',)
+Aug 31 14:45:52 symfony [info] {sfController} dispatch request
+Aug 31 14:45:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:45:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:45:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:45:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:45:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:45:52 symfony [info] {sfAction} call "mainActions->executeAbout()"
+Aug 31 14:45:52 symfony [info] {sfView} initialize view for "main/about"
+Aug 31 14:45:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/aboutSuccess.php"
+Aug 31 14:45:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:52 symfony [info] {sfFilter} render to client
+Aug 31 14:45:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:45:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:45:52 symfony [info] {sfResponse} send content (20895 o)
+Aug 31 14:45:52 symfony [info] {sfTimerManager} Configuration 5.11 ms (12)
+Aug 31 14:45:52 symfony [info] {sfTimerManager} Action "main/about" 0.14 ms (1)
+Aug 31 14:45:52 symfony [info] {sfTimerManager} View "Success" for "main/about" 53.04 ms (1)
+Aug 31 14:45:53 symfony [info] {sfContext} initialization
+Aug 31 14:45:53 symfony [info] {sfController} initialization
+Aug 31 14:45:53 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:45:53 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:45:53 symfony [info] {sfController} dispatch request
+Aug 31 14:45:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:45:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:45:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:45:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:45:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:45:53 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:45:53 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:45:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:45:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:45:53 symfony [info] {sfFilter} render to client
+Aug 31 14:45:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:45:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:45:53 symfony [info] {sfResponse} send content (20848 o)
+Aug 31 14:45:53 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 14:45:53 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:45:53 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.26 ms (1)
+Aug 31 14:46:08 symfony [info] {sfContext} initialization
+Aug 31 14:46:08 symfony [info] {sfController} initialization
+Aug 31 14:46:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:46:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:46:08 symfony [info] {sfController} dispatch request
+Aug 31 14:46:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:46:08 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:46:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:46:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:08 symfony [info] {sfFilter} render to client
+Aug 31 14:46:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:08 symfony [info] {sfResponse} send content (20880 o)
+Aug 31 14:46:08 symfony [info] {sfTimerManager} Configuration 5.40 ms (12)
+Aug 31 14:46:08 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:46:08 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.85 ms (1)
+Aug 31 14:46:10 symfony [info] {sfContext} initialization
+Aug 31 14:46:10 symfony [info] {sfController} initialization
+Aug 31 14:46:10 symfony [info] {sfRouting} match route [about] "/about"
+Aug 31 14:46:10 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'about',)
+Aug 31 14:46:10 symfony [info] {sfController} dispatch request
+Aug 31 14:46:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:10 symfony [info] {sfAction} call "mainActions->executeAbout()"
+Aug 31 14:46:10 symfony [info] {sfView} initialize view for "main/about"
+Aug 31 14:46:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/aboutSuccess.php"
+Aug 31 14:46:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:10 symfony [info] {sfFilter} render to client
+Aug 31 14:46:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:10 symfony [info] {sfResponse} send content (20895 o)
+Aug 31 14:46:10 symfony [info] {sfTimerManager} Configuration 5.40 ms (12)
+Aug 31 14:46:10 symfony [info] {sfTimerManager} Action "main/about" 0.14 ms (1)
+Aug 31 14:46:10 symfony [info] {sfTimerManager} View "Success" for "main/about" 16.30 ms (1)
+Aug 31 14:46:11 symfony [info] {sfContext} initialization
+Aug 31 14:46:11 symfony [info] {sfController} initialization
+Aug 31 14:46:11 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:46:11 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:46:11 symfony [info] {sfController} dispatch request
+Aug 31 14:46:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:11 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 14:46:11 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 14:46:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 14:46:11 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:11 symfony [info] {sfFilter} render to client
+Aug 31 14:46:11 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:11 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:11 symfony [info] {sfResponse} send content (20925 o)
+Aug 31 14:46:11 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 14:46:11 symfony [info] {sfTimerManager} Action "main/download" 0.15 ms (1)
+Aug 31 14:46:11 symfony [info] {sfTimerManager} View "Success" for "main/download" 16.77 ms (1)
+Aug 31 14:46:19 symfony [info] {sfContext} initialization
+Aug 31 14:46:19 symfony [info] {sfController} initialization
+Aug 31 14:46:19 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:46:19 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:46:19 symfony [info] {sfController} dispatch request
+Aug 31 14:46:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:19 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 14:46:19 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 14:46:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 14:46:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:19 symfony [info] {sfFilter} render to client
+Aug 31 14:46:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:19 symfony [info] {sfResponse} send content (20948 o)
+Aug 31 14:46:19 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 14:46:19 symfony [info] {sfTimerManager} Action "main/download" 0.14 ms (1)
+Aug 31 14:46:19 symfony [info] {sfTimerManager} View "Success" for "main/download" 16.73 ms (1)
+Aug 31 14:46:20 symfony [info] {sfContext} initialization
+Aug 31 14:46:20 symfony [info] {sfController} initialization
+Aug 31 14:46:20 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:46:20 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:46:20 symfony [info] {sfController} dispatch request
+Aug 31 14:46:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:20 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:46:20 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:46:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:46:21 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:46:21 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:46:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:46:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:21 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:46:21 symfony [info] {sfFilter} render to client
+Aug 31 14:46:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:21 symfony [info] {sfResponse} send content (66293 o)
+Aug 31 14:46:21 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 14:46:21 symfony [info] {sfTimerManager} Action "manual/index" 98.83 ms (1)
+Aug 31 14:46:21 symfony [info] {sfTimerManager} View "Success" for "manual/index" 66.93 ms (1)
+Aug 31 14:46:21 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.74 ms (1)
+Aug 31 14:46:23 symfony [info] {sfContext} initialization
+Aug 31 14:46:23 symfony [info] {sfController} initialization
+Aug 31 14:46:23 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:46:23 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:46:23 symfony [info] {sfController} dispatch request
+Aug 31 14:46:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:23 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:46:23 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:46:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:46:23 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:23 symfony [info] {sfFilter} render to client
+Aug 31 14:46:23 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:23 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:23 symfony [info] {sfResponse} send content (21159 o)
+Aug 31 14:46:23 symfony [info] {sfTimerManager} Configuration 5.00 ms (12)
+Aug 31 14:46:23 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 14:46:23 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 16.47 ms (1)
+Aug 31 14:46:25 symfony [info] {sfContext} initialization
+Aug 31 14:46:25 symfony [info] {sfController} initialization
+Aug 31 14:46:25 symfony [info] {sfRouting} match route [trac] "/trac"
+Aug 31 14:46:25 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'trac',)
+Aug 31 14:46:25 symfony [info] {sfController} dispatch request
+Aug 31 14:46:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:25 symfony [info] {sfAction} call "mainActions->executeTrac()"
+Aug 31 14:46:25 symfony [info] {sfAction} redirect to "http://www.phpdoctrine.net/trac"
+Aug 31 14:46:25 symfony [info] {sfResponse} send status "HTTP/1.0 302 Found"
+Aug 31 14:46:25 symfony [info] {sfResponse} send header "Location": "http://www.phpdoctrine.net/trac"
+Aug 31 14:46:25 symfony [info] {sfResponse} send content (102 o)
+Aug 31 14:46:58 symfony [info] {sfContext} initialization
+Aug 31 14:46:58 symfony [info] {sfController} initialization
+Aug 31 14:46:58 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:46:58 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:46:58 symfony [info] {sfController} dispatch request
+Aug 31 14:46:59 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:46:59 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:46:59 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:46:59 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:46:59 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:46:59 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:46:59 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:46:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:46:59 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:59 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:46:59 symfony [info] {sfFilter} render to client
+Aug 31 14:46:59 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:46:59 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:46:59 symfony [info] {sfResponse} send content (21159 o)
+Aug 31 14:46:59 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 14:46:59 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 14:46:59 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 16.39 ms (1)
+Aug 31 14:47:00 symfony [info] {sfContext} initialization
+Aug 31 14:47:00 symfony [info] {sfController} initialization
+Aug 31 14:47:00 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:47:00 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:47:00 symfony [info] {sfController} dispatch request
+Aug 31 14:47:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:47:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:47:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:47:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:47:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:47:00 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:47:00 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:47:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:47:00 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:00 symfony [info] {sfFilter} render to client
+Aug 31 14:47:00 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:47:00 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:47:00 symfony [info] {sfResponse} send content (21156 o)
+Aug 31 14:47:00 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 14:47:00 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 14:47:00 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 18.62 ms (1)
+Aug 31 14:47:02 symfony [info] {sfContext} initialization
+Aug 31 14:47:02 symfony [info] {sfController} initialization
+Aug 31 14:47:02 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:47:02 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:47:02 symfony [info] {sfController} dispatch request
+Aug 31 14:47:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:47:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:47:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:47:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:47:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:47:02 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:47:02 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:47:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:47:02 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:47:02 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:47:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:47:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:02 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:47:02 symfony [info] {sfFilter} render to client
+Aug 31 14:47:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:47:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:47:02 symfony [info] {sfResponse} send content (66302 o)
+Aug 31 14:47:02 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 14:47:02 symfony [info] {sfTimerManager} Action "manual/index" 97.46 ms (1)
+Aug 31 14:47:02 symfony [info] {sfTimerManager} View "Success" for "manual/index" 65.02 ms (1)
+Aug 31 14:47:02 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.72 ms (1)
+Aug 31 14:47:03 symfony [info] {sfContext} initialization
+Aug 31 14:47:03 symfony [info] {sfController} initialization
+Aug 31 14:47:03 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:47:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:47:03 symfony [info] {sfController} dispatch request
+Aug 31 14:47:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:47:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:47:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:47:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:47:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:47:03 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 14:47:03 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 14:47:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 14:47:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:03 symfony [info] {sfFilter} render to client
+Aug 31 14:47:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:47:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:47:03 symfony [info] {sfResponse} send content (20963 o)
+Aug 31 14:47:03 symfony [info] {sfTimerManager} Configuration 4.94 ms (12)
+Aug 31 14:47:03 symfony [info] {sfTimerManager} Action "main/download" 0.14 ms (1)
+Aug 31 14:47:03 symfony [info] {sfTimerManager} View "Success" for "main/download" 16.11 ms (1)
+Aug 31 14:47:43 symfony [info] {sfContext} initialization
+Aug 31 14:47:43 symfony [info] {sfController} initialization
+Aug 31 14:47:43 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:47:43 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:47:43 symfony [info] {sfController} dispatch request
+Aug 31 14:47:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:47:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:47:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:47:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:47:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:47:43 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:47:43 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:47:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:47:43 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:47:43 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:47:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:47:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:43 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:47:44 symfony [info] {sfFilter} render to client
+Aug 31 14:47:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:47:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:47:44 symfony [info] {sfResponse} send content (66293 o)
+Aug 31 14:47:44 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 14:47:44 symfony [info] {sfTimerManager} Action "manual/index" 96.68 ms (1)
+Aug 31 14:47:44 symfony [info] {sfTimerManager} View "Success" for "manual/index" 64.12 ms (1)
+Aug 31 14:47:44 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.73 ms (1)
+Aug 31 14:47:58 symfony [info] {sfContext} initialization
+Aug 31 14:47:58 symfony [info] {sfController} initialization
+Aug 31 14:47:58 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:47:58 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:47:58 symfony [info] {sfController} dispatch request
+Aug 31 14:47:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:47:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:47:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:47:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:47:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:47:58 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:47:58 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:47:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:47:58 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:47:58 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:47:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:47:58 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:47:58 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:47:58 symfony [info] {sfFilter} render to client
+Aug 31 14:47:58 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:47:58 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:47:58 symfony [info] {sfResponse} send content (66361 o)
+Aug 31 14:47:58 symfony [info] {sfTimerManager} Configuration 7.18 ms (12)
+Aug 31 14:47:58 symfony [info] {sfTimerManager} Action "manual/index" 186.19 ms (1)
+Aug 31 14:47:58 symfony [info] {sfTimerManager} View "Success" for "manual/index" 65.36 ms (1)
+Aug 31 14:47:58 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.76 ms (1)
+Aug 31 14:48:13 symfony [info] {sfContext} initialization
+Aug 31 14:48:13 symfony [info] {sfController} initialization
+Aug 31 14:48:13 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:48:13 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:48:13 symfony [info] {sfController} dispatch request
+Aug 31 14:48:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:13 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:48:13 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:48:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:48:13 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:48:13 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:48:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:48:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:13 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:48:13 symfony [info] {sfFilter} render to client
+Aug 31 14:48:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:13 symfony [info] {sfResponse} send content (66360 o)
+Aug 31 14:48:13 symfony [info] {sfTimerManager} Configuration 5.43 ms (12)
+Aug 31 14:48:13 symfony [info] {sfTimerManager} Action "manual/index" 97.32 ms (1)
+Aug 31 14:48:13 symfony [info] {sfTimerManager} View "Success" for "manual/index" 64.49 ms (1)
+Aug 31 14:48:13 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.83 ms (1)
+Aug 31 14:48:17 symfony [info] {sfContext} initialization
+Aug 31 14:48:17 symfony [info] {sfController} initialization
+Aug 31 14:48:17 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:48:17 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:48:17 symfony [info] {sfController} dispatch request
+Aug 31 14:48:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:17 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:48:17 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:48:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:48:17 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:17 symfony [info] {sfFilter} render to client
+Aug 31 14:48:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:17 symfony [info] {sfResponse} send content (20962 o)
+Aug 31 14:48:17 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 14:48:17 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:48:17 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.64 ms (1)
+Aug 31 14:48:27 symfony [info] {sfContext} initialization
+Aug 31 14:48:27 symfony [info] {sfController} initialization
+Aug 31 14:48:27 symfony [info] {sfRouting} match route [about] "/about"
+Aug 31 14:48:27 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'about',)
+Aug 31 14:48:27 symfony [info] {sfController} dispatch request
+Aug 31 14:48:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:27 symfony [info] {sfAction} call "mainActions->executeAbout()"
+Aug 31 14:48:27 symfony [info] {sfView} initialize view for "main/about"
+Aug 31 14:48:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/aboutSuccess.php"
+Aug 31 14:48:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:27 symfony [info] {sfFilter} render to client
+Aug 31 14:48:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:27 symfony [info] {sfResponse} send content (20962 o)
+Aug 31 14:48:27 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 14:48:27 symfony [info] {sfTimerManager} Action "main/about" 0.14 ms (1)
+Aug 31 14:48:27 symfony [info] {sfTimerManager} View "Success" for "main/about" 16.46 ms (1)
+Aug 31 14:48:28 symfony [info] {sfContext} initialization
+Aug 31 14:48:28 symfony [info] {sfController} initialization
+Aug 31 14:48:28 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 14:48:28 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 14:48:28 symfony [info] {sfController} dispatch request
+Aug 31 14:48:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:28 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 14:48:28 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 14:48:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 14:48:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:28 symfony [info] {sfFilter} render to client
+Aug 31 14:48:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:28 symfony [info] {sfResponse} send content (21014 o)
+Aug 31 14:48:28 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 14:48:28 symfony [info] {sfTimerManager} Action "main/download" 0.15 ms (1)
+Aug 31 14:48:28 symfony [info] {sfTimerManager} View "Success" for "main/download" 16.43 ms (1)
+Aug 31 14:48:29 symfony [info] {sfContext} initialization
+Aug 31 14:48:29 symfony [info] {sfController} initialization
+Aug 31 14:48:29 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 14:48:29 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 14:48:29 symfony [info] {sfController} dispatch request
+Aug 31 14:48:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:29 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 14:48:29 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 14:48:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 14:48:29 symfony [info] {PartialHelper} set slot "right"
+Aug 31 14:48:29 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 14:48:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 14:48:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:29 symfony [info] {PartialHelper} get slot "right"
+Aug 31 14:48:29 symfony [info] {sfFilter} render to client
+Aug 31 14:48:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:29 symfony [info] {sfResponse} send content (66361 o)
+Aug 31 14:48:29 symfony [info] {sfTimerManager} Configuration 5.93 ms (12)
+Aug 31 14:48:29 symfony [info] {sfTimerManager} Action "manual/index" 108.79 ms (1)
+Aug 31 14:48:29 symfony [info] {sfTimerManager} View "Success" for "manual/index" 70.80 ms (1)
+Aug 31 14:48:29 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.90 ms (1)
+Aug 31 14:48:30 symfony [info] {sfContext} initialization
+Aug 31 14:48:30 symfony [info] {sfController} initialization
+Aug 31 14:48:30 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:48:30 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:48:30 symfony [info] {sfController} dispatch request
+Aug 31 14:48:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:48:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:48:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:48:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:48:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:48:30 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:48:30 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:48:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:48:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:48:30 symfony [info] {sfFilter} render to client
+Aug 31 14:48:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:48:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:48:30 symfony [info] {sfResponse} send content (21226 o)
+Aug 31 14:48:30 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 14:48:30 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 14:48:30 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 16.46 ms (1)
+Aug 31 14:49:30 symfony [info] {sfContext} initialization
+Aug 31 14:49:30 symfony [info] {sfController} initialization
+Aug 31 14:49:30 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:49:30 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:49:30 symfony [info] {sfController} dispatch request
+Aug 31 14:49:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:49:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:49:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:49:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:49:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:49:30 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:49:30 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:49:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:49:30 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:49:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:49:30 symfony [info] {sfFilter} render to client
+Aug 31 14:49:30 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:49:30 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:49:30 symfony [info] {sfResponse} send content (20959 o)
+Aug 31 14:49:30 symfony [info] {sfTimerManager} Configuration 4.93 ms (12)
+Aug 31 14:49:30 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:49:30 symfony [info] {sfTimerManager} View "Success" for "main/index" 17.08 ms (1)
+Aug 31 14:54:31 symfony [info] {sfContext} initialization
+Aug 31 14:54:31 symfony [info] {sfController} initialization
+Aug 31 14:54:31 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:54:31 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:54:31 symfony [info] {sfController} dispatch request
+Aug 31 14:54:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:54:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:54:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:54:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:54:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:54:31 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:54:31 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:54:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:54:31 symfony [info] {sfFilter} render to client
+Aug 31 14:54:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:54:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:54:31 symfony [info] {sfResponse} send content (20959 o)
+Aug 31 14:54:31 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 14:54:31 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:54:31 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.74 ms (1)
+Aug 31 14:58:12 symfony [info] {sfContext} initialization
+Aug 31 14:58:12 symfony [info] {sfController} initialization
+Aug 31 14:58:12 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 14:58:12 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 14:58:12 symfony [info] {sfController} dispatch request
+Aug 31 14:58:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:58:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:58:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:58:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:58:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:58:12 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 14:58:12 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 14:58:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 14:58:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:12 symfony [info] {sfFilter} render to client
+Aug 31 14:58:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:58:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:58:12 symfony [info] {sfResponse} send content (20959 o)
+Aug 31 14:58:12 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 14:58:12 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 14:58:12 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.31 ms (1)
+Aug 31 14:58:14 symfony [info] {sfContext} initialization
+Aug 31 14:58:14 symfony [info] {sfController} initialization
+Aug 31 14:58:14 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:58:14 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:58:14 symfony [info] {sfController} dispatch request
+Aug 31 14:58:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:58:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:58:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:58:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:58:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:58:14 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:58:14 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:58:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:58:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:14 symfony [info] {sfFilter} render to client
+Aug 31 14:58:14 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:58:14 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:58:14 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 14:58:14 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 14:58:14 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.17 ms (1)
+Aug 31 14:58:14 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.49 ms (1)
+Aug 31 14:58:23 symfony [info] {sfContext} initialization
+Aug 31 14:58:23 symfony [info] {sfController} initialization
+Aug 31 14:58:23 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:58:23 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:58:23 symfony [info] {sfController} dispatch request
+Aug 31 14:58:23 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:58:23 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:58:23 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:58:23 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:58:23 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:58:23 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:58:23 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:58:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:58:23 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:23 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:23 symfony [info] {sfFilter} render to client
+Aug 31 14:58:23 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:58:23 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:58:23 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 14:58:23 symfony [info] {sfTimerManager} Configuration 5.08 ms (12)
+Aug 31 14:58:23 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 14:58:23 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.80 ms (1)
+Aug 31 14:58:37 symfony [info] {sfContext} initialization
+Aug 31 14:58:37 symfony [info] {sfController} initialization
+Aug 31 14:58:37 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 14:58:37 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 14:58:37 symfony [info] {sfController} dispatch request
+Aug 31 14:58:37 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 14:58:37 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 14:58:37 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 14:58:37 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 14:58:37 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 14:58:37 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 14:58:37 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 14:58:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 14:58:37 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:37 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 14:58:37 symfony [info] {sfFilter} render to client
+Aug 31 14:58:37 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 14:58:37 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 14:58:37 symfony [info] {sfResponse} send content (21179 o)
+Aug 31 14:58:37 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 14:58:37 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 14:58:37 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 16.87 ms (1)
+Aug 31 15:14:25 symfony [info] {sfContext} initialization
+Aug 31 15:14:25 symfony [info] {sfController} initialization
+Aug 31 15:14:25 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:14:25 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:14:25 symfony [info] {sfController} dispatch request
+Aug 31 15:14:25 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:14:25 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:14:25 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:14:25 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:14:25 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:14:25 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:14:25 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:14:25 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:14:53 symfony [info] {sfContext} initialization
+Aug 31 15:14:53 symfony [info] {sfController} initialization
+Aug 31 15:14:53 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:14:53 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:14:53 symfony [info] {sfController} dispatch request
+Aug 31 15:14:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:14:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:14:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:14:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:14:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:14:53 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:14:53 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:14:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:00 symfony [info] {sfContext} initialization
+Aug 31 15:15:00 symfony [info] {sfController} initialization
+Aug 31 15:15:00 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:00 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:00 symfony [info] {sfController} dispatch request
+Aug 31 15:15:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:00 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:00 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:05 symfony [info] {sfContext} initialization
+Aug 31 15:15:05 symfony [info] {sfController} initialization
+Aug 31 15:15:05 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:05 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:05 symfony [info] {sfController} dispatch request
+Aug 31 15:15:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:16 symfony [info] {sfContext} initialization
+Aug 31 15:15:16 symfony [info] {sfController} initialization
+Aug 31 15:15:16 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:16 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:16 symfony [info] {sfController} dispatch request
+Aug 31 15:15:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:16 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:16 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:46 symfony [info] {sfContext} initialization
+Aug 31 15:15:46 symfony [info] {sfController} initialization
+Aug 31 15:15:46 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:46 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:46 symfony [info] {sfController} dispatch request
+Aug 31 15:15:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:46 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:46 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:47 symfony [info] {sfContext} initialization
+Aug 31 15:15:47 symfony [info] {sfController} initialization
+Aug 31 15:15:47 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:47 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:47 symfony [info] {sfController} dispatch request
+Aug 31 15:15:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:47 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:47 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:54 symfony [info] {sfContext} initialization
+Aug 31 15:15:54 symfony [info] {sfController} initialization
+Aug 31 15:15:54 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:54 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:54 symfony [info] {sfController} dispatch request
+Aug 31 15:15:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:54 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:54 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:15:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:15:54 symfony [info] {sfFilter} render to client
+Aug 31 15:15:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:15:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:15:54 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:15:54 symfony [info] {sfTimerManager} Configuration 5.82 ms (12)
+Aug 31 15:15:54 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:15:54 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 18.63 ms (1)
+Aug 31 15:15:56 symfony [info] {sfContext} initialization
+Aug 31 15:15:56 symfony [info] {sfController} initialization
+Aug 31 15:15:56 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:15:56 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:15:56 symfony [info] {sfController} dispatch request
+Aug 31 15:15:56 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:15:56 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:15:56 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:15:56 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:15:56 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:15:56 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:15:56 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:15:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:15:56 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:15:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:15:56 symfony [info] {sfFilter} render to client
+Aug 31 15:15:56 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:15:56 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:15:56 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:15:56 symfony [info] {sfTimerManager} Configuration 5.28 ms (12)
+Aug 31 15:15:56 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:15:56 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 18.57 ms (1)
+Aug 31 15:16:28 symfony [info] {sfContext} initialization
+Aug 31 15:16:28 symfony [info] {sfController} initialization
+Aug 31 15:16:28 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:16:28 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:16:28 symfony [info] {sfController} dispatch request
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:16:28 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:16:28 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:16:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:16:28 symfony [info] {sfFilter} render to client
+Aug 31 15:16:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:16:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:16:28 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:16:28 symfony [info] {sfTimerManager} Configuration 5.32 ms (12)
+Aug 31 15:16:28 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.22 ms (1)
+Aug 31 15:16:28 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 22.12 ms (1)
+Aug 31 15:16:28 symfony [info] {sfContext} initialization
+Aug 31 15:16:28 symfony [info] {sfController} initialization
+Aug 31 15:16:28 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:16:28 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:16:28 symfony [info] {sfController} dispatch request
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:16:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:16:28 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:16:28 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:16:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:16:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:16:29 symfony [info] {sfFilter} render to client
+Aug 31 15:16:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:16:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:16:29 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:16:29 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 15:16:29 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:16:29 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 18.92 ms (1)
+Aug 31 15:17:15 symfony [info] {sfContext} initialization
+Aug 31 15:17:15 symfony [info] {sfController} initialization
+Aug 31 15:17:15 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:17:15 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:17:15 symfony [info] {sfController} dispatch request
+Aug 31 15:17:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:17:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:17:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:17:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:17:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:17:15 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:17:15 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:17:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:17:15 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:15 symfony [info] {sfFilter} render to client
+Aug 31 15:17:15 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:17:15 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:17:15 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:17:15 symfony [info] {sfTimerManager} Configuration 5.17 ms (12)
+Aug 31 15:17:15 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:17:15 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.12 ms (1)
+Aug 31 15:17:16 symfony [info] {sfContext} initialization
+Aug 31 15:17:16 symfony [info] {sfController} initialization
+Aug 31 15:17:16 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:17:16 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:17:16 symfony [info] {sfController} dispatch request
+Aug 31 15:17:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:17:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:17:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:17:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:17:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:17:16 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:17:16 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:17:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:17:16 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:16 symfony [info] {sfFilter} render to client
+Aug 31 15:17:16 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:17:16 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:17:16 symfony [info] {sfResponse} send content (21176 o)
+Aug 31 15:17:16 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 15:17:16 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:17:16 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.74 ms (1)
+Aug 31 15:17:18 symfony [info] {sfContext} initialization
+Aug 31 15:17:18 symfony [info] {sfController} initialization
+Aug 31 15:17:18 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:17:18 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:17:18 symfony [info] {sfController} dispatch request
+Aug 31 15:17:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:17:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:17:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:17:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:17:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:17:18 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:17:18 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:17:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:17:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:18 symfony [info] {sfFilter} render to client
+Aug 31 15:17:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:17:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:17:18 symfony [info] {sfResponse} send content (20959 o)
+Aug 31 15:17:18 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 15:17:18 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 15:17:18 symfony [info] {sfTimerManager} View "Success" for "main/index" 16.36 ms (1)
+Aug 31 15:17:19 symfony [info] {sfContext} initialization
+Aug 31 15:17:19 symfony [info] {sfController} initialization
+Aug 31 15:17:19 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:17:19 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:17:19 symfony [info] {sfController} dispatch request
+Aug 31 15:17:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:17:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:17:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:17:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:17:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:17:19 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:17:19 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:17:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:17:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:17:19 symfony [info] {sfFilter} render to client
+Aug 31 15:17:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:17:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:17:19 symfony [info] {sfResponse} send content (21177 o)
+Aug 31 15:17:19 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 15:17:19 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:17:19 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.17 ms (1)
+Aug 31 15:17:38 symfony [info] {sfContext} initialization
+Aug 31 15:17:38 symfony [info] {sfController} initialization
+Aug 31 15:17:38 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:17:38 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:17:38 symfony [info] {sfController} dispatch request
+Aug 31 15:17:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:17:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:17:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:17:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:17:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:17:38 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:17:38 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:17:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:17:38 symfony [err] {sfConfigurationException} The route "api_documentation_page" does not exist.
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/documentation/api/:q"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/about"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/download"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/documentation/manual"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/documentation/api"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/trac"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/:module"
+Aug 31 15:18:21 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 15:18:21 symfony [info] {sfContext} initialization
+Aug 31 15:18:21 symfony [info] {sfController} initialization
+Aug 31 15:18:21 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:18:21 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:18:21 symfony [info] {sfController} dispatch request
+Aug 31 15:18:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:18:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:18:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:18:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:18:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:18:21 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:18:21 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:18:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:18:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:21 symfony [info] {sfFilter} render to client
+Aug 31 15:18:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:18:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:18:21 symfony [info] {sfResponse} send content (24641 o)
+Aug 31 15:18:21 symfony [info] {sfTimerManager} Configuration 34.16 ms (13)
+Aug 31 15:18:21 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:18:21 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.75 ms (1)
+Aug 31 15:18:27 symfony [info] {sfContext} initialization
+Aug 31 15:18:27 symfony [info] {sfController} initialization
+Aug 31 15:18:27 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:18:27 symfony [info] {sfRequest} request parameters array (  'q' => 'default-sep-Doctrine_Record_Iterator.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:18:27 symfony [info] {sfController} dispatch request
+Aug 31 15:18:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:18:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:18:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:18:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:18:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:18:27 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:18:27 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:18:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:18:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:27 symfony [info] {sfFilter} render to client
+Aug 31 15:18:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:18:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:18:27 symfony [info] {sfResponse} send content (41477 o)
+Aug 31 15:18:27 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 15:18:27 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:18:27 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 24.51 ms (1)
+Aug 31 15:18:42 symfony [info] {sfContext} initialization
+Aug 31 15:18:42 symfony [info] {sfController} initialization
+Aug 31 15:18:42 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:18:42 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:18:42 symfony [info] {sfController} dispatch request
+Aug 31 15:18:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:18:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:18:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:18:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:18:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:18:42 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:18:42 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:18:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:18:42 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:18:42 symfony [info] {sfFilter} render to client
+Aug 31 15:18:42 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:18:42 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:18:42 symfony [info] {sfResponse} send content (21545 o)
+Aug 31 15:18:42 symfony [info] {sfTimerManager} Configuration 5.04 ms (12)
+Aug 31 15:18:42 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:18:42 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 17.76 ms (1)
+Aug 31 15:20:34 symfony [info] {sfContext} initialization
+Aug 31 15:20:34 symfony [info] {sfController} initialization
+Aug 31 15:20:34 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:20:34 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:20:34 symfony [info] {sfController} dispatch request
+Aug 31 15:20:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:20:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:20:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:20:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:20:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:20:34 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:20:34 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:20:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:20:34 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:20:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:20:34 symfony [info] {sfFilter} render to client
+Aug 31 15:20:34 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:20:34 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:20:34 symfony [info] {sfResponse} send content (21537 o)
+Aug 31 15:20:34 symfony [info] {sfTimerManager} Configuration 5.33 ms (12)
+Aug 31 15:20:34 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:20:34 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 31.58 ms (1)
+Aug 31 15:22:39 symfony [info] {sfContext} initialization
+Aug 31 15:22:39 symfony [info] {sfController} initialization
+Aug 31 15:22:39 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:22:39 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:22:39 symfony [info] {sfController} dispatch request
+Aug 31 15:22:39 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:22:39 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:22:39 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:22:39 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:22:39 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:22:39 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:22:39 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:22:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:22:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:22:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:22:40 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:22:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:22:40 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:22:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:22:40 symfony [info] {sfFilter} render to client
+Aug 31 15:22:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:22:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:22:40 symfony [info] {sfResponse} send content (23119 o)
+Aug 31 15:22:40 symfony [info] {sfTimerManager} Configuration 5.42 ms (12)
+Aug 31 15:22:40 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:22:40 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.41 ms (1)
+Aug 31 15:22:40 symfony [info] {sfTimerManager} Partial "global/_header" 0.65 ms (1)
+Aug 31 15:22:40 symfony [info] {sfTimerManager} Partial "global/_menu" 1.35 ms (1)
+Aug 31 15:22:41 symfony [info] {sfContext} initialization
+Aug 31 15:22:41 symfony [info] {sfController} initialization
+Aug 31 15:22:41 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:22:41 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:22:41 symfony [info] {sfController} dispatch request
+Aug 31 15:22:41 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:22:41 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:22:41 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:22:41 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:22:41 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:22:41 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:22:41 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:22:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:22:41 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:22:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:22:41 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:22:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:22:41 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:22:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:22:41 symfony [info] {sfFilter} render to client
+Aug 31 15:22:41 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:22:41 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:22:41 symfony [info] {sfResponse} send content (23119 o)
+Aug 31 15:22:41 symfony [info] {sfTimerManager} Configuration 6.14 ms (12)
+Aug 31 15:22:41 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:22:41 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 22.79 ms (1)
+Aug 31 15:22:41 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:22:41 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:23:28 symfony [info] {sfContext} initialization
+Aug 31 15:23:28 symfony [info] {sfController} initialization
+Aug 31 15:23:28 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:23:28 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:23:28 symfony [info] {sfController} dispatch request
+Aug 31 15:23:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:23:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:23:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:23:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:23:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:23:29 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:23:29 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:23:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:29 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:23:29 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:23:29 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:23:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:23:29 symfony [info] {sfFilter} render to client
+Aug 31 15:23:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:23:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:23:29 symfony [info] {sfResponse} send content (23898 o)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} Configuration 27.16 ms (13)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 42.21 ms (1)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:23:29 symfony [info] {sfTimerManager} Partial "global/_footer" 0.46 ms (1)
+Aug 31 15:23:31 symfony [info] {sfContext} initialization
+Aug 31 15:23:31 symfony [info] {sfController} initialization
+Aug 31 15:23:31 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:23:31 symfony [info] {sfRequest} request parameters array (  'q' => 'default-sep-Doctrine_Record_Iterator.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:23:31 symfony [info] {sfController} dispatch request
+Aug 31 15:23:31 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:23:31 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:23:31 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:23:31 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:23:31 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:23:31 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:23:31 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:23:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:23:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:31 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:23:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:23:31 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:23:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:23:31 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:23:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:23:31 symfony [info] {sfFilter} render to client
+Aug 31 15:23:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:23:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:23:31 symfony [info] {sfResponse} send content (43829 o)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 45.56 ms (1)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} Partial "global/_header" 0.79 ms (1)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} Partial "global/_menu" 1.66 ms (1)
+Aug 31 15:23:31 symfony [info] {sfTimerManager} Partial "global/_footer" 0.53 ms (1)
+Aug 31 15:23:35 symfony [info] {sfContext} initialization
+Aug 31 15:23:35 symfony [info] {sfController} initialization
+Aug 31 15:23:35 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:23:35 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:23:35 symfony [info] {sfController} dispatch request
+Aug 31 15:23:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:23:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:23:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:23:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:23:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:23:35 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:23:35 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:23:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:23:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:23:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:23:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:23:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:23:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:23:35 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:23:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:23:35 symfony [info] {sfFilter} render to client
+Aug 31 15:23:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:23:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:23:35 symfony [info] {sfResponse} send content (23956 o)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} Configuration 5.50 ms (12)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.52 ms (1)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.30 ms (1)
+Aug 31 15:23:35 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:26:13 symfony [info] {sfContext} initialization
+Aug 31 15:26:13 symfony [info] {sfController} initialization
+Aug 31 15:26:13 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:26:13 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:26:13 symfony [info] {sfController} dispatch request
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:26:14 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:26:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:26:14 symfony [info] {sfFilter} render to client
+Aug 31 15:26:14 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:26:14 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:26:14 symfony [info] {sfResponse} send content (23956 o)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} Configuration 6.07 ms (12)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 46.93 ms (1)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} Partial "global/_header" 0.82 ms (1)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} Partial "global/_menu" 2.20 ms (1)
+Aug 31 15:26:14 symfony [info] {sfTimerManager} Partial "global/_footer" 0.57 ms (1)
+Aug 31 15:26:14 symfony [info] {sfContext} initialization
+Aug 31 15:26:14 symfony [info] {sfController} initialization
+Aug 31 15:26:14 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:26:14 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:26:14 symfony [info] {sfController} dispatch request
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:26:14 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:26:14 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:26:14 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:26:14 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:26:14 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:26:15 symfony [info] {sfFilter} render to client
+Aug 31 15:26:15 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:26:15 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:26:15 symfony [info] {sfResponse} send content (23955 o)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.45 ms (1)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} Partial "global/_menu" 1.30 ms (1)
+Aug 31 15:26:15 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:26:15 symfony [info] {sfContext} initialization
+Aug 31 15:26:15 symfony [info] {sfController} initialization
+Aug 31 15:26:15 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:26:15 symfony [info] {sfRequest} request parameters array (  'q' => 'default-sep-Doctrine_Record_Iterator.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:26:15 symfony [info] {sfController} dispatch request
+Aug 31 15:26:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:26:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:26:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:26:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:26:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:26:15 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:26:15 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:26:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:26:16 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:16 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:26:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:26:16 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:26:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:26:16 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:26:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:26:16 symfony [info] {sfFilter} render to client
+Aug 31 15:26:16 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:26:16 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:26:16 symfony [info] {sfResponse} send content (38238 o)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} Configuration 5.02 ms (12)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 37.80 ms (1)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} Partial "global/_header" 0.79 ms (1)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} Partial "global/_menu" 1.67 ms (1)
+Aug 31 15:26:16 symfony [info] {sfTimerManager} Partial "global/_footer" 0.53 ms (1)
+Aug 31 15:26:19 symfony [info] {sfContext} initialization
+Aug 31 15:26:19 symfony [info] {sfController} initialization
+Aug 31 15:26:19 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:26:19 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:26:19 symfony [info] {sfController} dispatch request
+Aug 31 15:26:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:26:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:26:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:26:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:26:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:26:19 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:26:19 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:26:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:26:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:19 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:26:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:26:19 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:26:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:26:19 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:26:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:26:19 symfony [info] {sfFilter} render to client
+Aug 31 15:26:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:26:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:26:19 symfony [info] {sfResponse} send content (23956 o)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.59 ms (1)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} Partial "global/_header" 0.75 ms (1)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:26:19 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:26:21 symfony [info] {sfContext} initialization
+Aug 31 15:26:21 symfony [info] {sfController} initialization
+Aug 31 15:26:21 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:26:21 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:26:21 symfony [info] {sfController} dispatch request
+Aug 31 15:26:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:26:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:26:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:26:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:26:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:26:21 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:26:21 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:26:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:26:21 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:26:21 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:26:21 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:26:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:26:21 symfony [info] {sfFilter} render to client
+Aug 31 15:26:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:26:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:26:21 symfony [info] {sfResponse} send content (23956 o)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} Configuration 5.30 ms (12)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.98 ms (1)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} Partial "global/_menu" 1.30 ms (1)
+Aug 31 15:26:21 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:27:01 symfony [info] {sfContext} initialization
+Aug 31 15:27:01 symfony [info] {sfController} initialization
+Aug 31 15:27:01 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:01 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:01 symfony [info] {sfController} dispatch request
+Aug 31 15:27:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:01 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:01 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:01 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:01 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:01 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:01 symfony [info] {sfFilter} render to client
+Aug 31 15:27:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:01 symfony [info] {sfResponse} send content (23593 o)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} Configuration 5.30 ms (12)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.61 ms (1)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} Partial "global/_header" 0.70 ms (1)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:27:01 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:27:02 symfony [info] {sfContext} initialization
+Aug 31 15:27:02 symfony [info] {sfController} initialization
+Aug 31 15:27:02 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:02 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:02 symfony [info] {sfController} dispatch request
+Aug 31 15:27:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:02 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:02 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:02 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:02 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:02 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:02 symfony [info] {sfFilter} render to client
+Aug 31 15:27:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:02 symfony [info] {sfResponse} send content (23593 o)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} Configuration 5.17 ms (12)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 19.76 ms (1)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} Partial "global/_menu" 1.39 ms (1)
+Aug 31 15:27:02 symfony [info] {sfTimerManager} Partial "global/_footer" 0.45 ms (1)
+Aug 31 15:27:05 symfony [info] {sfContext} initialization
+Aug 31 15:27:05 symfony [info] {sfController} initialization
+Aug 31 15:27:05 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:05 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:05 symfony [info] {sfController} dispatch request
+Aug 31 15:27:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:05 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:05 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:05 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:05 symfony [info] {sfFilter} render to client
+Aug 31 15:27:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:05 symfony [info] {sfResponse} send content (23593 o)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} Configuration 5.31 ms (12)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.21 ms (1)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:27:05 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:27:09 symfony [info] {sfContext} initialization
+Aug 31 15:27:09 symfony [info] {sfController} initialization
+Aug 31 15:27:09 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:09 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:09 symfony [info] {sfController} dispatch request
+Aug 31 15:27:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:09 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:09 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:10 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:10 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:10 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:10 symfony [info] {sfFilter} render to client
+Aug 31 15:27:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:10 symfony [info] {sfResponse} send content (23593 o)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.09 ms (1)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} Partial "global/_menu" 1.63 ms (1)
+Aug 31 15:27:10 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:27:11 symfony [info] {sfContext} initialization
+Aug 31 15:27:11 symfony [info] {sfController} initialization
+Aug 31 15:27:11 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:27:11 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:27:11 symfony [info] {sfController} dispatch request
+Aug 31 15:27:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:11 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:27:11 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:27:11 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:27:11 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:11 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:11 symfony [info] {sfFilter} render to client
+Aug 31 15:27:11 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:11 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:11 symfony [info] {sfResponse} send content (22538 o)
+Aug 31 15:27:11 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 15:27:11 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 15:27:11 symfony [info] {sfTimerManager} View "Success" for "main/index" 19.57 ms (1)
+Aug 31 15:27:11 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:27:11 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:27:13 symfony [info] {sfContext} initialization
+Aug 31 15:27:13 symfony [info] {sfController} initialization
+Aug 31 15:27:13 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:13 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:13 symfony [info] {sfController} dispatch request
+Aug 31 15:27:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:13 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:13 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:13 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:13 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:13 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:13 symfony [info] {sfFilter} render to client
+Aug 31 15:27:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:13 symfony [info] {sfResponse} send content (23534 o)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 19.93 ms (1)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:27:13 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:27:18 symfony [info] {sfContext} initialization
+Aug 31 15:27:18 symfony [info] {sfController} initialization
+Aug 31 15:27:18 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:27:18 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:27:18 symfony [info] {sfController} dispatch request
+Aug 31 15:27:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:27:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:27:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:27:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:27:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:27:18 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:27:18 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:27:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:27:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:27:18 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:27:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:27:18 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:27:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:27:18 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:27:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:27:18 symfony [info] {sfFilter} render to client
+Aug 31 15:27:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:27:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:27:18 symfony [info] {sfResponse} send content (23534 o)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} Configuration 5.92 ms (12)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.71 ms (1)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} Partial "global/_header" 0.84 ms (1)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:27:18 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:28:02 symfony [info] {sfContext} initialization
+Aug 31 15:28:02 symfony [info] {sfController} initialization
+Aug 31 15:28:02 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:28:02 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:28:02 symfony [info] {sfController} dispatch request
+Aug 31 15:28:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:28:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:28:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:28:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:28:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:28:02 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:28:02 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:28:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:28:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:28:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:28:02 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:28:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:28:02 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:28:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:28:02 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:28:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:28:02 symfony [info] {sfFilter} render to client
+Aug 31 15:28:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:28:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:28:02 symfony [info] {sfResponse} send content (23897 o)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} Configuration 5.19 ms (12)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.68 ms (1)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:28:02 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:28:09 symfony [info] {sfContext} initialization
+Aug 31 15:28:09 symfony [info] {sfController} initialization
+Aug 31 15:28:09 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:28:09 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:28:09 symfony [info] {sfController} dispatch request
+Aug 31 15:28:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:28:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:28:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:28:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:28:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:28:09 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:28:09 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:28:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:28:09 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:28:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:28:09 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:28:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:28:09 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:28:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:28:09 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:28:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:28:09 symfony [info] {sfFilter} render to client
+Aug 31 15:28:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:28:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:28:09 symfony [info] {sfResponse} send content (23897 o)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} Configuration 5.00 ms (12)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.21 ms (1)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:28:09 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:30:22 symfony [info] {sfContext} initialization
+Aug 31 15:30:22 symfony [info] {sfController} initialization
+Aug 31 15:30:22 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:30:22 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:30:22 symfony [info] {sfController} dispatch request
+Aug 31 15:30:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:30:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:30:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:30:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:30:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:30:22 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:30:22 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:30:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:30:39 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:30:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:30:39 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:30:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:30:39 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:30:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:30:39 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:30:39 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:30:39 symfony [info] {sfFilter} render to client
+Aug 31 15:30:39 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:30:39 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:30:39 symfony [info] {sfResponse} send content (818780 o)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} Configuration 5.19 ms (12)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 16794.28 ms (1)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} Partial "global/_menu" 1.94 ms (1)
+Aug 31 15:30:39 symfony [info] {sfTimerManager} Partial "global/_footer" 0.51 ms (1)
+Aug 31 15:31:00 symfony [info] {sfContext} initialization
+Aug 31 15:31:00 symfony [info] {sfController} initialization
+Aug 31 15:31:00 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:31:00 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:31:00 symfony [info] {sfController} dispatch request
+Aug 31 15:31:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:31:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:31:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:31:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:31:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:31:00 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:31:00 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:31:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:31:18 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:31:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:31:18 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:31:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:31:18 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:31:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:31:18 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:31:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:31:18 symfony [info] {sfFilter} render to client
+Aug 31 15:31:18 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:31:18 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:31:18 symfony [info] {sfResponse} send content (863561 o)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 18312.86 ms (1)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:31:19 symfony [info] {sfTimerManager} Partial "global/_footer" 0.46 ms (1)
+Aug 31 15:31:34 symfony [info] {sfContext} initialization
+Aug 31 15:31:34 symfony [info] {sfController} initialization
+Aug 31 15:31:34 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:31:34 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:31:34 symfony [info] {sfController} dispatch request
+Aug 31 15:31:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:31:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:31:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:31:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:31:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:31:34 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:31:34 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:31:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:31:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:31:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:31:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:31:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:31:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:31:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:31:35 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:31:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:31:35 symfony [info] {sfFilter} render to client
+Aug 31 15:31:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:31:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:31:35 symfony [info] {sfResponse} send content (208225 o)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} Configuration 5.06 ms (12)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 464.84 ms (1)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:31:35 symfony [info] {sfTimerManager} Partial "global/_footer" 0.48 ms (1)
+Aug 31 15:32:10 symfony [info] {sfContext} initialization
+Aug 31 15:32:10 symfony [info] {sfController} initialization
+Aug 31 15:32:10 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:32:10 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:32:10 symfony [info] {sfController} dispatch request
+Aug 31 15:32:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:32:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:32:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:32:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:32:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:32:10 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:32:10 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:32:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:32:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:32:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:32:10 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:32:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:32:10 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:32:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:32:10 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:32:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:32:10 symfony [info] {sfFilter} render to client
+Aug 31 15:32:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:32:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:32:10 symfony [info] {sfResponse} send content (208225 o)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} Configuration 5.57 ms (12)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 448.47 ms (1)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:32:10 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:32:12 symfony [info] {sfContext} initialization
+Aug 31 15:32:12 symfony [info] {sfController} initialization
+Aug 31 15:32:12 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:32:12 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:32:12 symfony [info] {sfController} dispatch request
+Aug 31 15:32:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:32:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:32:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:32:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:32:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:32:12 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:32:12 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:32:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:32:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:32:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:32:12 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:32:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:32:12 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:32:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:32:12 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:32:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:32:12 symfony [info] {sfFilter} render to client
+Aug 31 15:32:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:32:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:32:12 symfony [info] {sfResponse} send content (70684 o)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} Configuration 5.00 ms (12)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.42 ms (1)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:32:12 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:34:41 symfony [info] {sfContext} initialization
+Aug 31 15:34:41 symfony [info] {sfController} initialization
+Aug 31 15:34:41 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:34:41 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:34:41 symfony [info] {sfController} dispatch request
+Aug 31 15:34:41 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:34:41 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:34:41 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:34:41 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:34:41 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:34:41 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:34:41 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:34:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:34:41 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:41 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:34:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:34:41 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:34:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:34:41 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:34:41 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:34:41 symfony [info] {sfFilter} render to client
+Aug 31 15:34:41 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:34:41 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:34:41 symfony [info] {sfResponse} send content (23941 o)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} Configuration 6.41 ms (12)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.09 ms (1)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:34:41 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:34:42 symfony [info] {sfContext} initialization
+Aug 31 15:34:42 symfony [info] {sfController} initialization
+Aug 31 15:34:42 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:34:42 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:34:42 symfony [info] {sfController} dispatch request
+Aug 31 15:34:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:34:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:34:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:34:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:34:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:34:42 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:34:42 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:34:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:34:42 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:42 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:34:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:34:42 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:34:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:34:42 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:34:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:34:42 symfony [info] {sfFilter} render to client
+Aug 31 15:34:42 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:34:42 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:34:42 symfony [info] {sfResponse} send content (23940 o)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} Configuration 5.16 ms (12)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.74 ms (1)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:34:42 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:34:43 symfony [info] {sfContext} initialization
+Aug 31 15:34:43 symfony [info] {sfController} initialization
+Aug 31 15:34:43 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:34:43 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:34:43 symfony [info] {sfController} dispatch request
+Aug 31 15:34:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:34:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:34:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:34:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:34:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:34:43 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:34:43 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:34:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:34:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:43 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:34:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:34:43 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:34:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:34:43 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:34:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:34:43 symfony [info] {sfFilter} render to client
+Aug 31 15:34:43 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:34:43 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:34:43 symfony [info] {sfResponse} send content (23941 o)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.02 ms (1)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:34:43 symfony [info] {sfTimerManager} Partial "global/_footer" 0.44 ms (1)
+Aug 31 15:34:53 symfony [info] {sfContext} initialization
+Aug 31 15:34:53 symfony [info] {sfController} initialization
+Aug 31 15:34:53 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:34:53 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:34:53 symfony [info] {sfController} dispatch request
+Aug 31 15:34:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:34:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:34:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:34:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:34:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:34:53 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:34:53 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:34:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:34:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:34:53 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:34:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:34:53 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:34:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:34:53 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:34:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:34:53 symfony [info] {sfFilter} render to client
+Aug 31 15:34:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:34:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:34:53 symfony [info] {sfResponse} send content (23940 o)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} Configuration 5.48 ms (12)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.18 ms (1)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 21.54 ms (1)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:34:53 symfony [info] {sfTimerManager} Partial "global/_footer" 0.47 ms (1)
+Aug 31 15:35:04 symfony [info] {sfContext} initialization
+Aug 31 15:35:04 symfony [info] {sfController} initialization
+Aug 31 15:35:04 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:35:04 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:35:04 symfony [info] {sfController} dispatch request
+Aug 31 15:35:04 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:35:04 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:35:04 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:35:04 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:35:04 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:35:04 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:35:04 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:35:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:35:04 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:04 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:35:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:35:04 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:35:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:35:04 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:35:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:35:04 symfony [info] {sfFilter} render to client
+Aug 31 15:35:04 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:35:04 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:35:04 symfony [info] {sfResponse} send content (70855 o)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} Configuration 6.71 ms (12)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 174.86 ms (1)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} Partial "global/_header" 0.67 ms (1)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} Partial "global/_menu" 1.39 ms (1)
+Aug 31 15:35:04 symfony [info] {sfTimerManager} Partial "global/_footer" 0.67 ms (1)
+Aug 31 15:35:09 symfony [info] {sfContext} initialization
+Aug 31 15:35:10 symfony [info] {sfController} initialization
+Aug 31 15:35:10 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:35:10 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:35:10 symfony [info] {sfController} dispatch request
+Aug 31 15:35:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:35:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:35:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:35:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:35:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:35:10 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:35:10 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:35:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:35:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:10 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:35:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:35:10 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:35:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:35:10 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:35:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:35:10 symfony [info] {sfFilter} render to client
+Aug 31 15:35:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:35:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:35:10 symfony [info] {sfResponse} send content (104299 o)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 255.90 ms (1)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} Partial "global/_menu" 1.45 ms (1)
+Aug 31 15:35:10 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:35:13 symfony [info] {sfContext} initialization
+Aug 31 15:35:13 symfony [info] {sfController} initialization
+Aug 31 15:35:13 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:35:13 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:35:13 symfony [info] {sfController} dispatch request
+Aug 31 15:35:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:35:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:35:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:35:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:35:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:35:13 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:35:13 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:35:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:35:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:13 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:35:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:35:13 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:35:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:35:13 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:35:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:35:13 symfony [info] {sfFilter} render to client
+Aug 31 15:35:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:35:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:35:13 symfony [info] {sfResponse} send content (70855 o)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} Configuration 5.61 ms (12)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 145.68 ms (1)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} Partial "global/_header" 0.70 ms (1)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} Partial "global/_menu" 1.36 ms (1)
+Aug 31 15:35:13 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:35:57 symfony [info] {sfContext} initialization
+Aug 31 15:35:57 symfony [info] {sfController} initialization
+Aug 31 15:35:57 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:35:57 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:35:57 symfony [info] {sfController} dispatch request
+Aug 31 15:35:57 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:35:57 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:35:57 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:35:57 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:35:57 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:35:57 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:35:57 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:35:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:35:57 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:35:57 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:35:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:35:57 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:35:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:35:57 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:35:57 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:35:57 symfony [info] {sfFilter} render to client
+Aug 31 15:35:57 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:35:57 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:35:57 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} Configuration 113.54 ms (13)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 232.59 ms (1)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} Partial "global/_menu" 1.30 ms (1)
+Aug 31 15:35:57 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:36:01 symfony [info] {sfContext} initialization
+Aug 31 15:36:01 symfony [info] {sfController} initialization
+Aug 31 15:36:01 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:36:01 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:36:01 symfony [info] {sfController} dispatch request
+Aug 31 15:36:01 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:36:01 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:36:01 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:36:01 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:36:01 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:36:01 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:36:01 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:36:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:36:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:36:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:36:01 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:36:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:36:01 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:36:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:36:01 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:36:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:36:01 symfony [info] {sfFilter} render to client
+Aug 31 15:36:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:36:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:36:01 symfony [info] {sfResponse} send content (104449 o)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 270.73 ms (1)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:36:01 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:37:12 symfony [info] {sfContext} initialization
+Aug 31 15:37:12 symfony [info] {sfController} initialization
+Aug 31 15:37:12 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:37:12 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:37:12 symfony [info] {sfController} dispatch request
+Aug 31 15:37:12 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:37:12 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:37:12 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:37:12 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:37:12 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:37:12 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:37:12 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:37:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:37:12 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:12 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:37:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:37:12 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:37:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:37:12 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:37:12 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:37:12 symfony [info] {sfFilter} render to client
+Aug 31 15:37:12 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:37:12 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:37:12 symfony [info] {sfResponse} send content (104449 o)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 278.13 ms (1)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:37:12 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:37:24 symfony [info] {sfContext} initialization
+Aug 31 15:37:24 symfony [info] {sfController} initialization
+Aug 31 15:37:24 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:37:24 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:37:24 symfony [info] {sfController} dispatch request
+Aug 31 15:37:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:37:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:37:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:37:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:37:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:37:24 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:37:24 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:37:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:24 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:37:24 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:37:24 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:37:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:37:24 symfony [info] {sfFilter} render to client
+Aug 31 15:37:24 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:37:24 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:37:24 symfony [info] {sfResponse} send content (104449 o)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} Configuration 6.10 ms (12)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 245.36 ms (1)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:37:24 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:37:35 symfony [info] {sfContext} initialization
+Aug 31 15:37:35 symfony [info] {sfController} initialization
+Aug 31 15:37:35 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:37:35 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:37:35 symfony [info] {sfController} dispatch request
+Aug 31 15:37:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:37:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:37:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:37:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:37:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:37:35 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:37:35 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:37:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:37:35 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:37:35 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:37:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:37:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:37:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:37:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:37:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:37:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:37:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:37:35 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:37:35 symfony [info] {sfFilter} render to client
+Aug 31 15:37:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:37:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:37:35 symfony [info] {sfResponse} send content (67983 o)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} Configuration 5.70 ms (12)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} Action "manual/index" 102.25 ms (1)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} View "Success" for "manual/index" 68.76 ms (1)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.78 ms (1)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.74 ms (1)
+Aug 31 15:37:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.50 ms (1)
+Aug 31 15:37:38 symfony [info] {sfContext} initialization
+Aug 31 15:37:38 symfony [info] {sfController} initialization
+Aug 31 15:37:38 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:37:38 symfony [info] {sfRequest} request parameters array (  'chapter' => 'mapping-relations',  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:37:38 symfony [info] {sfController} dispatch request
+Aug 31 15:37:38 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:37:38 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:37:38 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:37:38 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:37:38 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:37:38 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:37:38 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:37:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:37:38 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:37:38 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:37:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:37:38 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:37:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:37:38 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:37:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:37:38 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:37:38 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:37:38 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:37:38 symfony [info] {sfFilter} render to client
+Aug 31 15:37:38 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:37:38 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:37:38 symfony [info] {sfResponse} send content (224731 o)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} Action "manual/index" 98.68 ms (1)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} View "Success" for "manual/index" 325.79 ms (1)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 48.05 ms (1)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} Partial "global/_header" 0.80 ms (1)
+Aug 31 15:37:38 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:37:44 symfony [info] {sfContext} initialization
+Aug 31 15:37:44 symfony [info] {sfController} initialization
+Aug 31 15:37:44 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:37:44 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:37:44 symfony [info] {sfController} dispatch request
+Aug 31 15:37:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:37:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:37:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:37:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:37:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:37:44 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:37:44 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:37:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:37:44 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:37:44 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:37:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:37:44 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:37:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:37:44 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:37:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:37:44 symfony [info] {sfFilter} render to client
+Aug 31 15:37:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:37:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:37:44 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} Configuration 5.38 ms (12)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 189.44 ms (1)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} Partial "global/_header" 0.69 ms (1)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} Partial "global/_menu" 1.87 ms (1)
+Aug 31 15:37:44 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:38:32 symfony [info] {sfContext} initialization
+Aug 31 15:38:32 symfony [info] {sfController} initialization
+Aug 31 15:38:32 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:38:32 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:38:32 symfony [info] {sfController} dispatch request
+Aug 31 15:38:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:38:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:38:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:38:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:38:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:38:32 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:38:32 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:38:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:38:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:32 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:38:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:38:32 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:38:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:38:32 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:38:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:38:32 symfony [info] {sfFilter} render to client
+Aug 31 15:38:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:38:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:38:32 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 137.97 ms (1)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:38:32 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:38:40 symfony [info] {sfContext} initialization
+Aug 31 15:38:40 symfony [info] {sfController} initialization
+Aug 31 15:38:40 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:38:40 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:38:40 symfony [info] {sfController} dispatch request
+Aug 31 15:38:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:38:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:38:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:38:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:38:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:38:40 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:38:40 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:38:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:38:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:40 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:38:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:38:40 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:38:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:38:40 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:38:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:38:40 symfony [info] {sfFilter} render to client
+Aug 31 15:38:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:38:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:38:40 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 138.58 ms (1)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} Partial "global/_menu" 1.61 ms (1)
+Aug 31 15:38:40 symfony [info] {sfTimerManager} Partial "global/_footer" 0.45 ms (1)
+Aug 31 15:38:48 symfony [info] {sfContext} initialization
+Aug 31 15:38:48 symfony [info] {sfController} initialization
+Aug 31 15:38:48 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:38:48 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:38:48 symfony [info] {sfController} dispatch request
+Aug 31 15:38:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:38:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:38:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:38:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:38:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:38:48 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:38:48 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:38:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:38:48 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:38:48 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:38:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:38:48 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:38:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:38:48 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:38:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:38:48 symfony [info] {sfFilter} render to client
+Aug 31 15:38:48 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:38:48 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:38:48 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} Configuration 5.12 ms (12)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.39 ms (1)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:38:48 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:39:08 symfony [info] {sfContext} initialization
+Aug 31 15:39:08 symfony [info] {sfController} initialization
+Aug 31 15:39:08 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:08 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:08 symfony [info] {sfController} dispatch request
+Aug 31 15:39:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:08 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:08 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:08 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:08 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:08 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:08 symfony [info] {sfFilter} render to client
+Aug 31 15:39:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:08 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} Configuration 5.49 ms (12)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.20 ms (1)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 135.72 ms (1)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:39:08 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:39:24 symfony [info] {sfContext} initialization
+Aug 31 15:39:24 symfony [info] {sfController} initialization
+Aug 31 15:39:24 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:24 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:24 symfony [info] {sfController} dispatch request
+Aug 31 15:39:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:24 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:24 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:24 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:24 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:24 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:24 symfony [info] {sfFilter} render to client
+Aug 31 15:39:24 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:24 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:24 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} Configuration 5.67 ms (12)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.21 ms (1)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:39:24 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:39:33 symfony [info] {sfContext} initialization
+Aug 31 15:39:33 symfony [info] {sfController} initialization
+Aug 31 15:39:33 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:33 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:33 symfony [info] {sfController} dispatch request
+Aug 31 15:39:33 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:33 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:33 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:33 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:33 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:33 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:33 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:33 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:33 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:33 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:33 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:33 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:33 symfony [info] {sfFilter} render to client
+Aug 31 15:39:33 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:33 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:33 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.52 ms (1)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:39:33 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:39:43 symfony [info] {sfContext} initialization
+Aug 31 15:39:43 symfony [info] {sfController} initialization
+Aug 31 15:39:43 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:43 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:43 symfony [info] {sfController} dispatch request
+Aug 31 15:39:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:43 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:43 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:43 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:43 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:43 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:43 symfony [info] {sfFilter} render to client
+Aug 31 15:39:43 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:43 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:43 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} Configuration 5.43 ms (12)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 137.16 ms (1)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} Partial "global/_header" 0.69 ms (1)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} Partial "global/_menu" 1.36 ms (1)
+Aug 31 15:39:43 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:39:46 symfony [info] {sfContext} initialization
+Aug 31 15:39:46 symfony [info] {sfController} initialization
+Aug 31 15:39:46 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:46 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:46 symfony [info] {sfController} dispatch request
+Aug 31 15:39:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:46 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:46 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:47 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:47 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:47 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:47 symfony [info] {sfFilter} render to client
+Aug 31 15:39:47 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:47 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:47 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} Configuration 5.48 ms (12)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 378.13 ms (1)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} Partial "global/_header" 0.91 ms (1)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} Partial "global/_menu" 1.67 ms (1)
+Aug 31 15:39:47 symfony [info] {sfTimerManager} Partial "global/_footer" 0.82 ms (1)
+Aug 31 15:39:57 symfony [info] {sfContext} initialization
+Aug 31 15:39:58 symfony [info] {sfController} initialization
+Aug 31 15:39:58 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:39:58 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:39:58 symfony [info] {sfController} dispatch request
+Aug 31 15:39:58 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:39:58 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:39:58 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:39:58 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:39:58 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:39:58 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:39:58 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:39:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:39:58 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:39:58 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:39:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:39:58 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:39:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:39:58 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:39:58 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:39:58 symfony [info] {sfFilter} render to client
+Aug 31 15:39:58 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:39:58 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:39:58 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} Configuration 5.37 ms (12)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.05 ms (1)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:39:58 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:40:15 symfony [info] {sfContext} initialization
+Aug 31 15:40:15 symfony [info] {sfController} initialization
+Aug 31 15:40:15 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:40:15 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:40:15 symfony [info] {sfController} dispatch request
+Aug 31 15:40:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:40:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:40:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:40:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:40:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:40:15 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:40:15 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:40:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:40:15 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:15 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:40:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:40:15 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:40:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:40:15 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:40:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:40:15 symfony [info] {sfFilter} render to client
+Aug 31 15:40:15 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:40:15 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:40:15 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} Configuration 5.26 ms (12)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 135.93 ms (1)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} Partial "global/_menu" 1.57 ms (1)
+Aug 31 15:40:15 symfony [info] {sfTimerManager} Partial "global/_footer" 0.58 ms (1)
+Aug 31 15:40:28 symfony [info] {sfContext} initialization
+Aug 31 15:40:28 symfony [info] {sfController} initialization
+Aug 31 15:40:28 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:40:28 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:40:28 symfony [info] {sfController} dispatch request
+Aug 31 15:40:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:40:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:40:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:40:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:40:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:40:28 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:40:28 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:40:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:40:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:28 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:40:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:40:28 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:40:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:40:28 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:40:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:40:28 symfony [info] {sfFilter} render to client
+Aug 31 15:40:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:40:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:40:28 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} Configuration 5.34 ms (12)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.47 ms (1)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:40:28 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:40:35 symfony [info] {sfContext} initialization
+Aug 31 15:40:35 symfony [info] {sfController} initialization
+Aug 31 15:40:35 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:40:35 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:40:35 symfony [info] {sfController} dispatch request
+Aug 31 15:40:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:40:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:40:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:40:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:40:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:40:35 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:40:35 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:40:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:40:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:40:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:40:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:40:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:40:35 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:40:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:40:35 symfony [info] {sfFilter} render to client
+Aug 31 15:40:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:40:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:40:35 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} Configuration 5.40 ms (12)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.69 ms (1)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.59 ms (1)
+Aug 31 15:40:35 symfony [info] {sfTimerManager} Partial "global/_footer" 0.44 ms (1)
+Aug 31 15:40:46 symfony [info] {sfContext} initialization
+Aug 31 15:40:46 symfony [info] {sfController} initialization
+Aug 31 15:40:46 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:40:46 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:40:46 symfony [info] {sfController} dispatch request
+Aug 31 15:40:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:40:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:40:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:40:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:40:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:40:46 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:40:46 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:40:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:40:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:46 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:40:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:40:46 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:40:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:40:46 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:40:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:40:46 symfony [info] {sfFilter} render to client
+Aug 31 15:40:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:40:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:40:46 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} Configuration 5.72 ms (12)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 137.21 ms (1)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:40:46 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:40:54 symfony [info] {sfContext} initialization
+Aug 31 15:40:54 symfony [info] {sfController} initialization
+Aug 31 15:40:54 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:40:54 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:40:54 symfony [info] {sfController} dispatch request
+Aug 31 15:40:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:40:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:40:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:40:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:40:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:40:54 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:40:54 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:40:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:40:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:40:54 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:40:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:40:54 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:40:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:40:54 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:40:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:40:54 symfony [info] {sfFilter} render to client
+Aug 31 15:40:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:40:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:40:54 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} Configuration 5.09 ms (12)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 137.01 ms (1)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:40:54 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:41:05 symfony [info] {sfContext} initialization
+Aug 31 15:41:05 symfony [info] {sfController} initialization
+Aug 31 15:41:05 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:05 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:05 symfony [info] {sfController} dispatch request
+Aug 31 15:41:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:05 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:05 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:05 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:05 symfony [info] {sfFilter} render to client
+Aug 31 15:41:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:05 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} Configuration 5.58 ms (12)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.88 ms (1)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:41:05 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:41:10 symfony [info] {sfContext} initialization
+Aug 31 15:41:10 symfony [info] {sfController} initialization
+Aug 31 15:41:10 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:10 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:10 symfony [info] {sfController} dispatch request
+Aug 31 15:41:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:10 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:10 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:10 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:10 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:10 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:10 symfony [info] {sfFilter} render to client
+Aug 31 15:41:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:10 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} Configuration 6.15 ms (12)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.30 ms (1)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} Partial "global/_menu" 1.36 ms (1)
+Aug 31 15:41:10 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:41:17 symfony [info] {sfContext} initialization
+Aug 31 15:41:17 symfony [info] {sfController} initialization
+Aug 31 15:41:17 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:17 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:17 symfony [info] {sfController} dispatch request
+Aug 31 15:41:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:17 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:17 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:17 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:17 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:17 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:17 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:17 symfony [info] {sfFilter} render to client
+Aug 31 15:41:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:17 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} Configuration 6.21 ms (12)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.17 ms (1)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.28 ms (1)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:41:17 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:41:22 symfony [info] {sfContext} initialization
+Aug 31 15:41:22 symfony [info] {sfController} initialization
+Aug 31 15:41:22 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:22 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:22 symfony [info] {sfController} dispatch request
+Aug 31 15:41:22 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:22 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:22 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:22 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:22 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:22 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:22 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:22 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:22 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:22 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:22 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:22 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:22 symfony [info] {sfFilter} render to client
+Aug 31 15:41:22 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:22 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:22 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} Configuration 5.10 ms (12)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.81 ms (1)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} Partial "global/_menu" 1.30 ms (1)
+Aug 31 15:41:22 symfony [info] {sfTimerManager} Partial "global/_footer" 0.45 ms (1)
+Aug 31 15:41:29 symfony [info] {sfContext} initialization
+Aug 31 15:41:29 symfony [info] {sfController} initialization
+Aug 31 15:41:29 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:29 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:29 symfony [info] {sfController} dispatch request
+Aug 31 15:41:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:29 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:29 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:29 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:29 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:29 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:29 symfony [info] {sfFilter} render to client
+Aug 31 15:41:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:29 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} Configuration 5.30 ms (12)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.04 ms (1)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:41:29 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:41:40 symfony [info] {sfContext} initialization
+Aug 31 15:41:40 symfony [info] {sfController} initialization
+Aug 31 15:41:40 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:40 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:40 symfony [info] {sfController} dispatch request
+Aug 31 15:41:40 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:40 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:40 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:40 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:40 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:40 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:40 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:40 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:40 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:40 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:40 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:40 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:40 symfony [info] {sfFilter} render to client
+Aug 31 15:41:40 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:40 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:40 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} Configuration 5.17 ms (12)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.52 ms (1)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:41:40 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:41:49 symfony [info] {sfContext} initialization
+Aug 31 15:41:49 symfony [info] {sfController} initialization
+Aug 31 15:41:49 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:49 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:49 symfony [info] {sfController} dispatch request
+Aug 31 15:41:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:49 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:49 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:49 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:49 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:49 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:49 symfony [info] {sfFilter} render to client
+Aug 31 15:41:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:49 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} Configuration 5.47 ms (12)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 135.30 ms (1)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:41:49 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:41:54 symfony [info] {sfContext} initialization
+Aug 31 15:41:54 symfony [info] {sfController} initialization
+Aug 31 15:41:54 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:41:54 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:41:54 symfony [info] {sfController} dispatch request
+Aug 31 15:41:54 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:41:54 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:41:54 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:41:54 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:41:54 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:41:54 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:41:54 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:41:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:41:54 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:41:54 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:41:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:41:54 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:41:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:41:54 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:41:54 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:41:54 symfony [info] {sfFilter} render to client
+Aug 31 15:41:54 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:41:54 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:41:54 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} Configuration 5.42 ms (12)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.17 ms (1)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.85 ms (1)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:41:54 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:42:05 symfony [info] {sfContext} initialization
+Aug 31 15:42:05 symfony [info] {sfController} initialization
+Aug 31 15:42:05 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:05 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:05 symfony [info] {sfController} dispatch request
+Aug 31 15:42:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:05 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:05 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:05 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:05 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:05 symfony [info] {sfFilter} render to client
+Aug 31 15:42:05 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:05 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:05 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 135.97 ms (1)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:42:05 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:42:10 symfony [info] {sfContext} initialization
+Aug 31 15:42:10 symfony [info] {sfController} initialization
+Aug 31 15:42:10 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:10 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:10 symfony [info] {sfController} dispatch request
+Aug 31 15:42:10 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:10 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:10 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:10 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:10 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:10 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:10 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:10 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:10 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:10 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:10 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:10 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:10 symfony [info] {sfFilter} render to client
+Aug 31 15:42:10 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:10 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:10 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.19 ms (1)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.91 ms (1)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} Partial "global/_menu" 1.54 ms (1)
+Aug 31 15:42:10 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:42:15 symfony [info] {sfContext} initialization
+Aug 31 15:42:15 symfony [info] {sfController} initialization
+Aug 31 15:42:15 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:15 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:15 symfony [info] {sfController} dispatch request
+Aug 31 15:42:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:15 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:15 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:15 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:15 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:15 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:15 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:15 symfony [info] {sfFilter} render to client
+Aug 31 15:42:15 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:15 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:15 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.98 ms (1)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:42:15 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:42:18 symfony [info] {sfContext} initialization
+Aug 31 15:42:18 symfony [info] {sfController} initialization
+Aug 31 15:42:18 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:42:18 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:42:18 symfony [info] {sfController} dispatch request
+Aug 31 15:42:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:18 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:42:19 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:42:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:42:19 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:42:19 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:42:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:42:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:42:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:42:19 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:19 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:19 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:42:19 symfony [info] {sfFilter} render to client
+Aug 31 15:42:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:19 symfony [info] {sfResponse} send content (67948 o)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} Configuration 5.51 ms (12)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} Action "manual/index" 177.57 ms (1)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} View "Success" for "manual/index" 66.36 ms (1)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.70 ms (1)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} Partial "global/_header" 0.68 ms (1)
+Aug 31 15:42:19 symfony [info] {sfTimerManager} Partial "global/_menu" 1.32 ms (1)
+Aug 31 15:42:21 symfony [info] {sfContext} initialization
+Aug 31 15:42:21 symfony [info] {sfController} initialization
+Aug 31 15:42:21 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:21 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:21 symfony [info] {sfController} dispatch request
+Aug 31 15:42:21 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:21 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:21 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:21 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:21 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:21 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:21 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:21 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:21 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:21 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:21 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:21 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:21 symfony [info] {sfFilter} render to client
+Aug 31 15:42:21 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:21 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:21 symfony [info] {sfResponse} send content (71006 o)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} Configuration 5.27 ms (12)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 136.86 ms (1)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:42:21 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:42:44 symfony [info] {sfContext} initialization
+Aug 31 15:42:44 symfony [info] {sfController} initialization
+Aug 31 15:42:44 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:44 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:44 symfony [info] {sfController} dispatch request
+Aug 31 15:42:44 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:44 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:44 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:44 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:44 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:44 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:44 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:44 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:44 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:44 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:44 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:44 symfony [info] {sfFilter} render to client
+Aug 31 15:42:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:44 symfony [info] {sfResponse} send content (71005 o)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.99 ms (1)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:42:44 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:42:46 symfony [info] {sfContext} initialization
+Aug 31 15:42:46 symfony [info] {sfController} initialization
+Aug 31 15:42:46 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:42:46 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:42:46 symfony [info] {sfController} dispatch request
+Aug 31 15:42:46 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:46 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:46 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:46 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:46 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:46 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:42:46 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:42:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:42:46 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:42:46 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:42:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:42:46 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:42:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:42:46 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:46 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:46 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:46 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:42:46 symfony [info] {sfFilter} render to client
+Aug 31 15:42:46 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:46 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:46 symfony [info] {sfResponse} send content (67948 o)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} Configuration 5.23 ms (12)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} Action "manual/index" 96.59 ms (1)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} View "Success" for "manual/index" 68.69 ms (1)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.89 ms (1)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} Partial "global/_header" 0.85 ms (1)
+Aug 31 15:42:46 symfony [info] {sfTimerManager} Partial "global/_menu" 1.49 ms (1)
+Aug 31 15:42:50 symfony [info] {sfContext} initialization
+Aug 31 15:42:50 symfony [info] {sfController} initialization
+Aug 31 15:42:50 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:42:50 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:42:50 symfony [info] {sfController} dispatch request
+Aug 31 15:42:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:42:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:42:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:42:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:42:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:42:50 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:42:50 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:42:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:42:51 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:42:51 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:42:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:42:51 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:42:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:42:51 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:42:51 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:42:51 symfony [info] {sfFilter} render to client
+Aug 31 15:42:51 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:42:51 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:42:51 symfony [info] {sfResponse} send content (70980 o)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} Configuration 4.99 ms (12)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 132.22 ms (1)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:42:51 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:43:00 symfony [info] {sfContext} initialization
+Aug 31 15:43:00 symfony [info] {sfController} initialization
+Aug 31 15:43:00 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:43:00 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Cache-sep-Doctrine_Cache.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:43:00 symfony [info] {sfController} dispatch request
+Aug 31 15:43:00 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:43:00 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:43:00 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:43:00 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:43:00 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:43:00 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:43:00 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:43:00 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:43:01 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:01 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:43:01 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:43:01 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:43:01 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:43:01 symfony [info] {sfFilter} render to client
+Aug 31 15:43:01 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:43:01 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:43:01 symfony [info] {sfResponse} send content (137652 o)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} Configuration 4.97 ms (12)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 419.98 ms (1)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:43:01 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:43:24 symfony [info] {sfContext} initialization
+Aug 31 15:43:24 symfony [info] {sfController} initialization
+Aug 31 15:43:24 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:43:24 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Cache-sep-Doctrine_Cache.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:43:24 symfony [info] {sfController} dispatch request
+Aug 31 15:43:24 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:43:24 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:43:24 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:43:24 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:43:24 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:43:24 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:43:24 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:43:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:43:24 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:24 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:43:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:43:24 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:43:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:43:24 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:43:24 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:43:24 symfony [info] {sfFilter} render to client
+Aug 31 15:43:24 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:43:24 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:43:24 symfony [info] {sfResponse} send content (137652 o)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} Configuration 6.32 ms (12)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.18 ms (1)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 407.74 ms (1)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:43:24 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:43:48 symfony [info] {sfContext} initialization
+Aug 31 15:43:48 symfony [info] {sfController} initialization
+Aug 31 15:43:48 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:43:48 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Cache-sep-Doctrine_Cache.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:43:48 symfony [info] {sfController} dispatch request
+Aug 31 15:43:48 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:43:48 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:43:48 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:43:48 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:43:48 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:43:48 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:43:48 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:43:48 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:43:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:43:49 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:43:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:43:49 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:43:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:43:49 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:43:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:43:49 symfony [info] {sfFilter} render to client
+Aug 31 15:43:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:43:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:43:49 symfony [info] {sfResponse} send content (137652 o)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} Configuration 5.05 ms (12)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 391.11 ms (1)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:43:49 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:44:27 symfony [info] {sfContext} initialization
+Aug 31 15:44:27 symfony [info] {sfController} initialization
+Aug 31 15:44:27 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:44:27 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Cache-sep-Doctrine_Cache.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:44:27 symfony [info] {sfController} dispatch request
+Aug 31 15:44:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:44:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:44:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:44:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:44:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:44:27 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:44:27 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:44:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:44:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:44:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:44:27 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:44:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:44:27 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:44:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:44:27 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:44:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:44:27 symfony [info] {sfFilter} render to client
+Aug 31 15:44:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:44:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:44:27 symfony [info] {sfResponse} send content (137652 o)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 395.31 ms (1)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} Partial "global/_header" 0.59 ms (1)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:44:27 symfony [info] {sfTimerManager} Partial "global/_footer" 0.38 ms (1)
+Aug 31 15:44:43 symfony [info] {sfContext} initialization
+Aug 31 15:44:43 symfony [info] {sfController} initialization
+Aug 31 15:44:43 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:44:43 symfony [info] {sfRequest} request parameters array (  'q' => 'Doctrine-sep-Doctrine_Cache-sep-Doctrine_Cache.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:44:43 symfony [info] {sfController} dispatch request
+Aug 31 15:44:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:44:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:44:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:44:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:44:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:44:43 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:44:43 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:44:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:44:44 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:44:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:44:44 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:44:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:44:44 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:44:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:44:44 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:44:44 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:44:44 symfony [info] {sfFilter} render to client
+Aug 31 15:44:44 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:44:44 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:44:44 symfony [info] {sfResponse} send content (137652 o)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 392.85 ms (1)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} Partial "global/_menu" 1.29 ms (1)
+Aug 31 15:44:44 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:45:05 symfony [info] {sfContext} initialization
+Aug 31 15:45:05 symfony [info] {sfController} initialization
+Aug 31 15:45:05 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:45:05 symfony [info] {sfRequest} request parameters array (  'q' => '-sep--sep-Doctrine-sep-Doctrine_Adapter.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:45:05 symfony [info] {sfController} dispatch request
+Aug 31 15:45:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:45:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:45:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:45:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:45:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:45:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:45:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:45:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:45:06 symfony [info] {sfContext} initialization
+Aug 31 15:45:06 symfony [info] {sfController} initialization
+Aug 31 15:45:06 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:45:06 symfony [info] {sfRequest} request parameters array (  'q' => '-sep--sep-Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:45:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:45:06 symfony [info] {sfFilter} render to client
+Aug 31 15:45:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:45:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:45:06 symfony [info] {sfResponse} send content (130163 o)
+Aug 31 15:45:06 symfony [info] {sfController} dispatch request
+Aug 31 15:45:06 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:45:06 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:45:06 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:45:06 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:45:06 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:45:06 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:45:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:45:06 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:45:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:45:06 symfony [info] {sfFilter} render to client
+Aug 31 15:45:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:45:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:45:06 symfony [info] {sfResponse} send content (104592 o)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} Configuration 5.31 ms (12)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 223.45 ms (1)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 15:45:06 symfony [info] {sfTimerManager} Partial "global/_footer" 0.39 ms (1)
+Aug 31 15:50:17 symfony [info] {sfContext} initialization
+Aug 31 15:50:17 symfony [info] {sfController} initialization
+Aug 31 15:50:17 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:50:17 symfony [info] {sfRequest} request parameters array (  'q' => '-sep--sep-Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:50:17 symfony [info] {sfController} dispatch request
+Aug 31 15:50:17 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:50:17 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:50:17 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:50:17 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:50:17 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:50:17 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:50:17 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:50:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:50:17 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:17 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:50:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:50:17 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:50:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:50:17 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:50:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:50:17 symfony [info] {sfFilter} render to client
+Aug 31 15:50:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:50:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:50:17 symfony [info] {sfResponse} send content (104592 o)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} Configuration 5.24 ms (12)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 256.45 ms (1)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} Partial "global/_menu" 1.74 ms (1)
+Aug 31 15:50:17 symfony [info] {sfTimerManager} Partial "global/_footer" 0.46 ms (1)
+Aug 31 15:50:27 symfony [info] {sfContext} initialization
+Aug 31 15:50:27 symfony [info] {sfController} initialization
+Aug 31 15:50:27 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:50:27 symfony [info] {sfRequest} request parameters array (  'q' => '-sep--sep-Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:50:27 symfony [info] {sfController} dispatch request
+Aug 31 15:50:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:50:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:50:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:50:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:50:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:50:27 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:50:27 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:50:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:50:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:27 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:50:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:50:27 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:50:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:50:27 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:50:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:50:27 symfony [info] {sfFilter} render to client
+Aug 31 15:50:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:50:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:50:27 symfony [info] {sfResponse} send content (104592 o)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} Configuration 5.60 ms (12)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 226.95 ms (1)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:50:27 symfony [info] {sfTimerManager} Partial "global/_footer" 0.42 ms (1)
+Aug 31 15:50:52 symfony [info] {sfContext} initialization
+Aug 31 15:50:52 symfony [info] {sfController} initialization
+Aug 31 15:50:52 symfony [info] {sfRouting} match route [api_documentation_page] "/documentation/api/:q"
+Aug 31 15:50:52 symfony [info] {sfRequest} request parameters array (  'q' => '-sep--sep-Doctrine-sep-Doctrine_Access.html',  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:50:52 symfony [info] {sfController} dispatch request
+Aug 31 15:50:52 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:50:52 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:50:52 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:50:52 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:50:52 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:50:52 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:50:52 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:50:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:50:52 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:50:52 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:50:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:50:52 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:50:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:50:52 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:50:52 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:50:52 symfony [info] {sfFilter} render to client
+Aug 31 15:50:52 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:50:52 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:50:52 symfony [info] {sfResponse} send content (104592 o)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} Configuration 5.04 ms (12)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 222.89 ms (1)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} Partial "global/_menu" 1.37 ms (1)
+Aug 31 15:50:52 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:51:04 symfony [info] {sfContext} initialization
+Aug 31 15:51:04 symfony [info] {sfController} initialization
+Aug 31 15:51:04 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:51:04 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:51:04 symfony [info] {sfController} dispatch request
+Aug 31 15:51:04 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:51:04 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:51:04 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:51:04 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:51:04 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:51:04 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:51:04 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:51:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:51:04 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:51:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:51:04 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:51:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:51:04 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:51:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:51:04 symfony [info] {sfFilter} render to client
+Aug 31 15:51:04 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:51:04 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:51:04 symfony [info] {sfResponse} send content (22582 o)
+Aug 31 15:51:04 symfony [info] {sfTimerManager} Configuration 5.14 ms (12)
+Aug 31 15:51:04 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 15:51:04 symfony [info] {sfTimerManager} View "Success" for "main/index" 18.74 ms (1)
+Aug 31 15:51:04 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:51:04 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:51:09 symfony [info] {sfContext} initialization
+Aug 31 15:51:09 symfony [info] {sfController} initialization
+Aug 31 15:51:09 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:51:09 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:51:09 symfony [info] {sfController} dispatch request
+Aug 31 15:51:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:51:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:51:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:51:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:51:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:51:09 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:51:09 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:51:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:51:09 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:51:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:51:09 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:51:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:51:09 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:51:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:51:09 symfony [info] {sfFilter} render to client
+Aug 31 15:51:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:51:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:51:09 symfony [info] {sfResponse} send content (22521 o)
+Aug 31 15:51:09 symfony [info] {sfTimerManager} Configuration 5.13 ms (12)
+Aug 31 15:51:09 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 15:51:09 symfony [info] {sfTimerManager} View "Success" for "main/index" 18.18 ms (1)
+Aug 31 15:51:09 symfony [info] {sfTimerManager} Partial "global/_header" 0.62 ms (1)
+Aug 31 15:51:09 symfony [info] {sfTimerManager} Partial "global/_menu" 1.40 ms (1)
+Aug 31 15:52:03 symfony [info] {sfContext} initialization
+Aug 31 15:52:03 symfony [info] {sfController} initialization
+Aug 31 15:52:03 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:52:03 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:52:03 symfony [info] {sfController} dispatch request
+Aug 31 15:52:03 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:03 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:03 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:03 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:03 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:03 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:52:03 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:52:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:52:03 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:03 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:03 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:03 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:03 symfony [info] {sfFilter} render to client
+Aug 31 15:52:03 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:03 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:03 symfony [info] {sfResponse} send content (22517 o)
+Aug 31 15:52:03 symfony [info] {sfTimerManager} Configuration 5.50 ms (12)
+Aug 31 15:52:03 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 15:52:03 symfony [info] {sfTimerManager} View "Success" for "main/index" 19.07 ms (1)
+Aug 31 15:52:03 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:52:03 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:52:04 symfony [info] {sfContext} initialization
+Aug 31 15:52:04 symfony [info] {sfController} initialization
+Aug 31 15:52:04 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:04 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:04 symfony [info] {sfController} dispatch request
+Aug 31 15:52:04 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:04 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:04 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:04 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:04 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:04 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:04 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:04 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:04 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:04 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:04 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:04 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:04 symfony [info] {sfFilter} render to client
+Aug 31 15:52:04 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:04 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:04 symfony [info] {sfResponse} send content (23679 o)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} Configuration 5.15 ms (12)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 19.90 ms (1)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:52:04 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:52:05 symfony [info] {sfContext} initialization
+Aug 31 15:52:05 symfony [info] {sfController} initialization
+Aug 31 15:52:05 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:05 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:05 symfony [info] {sfController} dispatch request
+Aug 31 15:52:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:05 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:05 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:06 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:06 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:06 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:06 symfony [info] {sfFilter} render to client
+Aug 31 15:52:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:06 symfony [info] {sfResponse} send content (23679 o)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.31 ms (1)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:52:06 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:52:08 symfony [info] {sfContext} initialization
+Aug 31 15:52:08 symfony [info] {sfController} initialization
+Aug 31 15:52:08 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:52:08 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:52:08 symfony [info] {sfController} dispatch request
+Aug 31 15:52:08 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:08 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:08 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:08 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:08 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:08 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:52:08 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:52:08 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:08 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:08 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:08 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:08 symfony [info] {sfFilter} render to client
+Aug 31 15:52:08 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:08 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:08 symfony [info] {sfResponse} send content (22517 o)
+Aug 31 15:52:08 symfony [info] {sfTimerManager} Configuration 5.07 ms (12)
+Aug 31 15:52:08 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 15:52:08 symfony [info] {sfTimerManager} View "Success" for "main/index" 19.45 ms (1)
+Aug 31 15:52:08 symfony [info] {sfTimerManager} Partial "global/_header" 0.75 ms (1)
+Aug 31 15:52:08 symfony [info] {sfTimerManager} Partial "global/_menu" 1.37 ms (1)
+Aug 31 15:52:09 symfony [info] {sfContext} initialization
+Aug 31 15:52:09 symfony [info] {sfController} initialization
+Aug 31 15:52:09 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:52:09 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:52:09 symfony [info] {sfController} dispatch request
+Aug 31 15:52:09 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:09 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:09 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:09 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:09 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:09 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:52:09 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:52:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:52:09 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:09 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:09 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:09 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:09 symfony [info] {sfFilter} render to client
+Aug 31 15:52:09 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:09 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:09 symfony [info] {sfResponse} send content (22517 o)
+Aug 31 15:52:09 symfony [info] {sfTimerManager} Configuration 5.25 ms (12)
+Aug 31 15:52:09 symfony [info] {sfTimerManager} Action "main/index" 0.15 ms (1)
+Aug 31 15:52:09 symfony [info] {sfTimerManager} View "Success" for "main/index" 20.32 ms (1)
+Aug 31 15:52:09 symfony [info] {sfTimerManager} Partial "global/_header" 0.65 ms (1)
+Aug 31 15:52:09 symfony [info] {sfTimerManager} Partial "global/_menu" 3.10 ms (1)
+Aug 31 15:52:11 symfony [info] {sfContext} initialization
+Aug 31 15:52:11 symfony [info] {sfController} initialization
+Aug 31 15:52:11 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:52:11 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:52:11 symfony [info] {sfController} dispatch request
+Aug 31 15:52:11 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:11 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:11 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:11 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:11 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:11 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:52:11 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:52:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:52:11 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:52:11 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:52:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:52:11 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:52:11 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:11 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:11 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:11 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:52:11 symfony [info] {sfFilter} render to client
+Aug 31 15:52:11 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:11 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:11 symfony [info] {sfResponse} send content (67928 o)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} Configuration 5.47 ms (12)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} Action "manual/index" 171.64 ms (1)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} View "Success" for "manual/index" 68.39 ms (1)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.77 ms (1)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} Partial "global/_header" 0.71 ms (1)
+Aug 31 15:52:11 symfony [info] {sfTimerManager} Partial "global/_menu" 1.36 ms (1)
+Aug 31 15:52:13 symfony [info] {sfContext} initialization
+Aug 31 15:52:13 symfony [info] {sfController} initialization
+Aug 31 15:52:13 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:13 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:13 symfony [info] {sfController} dispatch request
+Aug 31 15:52:13 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:13 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:13 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:13 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:13 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:13 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:13 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:13 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:13 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:13 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:13 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:13 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:13 symfony [info] {sfFilter} render to client
+Aug 31 15:52:13 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:13 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:13 symfony [info] {sfResponse} send content (23699 o)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} Configuration 8.84 ms (12)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 22.00 ms (1)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} Partial "global/_menu" 1.44 ms (1)
+Aug 31 15:52:13 symfony [info] {sfTimerManager} Partial "global/_footer" 0.55 ms (1)
+Aug 31 15:52:16 symfony [info] {sfContext} initialization
+Aug 31 15:52:16 symfony [info] {sfController} initialization
+Aug 31 15:52:16 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:16 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:16 symfony [info] {sfController} dispatch request
+Aug 31 15:52:16 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:16 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:16 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:16 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:16 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:16 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:16 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:16 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:16 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:16 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:16 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:16 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:16 symfony [info] {sfFilter} render to client
+Aug 31 15:52:16 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:16 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:16 symfony [info] {sfResponse} send content (23699 o)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} Configuration 5.47 ms (12)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.40 ms (1)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} Partial "global/_header" 0.73 ms (1)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} Partial "global/_menu" 1.54 ms (1)
+Aug 31 15:52:16 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:52:19 symfony [info] {sfContext} initialization
+Aug 31 15:52:19 symfony [info] {sfController} initialization
+Aug 31 15:52:19 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:19 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:19 symfony [info] {sfController} dispatch request
+Aug 31 15:52:19 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:19 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:19 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:19 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:19 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:19 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:19 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:19 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:19 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:19 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:19 symfony [info] {sfFilter} render to client
+Aug 31 15:52:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:19 symfony [info] {sfResponse} send content (23699 o)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.97 ms (1)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} Partial "global/_header" 0.70 ms (1)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} Partial "global/_menu" 1.38 ms (1)
+Aug 31 15:52:19 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:52:20 symfony [info] {sfContext} initialization
+Aug 31 15:52:20 symfony [info] {sfController} initialization
+Aug 31 15:52:20 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:20 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:20 symfony [info] {sfController} dispatch request
+Aug 31 15:52:20 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:20 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:20 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:20 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:20 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:20 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:20 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:20 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:20 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:20 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:20 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:20 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:20 symfony [info] {sfFilter} render to client
+Aug 31 15:52:20 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:20 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:20 symfony [info] {sfResponse} send content (23699 o)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} Configuration 7.00 ms (12)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 20.15 ms (1)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} Partial "global/_header" 0.65 ms (1)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 15:52:20 symfony [info] {sfTimerManager} Partial "global/_footer" 0.43 ms (1)
+Aug 31 15:52:34 symfony [info] {sfContext} initialization
+Aug 31 15:52:34 symfony [info] {sfController} initialization
+Aug 31 15:52:34 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:34 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:34 symfony [info] {sfController} dispatch request
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:35 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:35 symfony [info] {sfFilter} render to client
+Aug 31 15:52:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:35 symfony [info] {sfResponse} send content (70976 o)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Configuration 5.35 ms (12)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 161.35 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.40 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 15:52:35 symfony [info] {sfContext} initialization
+Aug 31 15:52:35 symfony [info] {sfController} initialization
+Aug 31 15:52:35 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:52:35 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:52:35 symfony [info] {sfController} dispatch request
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:52:35 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:52:35 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:52:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:52:35 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:52:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:52:35 symfony [info] {sfFilter} render to client
+Aug 31 15:52:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:52:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:52:35 symfony [info] {sfResponse} send content (70976 o)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Configuration 5.29 ms (12)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 143.24 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_header" 0.66 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.39 ms (1)
+Aug 31 15:52:35 symfony [info] {sfTimerManager} Partial "global/_footer" 0.58 ms (1)
+Aug 31 15:53:26 symfony [info] {sfContext} initialization
+Aug 31 15:53:26 symfony [info] {sfController} initialization
+Aug 31 15:53:26 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:53:26 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:53:26 symfony [info] {sfController} dispatch request
+Aug 31 15:53:26 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:26 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:26 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:26 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:26 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:26 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:53:26 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:53:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:53:26 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:53:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:53:26 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:26 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:26 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:53:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:53:26 symfony [info] {sfFilter} render to client
+Aug 31 15:53:26 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:26 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:26 symfony [info] {sfResponse} send content (70973 o)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} Configuration 5.59 ms (12)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 187.10 ms (1)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} Partial "global/_header" 0.61 ms (1)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} Partial "global/_menu" 3.07 ms (1)
+Aug 31 15:53:26 symfony [info] {sfTimerManager} Partial "global/_footer" 0.46 ms (1)
+Aug 31 15:53:27 symfony [info] {sfContext} initialization
+Aug 31 15:53:27 symfony [info] {sfController} initialization
+Aug 31 15:53:27 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:53:27 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:53:27 symfony [info] {sfController} dispatch request
+Aug 31 15:53:28 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:28 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:28 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:28 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:28 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:28 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:53:28 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:53:28 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:53:28 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:53:28 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:28 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:28 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:28 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:28 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:53:28 symfony [info] {sfFilter} render to client
+Aug 31 15:53:28 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:28 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:28 symfony [info] {sfResponse} send content (67944 o)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} Configuration 6.33 ms (12)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} Action "manual/index" 99.03 ms (1)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} View "Success" for "manual/index" 67.38 ms (1)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.83 ms (1)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} Partial "global/_header" 0.71 ms (1)
+Aug 31 15:53:28 symfony [info] {sfTimerManager} Partial "global/_menu" 1.35 ms (1)
+Aug 31 15:53:29 symfony [info] {sfContext} initialization
+Aug 31 15:53:29 symfony [info] {sfController} initialization
+Aug 31 15:53:29 symfony [info] {sfRouting} match route [download] "/download"
+Aug 31 15:53:29 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'download',)
+Aug 31 15:53:29 symfony [info] {sfController} dispatch request
+Aug 31 15:53:29 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:29 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:29 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:29 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:29 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:29 symfony [info] {sfAction} call "mainActions->executeDownload()"
+Aug 31 15:53:29 symfony [info] {sfView} initialize view for "main/download"
+Aug 31 15:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/downloadSuccess.php"
+Aug 31 15:53:29 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:29 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:29 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:29 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:29 symfony [info] {sfFilter} render to client
+Aug 31 15:53:29 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:29 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:29 symfony [info] {sfResponse} send content (22604 o)
+Aug 31 15:53:29 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 15:53:29 symfony [info] {sfTimerManager} Action "main/download" 0.15 ms (1)
+Aug 31 15:53:29 symfony [info] {sfTimerManager} View "Success" for "main/download" 19.59 ms (1)
+Aug 31 15:53:29 symfony [info] {sfTimerManager} Partial "global/_header" 0.67 ms (1)
+Aug 31 15:53:29 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 15:53:30 symfony [info] {sfContext} initialization
+Aug 31 15:53:30 symfony [info] {sfController} initialization
+Aug 31 15:53:30 symfony [info] {sfRouting} match route [about] "/about"
+Aug 31 15:53:30 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'about',)
+Aug 31 15:53:30 symfony [info] {sfController} dispatch request
+Aug 31 15:53:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:30 symfony [info] {sfAction} call "mainActions->executeAbout()"
+Aug 31 15:53:30 symfony [info] {sfView} initialize view for "main/about"
+Aug 31 15:53:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/aboutSuccess.php"
+Aug 31 15:53:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:31 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:31 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:31 symfony [info] {sfFilter} render to client
+Aug 31 15:53:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:31 symfony [info] {sfResponse} send content (22545 o)
+Aug 31 15:53:31 symfony [info] {sfTimerManager} Configuration 5.45 ms (12)
+Aug 31 15:53:31 symfony [info] {sfTimerManager} Action "main/about" 0.15 ms (1)
+Aug 31 15:53:31 symfony [info] {sfTimerManager} View "Success" for "main/about" 19.07 ms (1)
+Aug 31 15:53:31 symfony [info] {sfTimerManager} Partial "global/_header" 0.70 ms (1)
+Aug 31 15:53:31 symfony [info] {sfTimerManager} Partial "global/_menu" 1.46 ms (1)
+Aug 31 15:53:32 symfony [info] {sfContext} initialization
+Aug 31 15:53:32 symfony [info] {sfController} initialization
+Aug 31 15:53:32 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 15:53:32 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 15:53:32 symfony [info] {sfController} dispatch request
+Aug 31 15:53:32 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:32 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:32 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:32 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:32 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:32 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 15:53:32 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 15:53:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 15:53:32 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:32 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:32 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:32 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:32 symfony [info] {sfFilter} render to client
+Aug 31 15:53:32 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:32 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:32 symfony [info] {sfResponse} send content (22522 o)
+Aug 31 15:53:32 symfony [info] {sfTimerManager} Configuration 6.32 ms (12)
+Aug 31 15:53:32 symfony [info] {sfTimerManager} Action "main/index" 0.17 ms (1)
+Aug 31 15:53:32 symfony [info] {sfTimerManager} View "Success" for "main/index" 22.10 ms (1)
+Aug 31 15:53:32 symfony [info] {sfTimerManager} Partial "global/_header" 0.80 ms (1)
+Aug 31 15:53:32 symfony [info] {sfTimerManager} Partial "global/_menu" 1.60 ms (1)
+Aug 31 15:53:34 symfony [info] {sfContext} initialization
+Aug 31 15:53:34 symfony [info] {sfController} initialization
+Aug 31 15:53:34 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:53:34 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:53:34 symfony [info] {sfController} dispatch request
+Aug 31 15:53:34 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:53:34 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:53:34 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:53:34 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:53:34 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:53:34 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:53:34 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:53:34 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:53:35 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:53:35 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:53:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:53:35 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:53:35 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:53:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:53:35 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:53:35 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:53:35 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:53:35 symfony [info] {sfFilter} render to client
+Aug 31 15:53:35 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:53:35 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:53:35 symfony [info] {sfResponse} send content (67929 o)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} Configuration 5.55 ms (12)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} Action "manual/index" 224.70 ms (1)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} View "Success" for "manual/index" 143.57 ms (1)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.89 ms (1)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} Partial "global/_header" 1.21 ms (1)
+Aug 31 15:53:35 symfony [info] {sfTimerManager} Partial "global/_menu" 1.48 ms (1)
+Aug 31 15:54:30 symfony [info] {sfContext} initialization
+Aug 31 15:54:30 symfony [info] {sfController} initialization
+Aug 31 15:54:30 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 15:54:30 symfony [info] {sfRequest} request parameters array (  'chapter' => 'working-with-objects',  'module' => 'manual',  'action' => 'index',)
+Aug 31 15:54:30 symfony [info] {sfController} dispatch request
+Aug 31 15:54:30 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:54:30 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:54:30 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:54:30 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:54:30 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:54:30 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 15:54:30 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 15:54:30 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 15:54:31 symfony [info] {PartialHelper} set slot "right"
+Aug 31 15:54:31 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 15:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 15:54:31 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 15:54:31 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:54:31 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:54:31 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:54:31 symfony [info] {PartialHelper} get slot "right"
+Aug 31 15:54:31 symfony [info] {sfFilter} render to client
+Aug 31 15:54:31 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:54:31 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:54:31 symfony [info] {sfResponse} send content (235913 o)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} Configuration 5.39 ms (12)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} Action "manual/index" 101.96 ms (1)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} View "Success" for "manual/index" 309.31 ms (1)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 51.40 ms (1)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 15:54:31 symfony [info] {sfTimerManager} Partial "global/_menu" 1.38 ms (1)
+Aug 31 15:54:43 symfony [info] {sfContext} initialization
+Aug 31 15:54:43 symfony [info] {sfController} initialization
+Aug 31 15:54:43 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:54:43 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:54:43 symfony [info] {sfController} dispatch request
+Aug 31 15:54:43 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:54:43 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:54:43 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:54:43 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:54:43 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:54:43 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:54:43 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:54:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:54:43 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:54:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:54:43 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:54:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:54:43 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:54:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:54:43 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:54:43 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:54:43 symfony [info] {sfFilter} render to client
+Aug 31 15:54:43 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:54:43 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:54:43 symfony [info] {sfResponse} send content (71009 o)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} Configuration 5.47 ms (12)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 149.82 ms (1)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} Partial "global/_header" 0.68 ms (1)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} Partial "global/_menu" 1.31 ms (1)
+Aug 31 15:54:43 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 15:55:18 symfony [info] {sfContext} initialization
+Aug 31 15:55:18 symfony [info] {sfController} initialization
+Aug 31 15:55:18 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 15:55:18 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 15:55:18 symfony [info] {sfController} dispatch request
+Aug 31 15:55:18 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 15:55:18 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 15:55:18 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 15:55:18 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 15:55:18 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 15:55:18 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 15:55:18 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 15:55:18 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 15:55:19 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:55:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 15:55:19 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 15:55:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 15:55:19 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 15:55:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 15:55:19 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 15:55:19 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 15:55:19 symfony [info] {sfFilter} render to client
+Aug 31 15:55:19 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 15:55:19 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 15:55:19 symfony [info] {sfResponse} send content (71009 o)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} Configuration 9.52 ms (12)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.16 ms (1)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 167.67 ms (1)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} Partial "global/_header" 0.65 ms (1)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} Partial "global/_menu" 1.44 ms (1)
+Aug 31 15:55:19 symfony [info] {sfTimerManager} Partial "global/_footer" 0.47 ms (1)
+Aug 31 16:08:47 symfony [info] {sfContext} initialization
+Aug 31 16:08:47 symfony [info] {sfController} initialization
+Aug 31 16:08:47 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 16:08:47 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 16:08:47 symfony [info] {sfController} dispatch request
+Aug 31 16:08:47 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:08:47 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:08:47 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:08:47 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:08:47 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:08:47 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 16:08:47 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 16:08:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 16:08:47 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 16:08:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 16:08:47 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:08:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:08:47 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:08:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:08:47 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 16:08:47 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 16:08:47 symfony [info] {sfFilter} render to client
+Aug 31 16:08:47 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:08:47 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:08:47 symfony [info] {sfResponse} send content (71010 o)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} Configuration 22.93 ms (12)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.15 ms (1)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 126.13 ms (1)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} Partial "global/_header" 0.60 ms (1)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 16:08:47 symfony [info] {sfTimerManager} Partial "global/_footer" 0.40 ms (1)
+Aug 31 16:08:49 symfony [info] {sfContext} initialization
+Aug 31 16:08:49 symfony [info] {sfController} initialization
+Aug 31 16:08:49 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 16:08:49 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 16:08:49 symfony [info] {sfController} dispatch request
+Aug 31 16:08:49 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:08:49 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:08:49 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:08:49 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:08:49 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:08:49 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 16:08:49 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 16:08:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 16:08:49 symfony [info] {PartialHelper} set slot "right"
+Aug 31 16:08:49 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 16:08:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 16:08:49 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:08:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:08:49 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:08:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:08:49 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:08:49 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:08:49 symfony [info] {PartialHelper} get slot "right"
+Aug 31 16:08:49 symfony [info] {sfFilter} render to client
+Aug 31 16:08:49 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:08:49 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:08:49 symfony [info] {sfResponse} send content (67949 o)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} Configuration 4.58 ms (11)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} Action "manual/index" 107.22 ms (1)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} View "Success" for "manual/index" 72.37 ms (1)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.92 ms (1)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} Partial "global/_header" 0.81 ms (1)
+Aug 31 16:08:49 symfony [info] {sfTimerManager} Partial "global/_menu" 1.47 ms (1)
+Aug 31 16:09:50 symfony [info] {sfContext} initialization
+Aug 31 16:09:50 symfony [info] {sfController} initialization
+Aug 31 16:09:50 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 16:09:50 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 16:09:50 symfony [info] {sfController} dispatch request
+Aug 31 16:09:50 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:09:50 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:09:50 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:09:50 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:09:50 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:09:50 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 16:09:50 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 16:09:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 16:09:50 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:09:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:09:50 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:09:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:09:50 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:09:50 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:09:50 symfony [info] {sfFilter} render to client
+Aug 31 16:09:50 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:09:50 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:09:50 symfony [info] {sfResponse} send content (22446 o)
+Aug 31 16:09:50 symfony [info] {sfTimerManager} Configuration 4.27 ms (11)
+Aug 31 16:09:50 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 16:09:50 symfony [info] {sfTimerManager} View "Success" for "main/index" 18.73 ms (1)
+Aug 31 16:09:50 symfony [info] {sfTimerManager} Partial "global/_header" 0.69 ms (1)
+Aug 31 16:09:50 symfony [info] {sfTimerManager} Partial "global/_menu" 1.38 ms (1)
+Aug 31 16:10:02 symfony [info] {sfContext} initialization
+Aug 31 16:10:02 symfony [info] {sfController} initialization
+Aug 31 16:10:02 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 16:10:02 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 16:10:02 symfony [info] {sfController} dispatch request
+Aug 31 16:10:02 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:10:02 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:10:02 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:10:02 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:10:02 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:10:02 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 16:10:02 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 16:10:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 16:10:02 symfony [info] {PartialHelper} set slot "right"
+Aug 31 16:10:02 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 16:10:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 16:10:02 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:02 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:10:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:10:02 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:10:02 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:10:02 symfony [info] {PartialHelper} get slot "right"
+Aug 31 16:10:02 symfony [info] {sfFilter} render to client
+Aug 31 16:10:02 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:10:02 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:10:02 symfony [info] {sfResponse} send content (67930 o)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} Configuration 4.34 ms (11)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} Action "manual/index" 98.41 ms (1)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} View "Success" for "manual/index" 68.54 ms (1)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.85 ms (1)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} Partial "global/_header" 0.71 ms (1)
+Aug 31 16:10:02 symfony [info] {sfTimerManager} Partial "global/_menu" 1.79 ms (1)
+Aug 31 16:10:05 symfony [info] {sfContext} initialization
+Aug 31 16:10:05 symfony [info] {sfController} initialization
+Aug 31 16:10:05 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 16:10:05 symfony [info] {sfRequest} request parameters array (  'chapter' => 'getting-started',  'module' => 'manual',  'action' => 'index',)
+Aug 31 16:10:05 symfony [info] {sfController} dispatch request
+Aug 31 16:10:05 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:10:05 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:10:05 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:10:05 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:10:05 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:10:05 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 16:10:05 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 16:10:05 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 16:10:06 symfony [info] {PartialHelper} set slot "right"
+Aug 31 16:10:06 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 16:10:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 16:10:06 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:06 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:10:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:10:06 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:10:06 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:10:06 symfony [info] {PartialHelper} get slot "right"
+Aug 31 16:10:06 symfony [info] {sfFilter} render to client
+Aug 31 16:10:06 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:10:06 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:10:06 symfony [info] {sfResponse} send content (169058 o)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} Configuration 4.31 ms (11)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} Action "manual/index" 98.17 ms (1)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} View "Success" for "manual/index" 154.48 ms (1)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 46.48 ms (1)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} Partial "global/_header" 0.74 ms (1)
+Aug 31 16:10:06 symfony [info] {sfTimerManager} Partial "global/_menu" 1.35 ms (1)
+Aug 31 16:10:15 symfony [info] {sfContext} initialization
+Aug 31 16:10:15 symfony [info] {sfController} initialization
+Aug 31 16:10:15 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 16:10:15 symfony [info] {sfRequest} request parameters array (  'one-page' => '1',  'module' => 'manual',  'action' => 'index',)
+Aug 31 16:10:15 symfony [info] {sfController} dispatch request
+Aug 31 16:10:15 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:10:15 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:10:15 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:10:15 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:10:15 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:10:15 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 16:10:15 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 16:10:15 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 16:10:17 symfony [info] {PartialHelper} set slot "right"
+Aug 31 16:10:17 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 16:10:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 16:10:17 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:17 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:10:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:10:17 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:10:17 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:10:17 symfony [info] {PartialHelper} get slot "right"
+Aug 31 16:10:17 symfony [info] {sfFilter} render to client
+Aug 31 16:10:17 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:10:17 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:10:17 symfony [info] {sfResponse} send content (965698 o)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} Configuration 4.35 ms (11)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} Action "manual/index" 97.20 ms (1)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} View "Success" for "manual/index" 1686.98 ms (1)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 43.82 ms (1)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} Partial "global/_header" 0.72 ms (1)
+Aug 31 16:10:18 symfony [info] {sfTimerManager} Partial "global/_menu" 1.40 ms (1)
+Aug 31 16:10:26 symfony [info] {sfContext} initialization
+Aug 31 16:10:27 symfony [info] {sfController} initialization
+Aug 31 16:10:27 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 16:10:27 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 16:10:27 symfony [info] {sfController} dispatch request
+Aug 31 16:10:27 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 16:10:27 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 16:10:27 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 16:10:27 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 16:10:27 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 16:10:27 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 16:10:27 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 16:10:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 16:10:27 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 16:10:27 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 16:10:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 16:10:27 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 16:10:27 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 16:10:27 symfony [info] {sfFilter} render to client
+Aug 31 16:10:27 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 16:10:27 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 16:10:27 symfony [info] {sfResponse} send content (22551 o)
+Aug 31 16:10:27 symfony [info] {sfTimerManager} Configuration 4.34 ms (11)
+Aug 31 16:10:27 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 16:10:27 symfony [info] {sfTimerManager} View "Success" for "main/index" 18.23 ms (1)
+Aug 31 16:10:27 symfony [info] {sfTimerManager} Partial "global/_header" 0.67 ms (1)
+Aug 31 16:10:27 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/documentation/api/:q"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/about"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/download"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/documentation/manual"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/documentation/api"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/trac"
+Aug 31 18:18:52 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 18:18:53 symfony [info] {sfRouting} connect "/:module"
+Aug 31 18:18:53 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 18:18:53 symfony [info] {sfContext} initialization
+Aug 31 18:18:53 symfony [info] {sfController} initialization
+Aug 31 18:18:53 symfony [info] {sfRouting} match route [homepage] "/"
+Aug 31 18:18:53 symfony [info] {sfRequest} request parameters array (  'module' => 'main',  'action' => 'index',)
+Aug 31 18:18:53 symfony [info] {sfController} dispatch request
+Aug 31 18:18:53 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:18:53 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:18:53 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:18:53 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:18:53 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:18:53 symfony [info] {sfAction} call "mainActions->executeIndex()"
+Aug 31 18:18:53 symfony [info] {sfView} initialize view for "main/index"
+Aug 31 18:18:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/main/templates/indexSuccess.php"
+Aug 31 18:18:53 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:18:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:18:53 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:18:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:18:53 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:18:53 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:18:53 symfony [info] {sfFilter} render to client
+Aug 31 18:18:53 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:18:53 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:18:53 symfony [info] {sfResponse} send content (25295 o)
+Aug 31 18:18:53 symfony [info] {sfTimerManager} Configuration 40.74 ms (10)
+Aug 31 18:18:53 symfony [info] {sfTimerManager} Action "main/index" 0.14 ms (1)
+Aug 31 18:18:53 symfony [info] {sfTimerManager} View "Success" for "main/index" 22.51 ms (1)
+Aug 31 18:18:53 symfony [info] {sfTimerManager} Partial "global/_header" 0.67 ms (1)
+Aug 31 18:18:53 symfony [info] {sfTimerManager} Partial "global/_menu" 1.34 ms (1)
+Aug 31 18:18:54 symfony [info] {sfContext} initialization
+Aug 31 18:18:54 symfony [info] {sfController} initialization
+Aug 31 18:18:54 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 18:18:54 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 18:18:54 symfony [info] {sfController} dispatch request
+Aug 31 18:18:55 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:18:55 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:18:55 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:18:55 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:18:55 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:18:55 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 18:18:55 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 18:18:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 18:18:55 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:18:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:18:55 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:18:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:18:55 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:18:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:18:55 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 18:18:55 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 18:18:55 symfony [info] {sfFilter} render to client
+Aug 31 18:18:55 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:18:55 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:18:55 symfony [info] {sfResponse} send content (70986 o)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} Configuration 38.16 ms (12)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 134.45 ms (1)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} Partial "global/_header" 0.68 ms (1)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} Partial "global/_menu" 1.38 ms (1)
+Aug 31 18:18:55 symfony [info] {sfTimerManager} Partial "global/_footer" 0.58 ms (1)
+Aug 31 18:18:56 symfony [info] {sfContext} initialization
+Aug 31 18:18:56 symfony [info] {sfController} initialization
+Aug 31 18:18:56 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 18:18:56 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 18:18:56 symfony [info] {sfController} dispatch request
+Aug 31 18:18:56 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:18:56 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:18:56 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:18:56 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:18:56 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:18:56 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 18:18:56 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 18:18:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 18:18:56 symfony [info] {PartialHelper} set slot "right"
+Aug 31 18:18:56 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 18:18:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 18:18:56 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:18:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:18:56 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:18:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:18:56 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:18:56 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:18:56 symfony [info] {PartialHelper} get slot "right"
+Aug 31 18:18:56 symfony [info] {sfFilter} render to client
+Aug 31 18:18:56 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:18:56 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:18:56 symfony [info] {sfResponse} send content (67976 o)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} Configuration 38.15 ms (12)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} Action "manual/index" 120.33 ms (1)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} View "Success" for "manual/index" 72.50 ms (1)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.78 ms (1)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} Partial "global/_header" 0.64 ms (1)
+Aug 31 18:18:56 symfony [info] {sfTimerManager} Partial "global/_menu" 1.50 ms (1)
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/documentation/api/:q"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/about"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/download"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/documentation/manual"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/documentation/api"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/trac"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/symfony/:action/*"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/:module"
+Aug 31 18:35:26 symfony [info] {sfRouting} connect "/:module/:action/*"
+Aug 31 18:35:26 symfony [info] {sfContext} initialization
+Aug 31 18:35:26 symfony [info] {sfController} initialization
+Aug 31 18:35:26 symfony [info] {sfRouting} match route [manual] "/documentation/manual"
+Aug 31 18:35:26 symfony [info] {sfRequest} request parameters array (  'module' => 'manual',  'action' => 'index',)
+Aug 31 18:35:26 symfony [info] {sfController} dispatch request
+Aug 31 18:35:26 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:35:26 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:35:26 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:35:26 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:35:26 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:35:26 symfony [info] {sfAction} call "manualActions->executeIndex()"
+Aug 31 18:35:26 symfony [info] {sfView} initialize view for "manual/index"
+Aug 31 18:35:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/indexSuccess.php"
+Aug 31 18:35:26 symfony [info] {PartialHelper} set slot "right"
+Aug 31 18:35:26 symfony [info] {sfView} initialize view for "manual/_table_of_contents"
+Aug 31 18:35:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/manual/templates/_table_of_contents.php"
+Aug 31 18:35:26 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:35:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/layout.php"
+Aug 31 18:35:26 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:35:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:35:26 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:35:26 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:35:26 symfony [info] {PartialHelper} get slot "right"
+Aug 31 18:35:26 symfony [info] {sfFilter} render to client
+Aug 31 18:35:26 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:35:26 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:35:26 symfony [info] {sfResponse} send content (70955 o)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} Configuration 43.28 ms (10)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} Action "manual/index" 98.76 ms (1)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} View "Success" for "manual/index" 72.20 ms (1)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} Partial "manual/_table_of_contents" 0.74 ms (1)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} Partial "global/_header" 0.73 ms (1)
+Aug 31 18:35:26 symfony [info] {sfTimerManager} Partial "global/_menu" 1.39 ms (1)
+Aug 31 18:35:36 symfony [info] {sfContext} initialization
+Aug 31 18:35:36 symfony [info] {sfController} initialization
+Aug 31 18:35:36 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 18:35:36 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 18:35:36 symfony [info] {sfController} dispatch request
+Aug 31 18:35:36 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:35:36 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:35:36 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:35:36 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:35:36 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:35:36 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 18:35:36 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 18:35:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 18:35:36 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:35:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:35:36 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:35:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:35:36 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:35:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:35:36 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 18:35:36 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 18:35:36 symfony [info] {sfFilter} render to client
+Aug 31 18:35:36 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:35:36 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:35:36 symfony [info] {sfResponse} send content (70893 o)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} Configuration 38.02 ms (12)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 133.00 ms (1)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} Partial "global/_header" 0.63 ms (1)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} Partial "global/_menu" 1.33 ms (1)
+Aug 31 18:35:36 symfony [info] {sfTimerManager} Partial "global/_footer" 0.41 ms (1)
+Aug 31 18:37:42 symfony [info] {sfContext} initialization
+Aug 31 18:37:42 symfony [info] {sfController} initialization
+Aug 31 18:37:42 symfony [info] {sfRouting} match route [api_documentation] "/documentation/api"
+Aug 31 18:37:42 symfony [info] {sfRequest} request parameters array (  'module' => 'api_documentation',  'action' => 'index',)
+Aug 31 18:37:42 symfony [info] {sfController} dispatch request
+Aug 31 18:37:42 symfony [info] {sfFilter} executing filter "sfRenderingFilter"
+Aug 31 18:37:42 symfony [info] {sfFilter} executing filter "sfWebDebugFilter"
+Aug 31 18:37:42 symfony [info] {sfFilter} executing filter "sfCommonFilter"
+Aug 31 18:37:42 symfony [info] {sfFilter} executing filter "sfFlashFilter"
+Aug 31 18:37:42 symfony [info] {sfFilter} executing filter "sfExecutionFilter"
+Aug 31 18:37:42 symfony [info] {sfAction} call "api_documentationActions->executeIndex()"
+Aug 31 18:37:42 symfony [info] {sfView} initialize view for "api_documentation/index"
+Aug 31 18:37:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/modules/api_documentation/templates/indexSuccess.php"
+Aug 31 18:37:42 symfony [info] {sfView} decorate content with "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:37:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/api_documentation_layout.php"
+Aug 31 18:37:42 symfony [info] {sfView} initialize view for "global/_header"
+Aug 31 18:37:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_header.php"
+Aug 31 18:37:42 symfony [info] {sfView} initialize view for "global/_menu"
+Aug 31 18:37:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_menu.php"
+Aug 31 18:37:42 symfony [info] {sfView} initialize view for "global/_footer"
+Aug 31 18:37:42 symfony [info] {sfView} render "/Users/jwage/Sites/doctrine_trunk/website/apps/frontend/templates/_footer.php"
+Aug 31 18:37:42 symfony [info] {sfFilter} render to client
+Aug 31 18:37:42 symfony [info] {sfResponse} send status "HTTP/1.0 200 OK"
+Aug 31 18:37:42 symfony [info] {sfResponse} send header "Content-Type": "text/html; charset=utf-8"
+Aug 31 18:37:42 symfony [info] {sfResponse} send content (70892 o)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} Configuration 4.47 ms (11)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} Action "api_documentation/index" 0.14 ms (1)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} View "Success" for "api_documentation/index" 120.42 ms (1)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} Partial "global/_header" 0.58 ms (1)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} Partial "global/_menu" 1.28 ms (1)
+Aug 31 18:37:42 symfony [info] {sfTimerManager} Partial "global/_footer" 0.44 ms (1)
diff --git a/website/plugins/sfDoctrinePlugin/LICENSE b/website/plugins/sfDoctrinePlugin/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..28956ad5e8b862d29c50abb2bd8ad8aa97f51fed
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2004-2006 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/website/plugins/sfDoctrinePlugin/README b/website/plugins/sfDoctrinePlugin/README
new file mode 100644
index 0000000000000000000000000000000000000000..91514c9d9143cca25c31ee4c0670359b97df93d4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/README
@@ -0,0 +1,25 @@
+sfDoctrine symfony plugin
+=========================
+
+Overview
+--------
+
+The sfDoctrine plugin allows you to totally replace propel with doctrine (http://www.phpdoctrine.com/) which is a powerful and easy-to-use ORM.
+
+
+Contents
+--------
+
+This plugin contains:
+- necessary tools to use doctrine: the main tool is sfDoctrine::getTable() which will allow you to send queries
+- pake tasks that convert between doctrine and propel schema formats and build doctrine model classes automatically
+- an admin generator: to use it just specify sfDoctrineAdmin as the main class in your generator.yml config
+
+You will find more information in the wiki page dedicated to sfDoctrine: http://www.symfony-project.com/trac/wiki/sfDoctrine.
+
+
+License
+-------
+
+For the full copyright and license information, please view the LICENSE
+file that was distributed with this source code.
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineClassSchema.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineClassSchema.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..f71bc9c7a21025171619ff33556a0e452c582db0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineClassSchema.class.php
@@ -0,0 +1,502 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineClassSchema.class.php 4696 2007-07-20 17:04:44Z gnat $
+ */
+
+class sfDoctrineClassSchema
+{
+  // the table associated to this class
+  protected $table;
+
+  // class name
+  protected $phpName;
+
+  // list of columns
+  protected $columns = array();
+
+  // list of relations (foreign keys) linking to this class
+  protected $many = array();
+
+  // inheritance description
+  protected $inheritance = array();
+
+  // i18n description
+  protected $i18n = array();
+
+  // indexes
+  protected $indexes = array();
+  
+  // Uniques
+    protected $uniques = array();
+
+  // options
+  protected $options = array();
+
+  public function __construct($name, array $cd = array())
+  {
+    $this->setPhpName($name);
+
+    // elementary key verification
+    $illegalKeys = array_diff_key($cd, array_flip(array('columns', 'tableName', 'inheritance', 'i18n', 'indexes', 'uniques', 'options')));
+
+    if ($illegalKeys)
+      throw new sfDoctrineSchemaException(sprintf('Invalid key "%s" in description of class "%s"', array_shift(array_keys($illegalKeys)), $name));
+
+    if (isset($cd['inheritance']))
+    {
+      $this->setInheritance($cd['inheritance']);
+    }
+    
+    // set i18n
+    if (isset($cd['i18n']))
+      $this->setI18n($cd['i18n']);
+    
+    // add indexes
+    if (isset($cd['indexes']))
+      $this->addIndexes($cd['indexes']);
+
+    // add uniques
+    if (isset($cd['uniques']))
+      $this->addUniques($cd['uniques']);
+      
+    // add options
+    if (isset($cd['options']))
+      $this->addOptions($cd['options']);
+
+    // add columns
+    if (isset($cd['columns']))
+      foreach ($cd['columns'] as $colName => $column)
+      {
+        $docCol = new sfDoctrineColumnSchema($colName, $column);
+        $this->addColumn($docCol);
+      }
+  }
+
+  // add a column if none with the same name is already there
+  public function addColumn($docCol)
+  {
+    if (isset($this->columns[$docCol->getName()]))
+      return;
+
+    // sets up the possible relation for that column
+    $docCol->setUpForeignRelation($this->getPhpName());
+
+    $this->columns[$docCol->getName()] = $docCol;
+  }
+
+  public function getColumns()
+  {
+    return $this->columns;
+  }
+
+  // for testing only
+  public function getColumn($colName)
+  {
+    if (!isset($this->columns[$colName]))
+      throw new sfDoctrineSchemaException(sprintf('Column "%s" is not defined', $colName));
+    return $this->columns[$colName];
+  }
+
+  public function addToMany($relation)
+  {
+    $this->many[] = $relation;
+  }
+
+  public function getPhpName()
+  {
+    return $this->phpName;
+  }
+
+  public function setPhpName($newName)
+  {
+    $this->phpName = $newName;
+  }
+
+  public function setTable($table)
+  {
+    $this->table = $table;
+  }
+
+  public function getTable()
+  {
+    if (!$this->hasTable())
+      throw new sfDoctrineSchemaException(sprintf('Table not defined for class "%s"', $this->getPhpName()));
+    return $this->table;
+  }
+
+  public function getTableName()
+  {
+    return $this->getTable()->getName();
+  }
+
+  public function hasTable()
+  {
+    return isset($this->table);
+  }
+
+  public function setI18n($i18n)
+  {
+    $check = array('class', 'cultureField');
+    foreach ($check as $key)
+      if (!isset($i18n[$key]))
+        throw new sfDoctrineSchemaException(sprintf('The key "%s" is missing from the i18n information for class "%s".', $key, $this->getPhpName()));
+    $this->i18n = $i18n;
+  }
+
+  public function hasI18n()
+  {
+    return !empty($this->i18n);
+  }
+
+  public function getI18n($key)
+  {
+    return $this->i18n[$key];
+  }
+
+  public function setInheritance($inh)
+  {
+    $check = array('extends');
+    if (isset($inh['keyField']) || isset($inh['keyValue']))
+      $check = array_merge($check, array('keyField', 'keyValue'));
+    elseif (isset($inh['keyFields']))
+      $check = array_merge($check, array('keyFields'));
+
+    foreach ($check as $key)
+      if (!isset($inh[$key]))
+        throw new sfDoctrineSchemaException(sprintf('The key "%s" is missing from the inheritance information for class "%s".', $key, $this->getPhpName()));
+    $this->inheritance = $inh;
+  }
+
+  public function getInheritance()
+  {
+    return $this->inheritance;
+  }
+
+  public function hasOneTableInheritance()
+  {
+    if ($inh = $this->inheritance)
+      if (isset($inh['keyValue']) || isset($inh['keyFields']))
+        return true;
+    return false;
+  }
+
+  public function getOptions()
+  {
+      return $this->options;
+  }
+
+  public function addOptions($options)
+  {
+      $this->options = $options;
+  }
+
+  public function hasOptions()
+  {
+      return count($this->options) ? true : false;
+  }
+
+  public function getIndexes()
+  {
+      return $this->indexes;
+  }
+
+  public function addIndexes($indexes)
+  {
+      $this->indexes = $indexes;
+  }
+
+  public function hasIndexes()
+  {
+    return count($this->indexes) ? true : false;
+  }
+  
+  public function addUniques($uniques)
+    {
+        $this->uniques = $uniques;
+    }
+
+    public function hasUniques()
+    {
+      return count($this->uniques) ? true : false;
+    }
+  
+  
+
+  public function getParentClassName()
+  {
+    return $this->inheritance['extends'];
+  }
+
+  // generates the name of the generated class
+  public function basePhpName($name = null)
+  {
+    if (!$name)
+      $name = $this->getPhpName();
+    return 'Base'.$name;
+  }
+
+  // outputs a function in php
+  public static function outputFunction($functionName, $contents, $phpdoc = '')
+  {
+    if (is_array($contents))
+      $contents = implode("\n    ", $contents);
+    return "
+  $phpdoc
+  public function $functionName()
+  {
+    $contents
+  }
+  ";
+  }
+
+  // output a class in php
+  public static function outputClass($className, $extends, $contents, $phpdoc = '')
+  {
+    $signature = sprintf("auto-generated by the sfDoctrine plugin");
+    return "<?php
+/*
+ * $phpdoc
+ *
+ * $signature
+ */
+class $className extends $extends
+{
+  $contents
+}
+";
+  }
+
+  public function getRelation($columnName)
+  {
+    return $this->columns[$columnName]->getRelation();
+  }
+
+  // this function returns an array ('className'=><class name>, 'source'=><class file contents>, 'base'=>true/false) of PHP classes
+  // corresponding to this class
+  public function asPHP()
+  {
+    $classes = array();
+
+    // main base class
+    $out = array();
+
+    $tableDef = array();
+    $setup = array();
+
+    // if that class inherits from another we call the parent methods
+    if ($this->inheritance)
+    {
+      $tableDef[] = "parent::setTableDefinition();\n";
+      $setup[] = "parent::setUp();\n";
+    }
+
+    // if it is a table we define the table name
+    if ($this->hasTable())
+    {
+      $tableDef[] = "\$this->setTableName('{$this->getTableName()}');\n"; 
+    }
+
+    foreach ($this->columns as $column)
+    {
+      $args = array();
+
+      $tableDef[] = $column->asPhp();
+    }
+
+    // declare indexes if any
+    foreach ($this->indexes as $name => $value)
+    {
+      // only write option if value is set
+      if(!empty($value))
+      {
+        $valueExport = is_array($value) ? var_export($value, true) : "'$value'";
+        $tableDef[] = "\$this->index('$name', $valueExport);";
+      }
+    }
+    
+    // declare uniques if any
+    foreach ($this->uniques as $name => $value)
+    {
+      // only write option if value is set
+      if(!empty($value))
+      {
+        $valueExport = is_array($value) ? var_export($value, true) : "'$value'";
+        $tableDef[] = "\$this->unique('$name', $valueExport);";
+      }
+    }
+
+    foreach ($this->options as $name => $value)
+    {
+      // only write option if value is set
+      if(!empty($value))
+      {
+        $valueExport = is_array($value) ? var_export($value, true) : "'$value'";
+        $tableDef[] = "\$this->option('$name', $valueExport);";          
+      }
+    }
+
+    $out[] = self::outputFunction('setTableDefinition', $tableDef);
+
+    // has/own one
+    foreach($this->columns as $col)
+      if ($rel = $col->getRelation())
+      {
+        $setup[] = $rel->asOnePhp();
+      }
+
+    // has/own many
+    foreach($this->many as $rel)
+    {
+      $setup[] = $rel->asManyPhp();
+    }
+
+    // declare inheritance if needed
+    if ($this->hasOneTableInheritance())
+    {
+      $inh = $this->getInheritance();
+      if (isset($inh['keyFields']))
+      {
+        $keyFields = $inh['keyFields'];
+        $keyFields = is_array($keyFields) ? $keyFields : array($keyFields);
+      }
+      else
+        $keyFields = array($inh['keyField'] => $inh['keyValue']);
+
+      $setup[] = '$this->setInheritanceMap('.var_export($keyFields, true).');';
+    }
+
+    // declare i18n if any
+    if ($this->hasI18n())
+      $setup[] = "\$this->hasI18nTable('{$this->getI18n('class')}', '{$this->getI18n('cultureField')}');";
+
+    $out[] = self::outputFunction('setUp', $setup);
+
+    // the following could also be: if ($this->inheritance)
+    // FIXME: create a global class!
+    if (isset($this->inheritance['extends']))
+      $parentName = $this->inheritance['extends'];
+    else
+      $parentName = ($this->hasI18n() ? 'sfDoctrineRecordI18n' : 'sfDoctrineRecord');
+
+
+    $class = array
+    (
+      'name' => $this->getPhpName(), // name of the child class; used only internally
+      'className' => $this->basePHPName(),
+      'source' => self::outputClass($this->basePHPName(), $parentName, implode("\n", $out), 'Base class; DO NOT EDIT'),
+      'overwrite' => true, // carful! even this set to false will overwrite!!!
+    );
+
+    $classes[] = $class;
+
+    $package = $this->getTable()->getPackage();
+
+    // generate the empty user and table classes
+    foreach ($classes as $baseClass)
+    {
+      $name = $baseClass['name'];
+      $parentClass = $baseClass['className'];
+
+      $tableName = $name.'Table'; // convention imposed by Doctrine
+      if (isset($this->inheritance['extends']))
+        $parentTable = $this->inheritance['extends'].'Table';
+      else
+        $parentTable = 'Doctrine_Table';
+
+      if ($package)
+      {
+        $pluginClassName = 'Plugin'.$name;
+        $classes[] = array
+        (
+          'className'=> $pluginClassName,
+          'source' => self::outputClass($pluginClassName, $parentClass, '', 'Plugin class'),
+          'plugin' => true,
+        );
+        // we hook the plugin class name in
+        $parentClass = $pluginClassName;
+
+        // same for tables
+        $pluginTableName = 'Plugin'.$tableName;
+        $classes[] = array
+        (
+          'className' => $pluginTableName,
+          'source' => self::outputClass($pluginTableName, $parentTable, '', 'Plugin table'),
+          'plugin' => true,
+        );
+        $parentTable = $pluginTableName;
+      }
+
+      $classes[] = array
+      (
+        'className'=>$name, 
+        'source'=>self::outputClass($name, $parentClass, '', 'Edit this file to customise your model class'), 
+      );
+
+      $classes[] = array
+      (
+        'className'=>$tableName,
+        'source'=>self::outputClass($tableName, $parentTable, '', 'Edit this file to customise your model table'),
+      );
+
+    }
+
+
+    return $classes;
+  }
+
+  // outputs a nested array
+  public function asDoctrineYml()
+  {
+    $output = array();
+
+    if ($this->inheritance)
+      $output['inheritance'] = $this->inheritance;
+    else
+      $output['tableName'] = $this->getTableName();
+
+    $cols = array();
+    foreach ($this->columns as $col)
+    {
+      $cols[$col->getName()] = $col->asDoctrineYml();
+    }
+
+    $output['columns'] = $cols;
+
+    return $output;
+  }
+
+  // outputs the columns of that class in propel xml format
+  public function addPropelXmlColumns(&$table)
+  {
+    // we add the id column which is automatically created in doctrine
+    $this->addColumn(new sfDoctrineColumnSchema('id', array('type'=>'integer', 'size'=>10, 'primary'=>true, 'autoincrement'=>true)));
+    foreach($this->columns as $col)
+    {
+      $col->addPropelXml($table);
+    }
+  }
+
+  public function debug()
+  {
+    $debug = array();
+    $debug['inheritance'] = $this->inheritance;
+    $debug['many'] = $this->many;
+    $debug['i18n'] = $this->i18n;
+    foreach ($this->columns as $col)
+    {
+      $debug['columns'][$col->getName()] = $col->debug();
+    }
+    return $debug;
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineColumnSchema.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineColumnSchema.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a74545cf28e2d1a9bc0aa9d7da4373ad832650b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineColumnSchema.class.php
@@ -0,0 +1,368 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineColumnSchema.class.php 4084 2007-05-23 09:48:50Z chtito $
+ */
+
+/*
+  This class stores information about a column in two arrays:
+  - properties: contains the name, type, size and constraints
+  - columnInfo: contains also the foreign relation information
+*/
+class sfDoctrineColumnSchema
+{
+  protected static $propel2docDictionary = array(
+  'types'=> array(
+    'tinyint' => 'integer',
+    'smallint' => 'integer',
+    'bigint' => 'integer',
+    'real' => 'float',
+    'decimal' => 'float',
+    'char' => 'string',
+    'varchar' => 'string',
+    'longvarchar' => 'string',
+#    'smallint'=> 'enum', // enums are converted to smallints
+#    'blob' => 'array', // arrays will be blobs
+#    'integer' => 'integer', // to convert doc integer to integer
+/*
+    'double' => 'double',
+    'float' => 'float',
+    'boolean' => 'boolean',
+    'date' => 'date',
+    'time' => 'timestamp',
+    'timestamp' => 'timestamp',
+    'blob' => 'blob',
+    'clob' => 'clob'
+    */
+  ),
+  'constraints' => array('autoIncrement' => 'autoincrement', 'primaryKey' => 'primary')
+  );
+
+  //FIXME: double, float,real???
+  protected static $defaultPropelSize = array(
+    'tinyint' => 3,
+    'smallint' => 5,
+    'integer' => 11,
+    'bigint' => 20,
+    'longvarchar'=>4000,
+  );
+
+  protected static $defaultDoctrineSize = array(
+    'string'=> 4000,
+    'integer' => 10,
+    'double' => 10,
+    'float' => 10,
+    'enum' => 2,
+    'array' => 100,
+  );
+
+  static $allowedConstraints = array('primary', 'autoincrement', 'default', 'enum', 'unique', 'nospace', 'notblank', 'notnull', 'email', 'scale', 'zerofill');
+
+  // column properties: name, size, type and constraints
+  protected $properties;
+
+  // column name
+  protected $name;
+
+// temporary storage of the description array; used when the class sets up the relation
+  protected $columnInfo; 
+
+  // set if the column is a foreign key
+  protected $relation = null;
+
+  // we essentially set up the properties array
+  // and translate from propel if needed
+  public function __construct($colName, $columnDescription = array(), $translatePropel = false)
+  {
+    // sometimes we get null if the yml line is empty
+    if ($columnDescription == null)
+      $columnDescription = array();
+
+    // for the short syntax type(size)
+    if (is_string($columnDescription))
+      $columnDescription = array('type'=>$columnDescription);
+
+    $this->setName($colName);
+
+    $columnInfo = new sfParameterHolder();
+    $columnInfo->add($columnDescription);
+
+    if ($translatePropel)
+    {
+      // we translate the propel types to doctrine ones
+      $propelType = strtolower($columnInfo->get('type'));
+      if (array_key_exists($propelType, self::$propel2docDictionary['types']))
+        $columnInfo->set('type', self::$propel2docDictionary['types'][$propelType]);
+      else
+        $columnInfo->set('type', $propelType); // we store it in lowercase
+
+      // if there is a default propel size we set it
+      if (!$columnInfo->get('size'))
+        if (isset(self::$defaultPropelSize[$propelType]))
+          $columnInfo->set('size', self::$defaultPropelSize[$propelType]);
+
+      // we translate the constraints
+      foreach ($columnInfo->getAll() as $key=>$value)
+      {
+        if (array_key_exists($key, self::$propel2docDictionary['constraints']))
+          $columnInfo->set(self::$propel2docDictionary['constraints'][$key], $columnInfo->get($key));
+      }
+    }
+
+    // we store the raw description, only used in setUpForeignRelation
+    $this->columnInfo = $columnInfo;
+
+
+    // name
+    $this->setProperty('name', $colName);
+    $this->setProperty('columnName', $columnInfo->get('columnName'));
+
+    // type
+    if (!($type = $columnInfo->get('type')))
+    {
+      // we try to figure out the type
+      // FIXME: write a method to detect relations?
+      if ($columnInfo->get('foreignClass') || $columnInfo->get('foreignTable')) 
+        $type = 'integer'; // foreign key
+      else
+        $type = 'string'; // default type
+    }
+    elseif(is_string($type))  // we check for the short syntax type
+    {
+      preg_match('/([^\(\s]+)\s*\([\s]*([\d]+)[\s]*\)/', $type, $matches);
+      if (!empty($matches))
+      {
+        $type = $matches[1];
+        $columnInfo->set('size', $matches[2]);
+      }
+    }
+    $this->setProperty('type', $type);
+
+    // size
+    if (!($size = $columnInfo->get('size')))
+    {
+      if (is_string($type))
+      {
+        if (isset(self::$defaultDoctrineSize[$type]))
+        $size = self::$defaultDoctrineSize[$type]; // we have a default size for this type
+      }
+    }
+    if (!$size)
+      $size = 'null';
+
+
+    $this->setProperty('size', $size);
+
+    // constraints
+    if ($constraints = array_intersect_key($columnDescription, array_flip(self::$allowedConstraints)))
+      $this->properties = array_merge($this->properties, $constraints);
+  }
+
+
+  // FIXME: simplify this function
+  public function setUpForeignRelation($className)
+  {
+    $colInfo = $this->getColumnInfo();
+    $colName = $this->getName();
+
+    // If there is no relation info for this column
+    if (!$colInfo->has('foreignTable') && !$colInfo->has('foreignClass'))
+      return;
+
+    $foreignClass = $colInfo->get('foreignClass');
+
+    // if the localName (plural name) is not specified, we add an "s" 
+    // as propel does
+    $localName = $colInfo->get('localName', $className.'s');
+    $foreignTable = $colInfo->get('foreignTable');
+
+    $foreignName = $colInfo->get('foreignName', null);
+
+    $fr = $colInfo->get('foreignReference', 'id');
+
+    $counterpart = $colInfo->get('counterpart');
+
+    $relationInfo = array
+    (
+      'localReference'=>$colName, 
+      'foreignReference'=>$fr, 
+      'localName'=>$localName, 
+      'foreignName'=>$foreignName, 
+      'counterpart' => $counterpart, 
+      'foreignClass'=>$foreignClass, 
+      'foreignTable'=>$foreignTable, // used only for propel import
+      'localClass'=>$className,
+      'options'=>$colInfo, // the remaining relation options
+    );
+
+    $this->relation = new sfDoctrineRelationSchema($relationInfo);
+  }
+
+  public function getColumnInfo()
+  {
+    return $this->columnInfo;
+  }
+
+  public function setName($name)
+  {
+    $this->name = $name;
+  }
+
+  public function getName()
+  {
+    return $this->name;
+  }
+
+  public function getRelation()
+  {
+    return $this->relation;
+  }
+
+  public function hasRelation()
+  {
+    return isset($this->relation);
+  }
+
+  public function setProperty($name, $value)
+  {
+    $this->properties[$name] = $value;
+  }
+
+  public function getProperty($name)
+  {
+    return $this->properties[$name];
+  }
+
+  public function getProperties()
+  {
+    return $this->properties;
+  }
+
+  protected function niceVarExport($array)
+  {
+    return str_replace(array("\n"), array(''), var_export($array, 1));
+  }
+
+  static protected $doctrineArgs = array('name' => false, 'type' => true, 'size' => false);
+
+  // generates the doctrine description of a column in PHP
+  public function asPhp()
+  {
+    $props = $this->getProperties();
+
+    $args = array();
+
+    // take care of the enum type
+    // FIXME: remove this "trick" some day?
+    if (is_array($props['type']))
+    {
+      $props['values'] = $props['type'];
+      $props['type'] = 'enum';
+    }
+
+    $output = array();
+
+    foreach (self::$doctrineArgs as $argName => $isString)
+    {
+      $arg = $props[$argName];
+      unset($props[$argName]);
+      if ($isString)
+        $arg = sprintf("'%s'", $arg);
+      $args[] = $arg;
+    }
+
+    $columnAlias = '';
+    if ($props['columnName'])
+    {
+      $columnAlias = $props['columnName'] . ' as ';
+    }
+    unset($props['columnName']);
+
+    $args[0] = sprintf("'%s%s'", $columnAlias, $args[0]);
+
+    // what remains is considered to be constraints
+    $args[] = $this->niceVarExport($props);
+
+    $output[] = sprintf('$this->hasColumn(%s);', implode(', ', $args));
+
+    return implode("\n", $output);
+  }
+
+  // exports this column in propel xml format
+  public function addPropelXml(&$node)
+  {
+    $c = $node->addChild('column');
+
+    $doc2proplDict = array_flip(self::$propel2docDictionary['types']);
+
+    $c->addAttribute('name', $this->getName());
+
+    // type
+    $type = $this->properties['type'];
+    if (array_key_exists($this->properties['type'], $doc2proplDict))
+      $type = $doc2proplDict[$type];
+    $c->addAttribute('type', $type);
+
+    // size
+    $size = $this->properties['size'];
+    if ($type == 'varchar')
+      $c->addAttribute('size', $size);
+
+    // constraints
+    $constraints = array_diff_key($this->properties, array_flip(array('name', 'type', 'size')));
+    $doc2propelDict = array_flip(self::$propel2docDictionary['constraints']);
+    foreach ($constraints as $constraint=>$value)
+    {
+      if (array_key_exists($constraint, $doc2propelDict))
+        $constraint = $doc2propelDict[$constraint];
+      $c->addAttribute($constraint, ($value ? 'true' : 'false'));
+    }
+
+    if ($rel = $this->getRelation())
+    {
+      $r = $node->addChild('foreign-key');
+      $r->addAttribute('foreignTable', $rel['foreignTable']);
+      $ref = $r->addChild('reference');
+      $ref->addAttribute('local', $this->getName());
+      $ref->addAttribute('foreign', $rel['foreignReference']);
+    }
+  }
+
+  // exports this column in doctrine yml format
+  public function asDoctrineYml()
+  {
+    $output = array();
+
+    foreach($this->getProperties() as $key=>$value)
+    {
+      if ($key != 'name')
+        $output[$key] = $value;
+    }
+
+    if ($relation = $this->getRelation())
+    {
+      $output = array_merge($output, $relation->asDoctrineYml());
+    }
+
+    return $output;
+  }
+
+  public function debug()
+  {
+    $debug = array();
+    $debug['properties'] = $this->properties;
+    $debug['relation'] = $this->relation;
+    $debug['columnInfo'] = $this->getColumnInfo()->getAll();
+    return $debug;
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineDatabaseSchema.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineDatabaseSchema.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e809c021c3873343d7b5c0257ac2318f37523fc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineDatabaseSchema.class.php
@@ -0,0 +1,149 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineDatabaseSchema.class.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+
+/* 
+ - class: contains a bunch of columns, toMany relationships, inheritance
+   information, i18n information
+ - table: a special class that is actually a table
+ - column: contains the doctrine properties (name, type, size) and the toOne relation information
+
+ */
+
+class sfDoctrineDatabaseSchema
+{
+  // the class descriptions
+  protected $classes = array();
+
+  // a subset of the array above: classes which are also tables
+  protected $tables = array();
+
+  public function getClasses()
+  {
+    return $this->classes;
+  }
+
+  protected function getClass($className)
+  {
+    if (isset($this->classes[$className]))
+      return $this->classes[$className];
+    throw new sfDoctrineSchemaException(sprintf('The class "%s" has no description', $className));
+  }
+
+  // retrieves a class object from its table name
+  protected function findClassByTableName($tableName)
+  {
+    foreach ($this->tables as $table)
+      if ($table->getName() == $tableName)
+      {
+        $tableClasses = $table->getClasses();
+        if (count($tableClasses) != 1)
+          throw new sfDoctrineSchemaException(sprintf('No unique class is associated to table "%s"', $tableName));
+        return array_pop($tableClasses);
+      }
+    throw new sfDoctrineSchemaException(sprintf('Table "%s" not found', $tableName));
+  }
+
+  // set the one to many and many to many relationships
+  // finds out what are the foreign classes or foreign tables
+  protected function fixRelationships()
+  {
+    foreach ($this->classes as $className => $class)
+    {
+      foreach ($class->getColumns() as $relCol)
+        if ($relation = $relCol->getRelation())
+        {
+          // if no foreignClass was specified (import from propel) we find it out
+          if (!$relation->get('foreignClass'))
+          {
+            $foreignClass = $this->findClassByTableName($relation->get('foreignTable'));
+            $relation->set('foreignClass', $foreignClass->getPhpName());
+          }
+
+          // if foreignTable was not set (only used for export to propel)
+          // we figure it out
+          if (!$relation->get('foreignTable'))
+          {
+            $className = $relation->get('foreignClass');
+            $relation->set('foreignTable', $this->getClass($className)->getTableName());
+          }
+
+          // the relation is a many2many
+          if ($relation->get('counterpart'))
+          {
+            $counterpartRel = $class->getRelation($relation->get('counterpart'));
+            $relation->set('otherClass', $counterpartRel->get('foreignClass'));
+          }
+
+          // we copy all the toOne relations to the corresponding
+          // foreign class
+          $rel = $relCol->getRelation();
+          $this->getClass($rel->get('foreignClass'))->addToMany($rel); // FIXME: don't copy here
+
+        }
+    }
+  }
+
+
+  // exports the current schema as a propel xml file
+  public function asPropelXml()
+  {
+    $xml = new SimpleXmlElement(sprintf('<?xml version="1.0" encoding="UTF-8" ?>
+<database name="%s" defaultIdMethod="native"></database>', 'connection'));
+
+    foreach ($this->tables as $table)
+    {
+      $table->addPropelXmlClasses($xml);
+    }
+
+    return array('source'=>$xml->asXml());
+  }
+
+  // exports the current schema in a sfDoctrine yml file
+  public function asDoctrineYml()
+  {
+    $ymlClasses = array();
+
+    foreach ($this->classes as $class)
+    {
+      $ymlClasses[$class->getPhpName()] = $class->asDoctrineYml();
+    }
+    return array('source'=>sfYaml::dump($ymlClasses));
+  }
+
+  public function debug()
+  {
+    $debug = array();
+    foreach ($this->classes as $class)
+    {
+      $debug[$class->getPhpName()] = $class->debug();
+    }
+    return $debug;
+  }
+
+}
+
+
+
+
+
+class sfDoctrineSchemaException extends sfException
+{
+  public function __construct($message = null, $code = 0)
+  {
+    $this->setName('sfDoctrineSchemaException');
+    parent::__construct($message, $code);
+  }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineRelationSchema.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineRelationSchema.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..a38b69976da57f8a224dc300a5c256f8ea431061
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineRelationSchema.class.php
@@ -0,0 +1,173 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineRelationSchema.class.php 4705 2007-07-24 20:45:46Z Jonathan.Wage $
+ */
+
+class sfDoctrineRelationSchema
+{
+  protected $relationInfo = array();
+
+  public function __construct($relationInfo)
+  {
+    foreach ($relationInfo as $key => $value)
+    {
+      $this->set($key, $value);
+    }
+  }
+
+  public function set($key, $value)
+  {
+    // we set the default foreign name
+    if ($key == 'foreignClass')
+    {
+      if (!isset($this->relationInfo['foreignName']))
+      {
+      	$this->relationInfo['foreignName'] = $value;
+    	}
+    }
+    
+    $this->relationInfo[$key] = $value;
+  }
+
+  public function get($key)
+  {
+    if (isset($this->relationInfo[$key]))
+    {
+      return $this->relationInfo[$key];
+    }
+    else if (isset($this->relationInfo['options']))
+    {
+      if ($option = $this->relationInfo['options']->get($key))
+      {
+        return $option;
+    	}
+    }
+    
+    return null;
+  }
+
+  public function asDoctrineYml()
+  {
+    $output = array();
+    foreach(array('foreignClass', 'foreignReference', 'localName', 'foreignName', 'cascadeDelete', 'unique') as $key)
+    {
+      if ($value = $this->get($key))
+      {
+        $output[$key] = $value;
+      }
+    }
+    
+    // FIXME: this is clumsy: change the schema syntax?
+    if ($verb == 'owns')
+    {
+      $output['cascadeDelete'] = true;
+    }
+    
+    return $output;
+  }
+  
+  public function asPhpArray($array)
+  {
+    $phpArray = 'array(';
+    
+    if( !empty($array) )
+    {
+			foreach($array AS $key => $value)
+			{
+				$phpArray .= "'{$key}' => '{$value}', ";
+			}
+		
+			$phpArray = substr($phpArray, 0, strlen($phpArray) - 2);
+    }
+    
+    $phpArray .= ')';
+    
+    return $phpArray;
+  }
+  
+  public function asOnePhp()
+  {
+  	// special behaviour for xref tables with cascade delete
+  	$verb = ($this->get('cascadeDelete') && ($this->get('counterpart') || $this->get('unique'))) ? 'owns' : 'has';
+  	$options['local'] = $this->get('localReference');
+  	$options['foreign'] = $this->get('foreignReference');
+  	
+  	//support old and new cascade declarations
+  	if ($verb == 'owns' || $this->get('cascadeDelete') === true)
+  	{
+  	  $options['onDelete'] = 'CASCADE';
+  	}
+  	
+  	if ($this->get('onDelete'))
+  	{
+  	  $options['onDelete'] = strtoupper($this->get('onDelete'));
+  	}
+  	
+  	$phpOptions = $this->asPhpArray($options);
+  	
+      return "\$this->$verb"."One('{$this->get('foreignClass')} as {$this->get('foreignName')}', $phpOptions);";
+  }  
+
+  public function asManyPhp()
+  {
+    $quantity = $this->get('unique') ? 'One':'Many';
+    
+    // using "owns" for cascade delete except in xref table
+    $verb = ($this->get('cascadeDelete') && !$this->get('counterpart')) ? 'has':'has';
+    
+		$otherClass = $this->get('localClass');
+		
+		if ($quantity == 'Many' && $this->get('counterpart'))
+		{
+			$localReference = $this->relationInfo['localReference'];
+			$foreignReference = $this->relationInfo['options']->get('counterpart');
+			$otherClass = $this->get('otherClass');
+		} else {
+			$localReference = $this->get('foreignReference');
+			$foreignReference = $this->get('localReference');
+		}
+  	
+  	$localClass = $this->get('localClass');
+  	
+    // Set refClass to localClass if it is a Many-Many relationship
+    if ($quantity == 'Many' && $this->get('counterpart'))
+    {
+    	$refClass = $this->get('localClass');
+    }
+    
+    if (isset($refClass) && $refClass)
+    {
+    	$options['refClass'] = $refClass;
+    }
+    
+    if ($localReference)
+    {
+    	$options['local'] = $localReference;
+    }
+    
+    if ($foreignReference)
+    {
+    	$options['foreign'] = $foreignReference;
+    }
+    
+    $phpOptions = $this->asPhpArray($options);
+    
+    return "\$this->$verb$quantity('$otherClass as {$this->get('localName')}', $phpOptions);";    
+  }
+
+  public function debug()
+  {
+    return $this->relationInfo;
+  }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaDoctrineLoader.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaDoctrineLoader.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..515824c58b1aceae138cb5e524029f568a2ce70b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaDoctrineLoader.class.php
@@ -0,0 +1,103 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineSchemaDoctrineLoader.class.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+
+class sfDoctrineSchemaDoctrineLoader extends sfDoctrineDatabaseSchema
+{
+  // recursively finds out what a class table is
+  // FIXME: check for infinite loop?
+  protected function parentTable($class)
+  {
+    if ($class->hasTable())
+      return $class->getTable();
+      
+    return $this->parentTable($this->getClass($class->getParentClassName()));
+  }
+  
+  // associate a table to each class
+  protected function fixTables()
+  {
+    foreach ($this->classes as $className => $class)
+    {
+      $table = $this->parentTable($class);
+      $table->addClass($class);
+    }
+  }
+  
+  // set up the necessary fields in the i18n table: culture, id
+  protected function addI18nFields()
+  {
+    foreach ($this->classes as $className => $class)
+    {
+      if (!$class->hasI18n())
+        continue;
+      $i18nClass = $this->getClass($class->getI18n('class')); 
+      $cultureColumn = new sfDoctrineColumnSchema($class->getI18n('cultureField'), array('type'=> 'string', 'size'=> 100, 'primary'=> true));
+      
+      $i18nClass->addColumn($cultureColumn);
+      
+      // add the foreign key to the main table
+      $idDesc = array('foreignClass'=>$className, 'localName'=>$i18nClass->getPhpName(), 'onDelete'=>'cascade', 'primary'=>true);
+      $i18nClass->addColumn(new sfDoctrineColumnSchema('id', $idDesc));
+    }
+  }
+  
+  // adds the class key fields
+  protected function addInheritanceFields()
+  {
+    foreach ($this->classes as $className => $class)
+      if ($class->hasOneTableInheritance())
+      {
+        $inh = $class->getInheritance();
+        $class->getTable()->addColumn(new sfDoctrineColumnSchema($inh['keyField'], array('type'=>'integer')));
+      }
+  }
+
+  public function load($file, $package = null)
+  {
+    $schema = sfYaml::load($file);
+    
+    foreach ($schema as $className => $cd)
+    {
+      if (!isset($cd['tableName']) && !isset($cd['inheritance']))
+        throw new sfDoctrineSchemaException(sprintf('Class "%s" must have either a table or a parent', $className));
+
+      $class = new sfDoctrineClassSchema($className, $cd);
+
+      // add a table if necessary
+      if (isset($cd['tableName']))
+      {
+        // this top class is actually a table
+        $table = new sfDoctrineTableSchema($cd['tableName'], $package);
+        $table->addClass($class);
+        $this->tables[$cd['tableName']] = $table;
+      }
+
+      $this->classes[$className] = $class;
+    }
+  }
+
+  public function process()
+  {
+    $this->fixTables();
+    
+    $this->addI18nFields();
+
+    $this->fixRelationships();
+    
+    $this->addInheritanceFields();
+  }
+
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaPropelLoader.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaPropelLoader.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e66ba82833c0b26398b95928e025c48b98e2846
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineSchemaPropelLoader.class.php
@@ -0,0 +1,70 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineSchemaPropelLoader.class.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+
+class sfDoctrineSchemaPropelLoader extends sfDoctrineDatabaseSchema
+{
+  // get the attributes parsed by the sfPropelDatabaseSchema class
+  protected function getAttribute($tag, $attribute)
+  {
+    return isset($tag['_attributes'][$attribute]) ? $tag['_attributes'][$attribute] : null;
+  }
+  
+  public function load($file, $package = null)
+  {
+    // we figure out what kind of file we are given
+    $type = array_pop(explode('.', $file));
+    $type2method = array('yml'=>'loadYAML', 'xml'=>'loadXML');
+    if (isset($type2method[$type]))
+      $method = $type2method[$type];
+    else
+      throw new sfDoctrineSchemaException(sprintf('Unkwnown method for extension "%s"', $type));
+    
+    $propelDatabaseSchema = new sfPropelDatabaseSchema();
+    $propelDatabaseSchema->$method($file);
+    $data = $propelDatabaseSchema->asArray();
+          
+    foreach ($propelDatabaseSchema->getTables() as $tb_name => $tableDesc)
+    {
+      // special table class
+      // propel has only such classes (no inheritance support)
+      $table = new sfDoctrineTableSchema($tb_name, $package);
+      $this->tables[$tb_name] = $table;
+
+      if (!($className = $this->getAttribute($tableDesc, 'phpName')))
+        $className = sfInflector::camelize($tb_name); // wild guess
+
+      $class = new sfDoctrineClassSchema($className);
+      $table->addClass($class);
+
+      // columns
+      foreach ($propelDatabaseSchema->getChildren($tableDesc) as $col_name => $columnDescription)
+      {
+        if (($col_name == 'id')) // id is automatically generated in doctrine
+          continue;
+      
+        $docCol = new sfDoctrineColumnSchema($col_name, $columnDescription, true);
+        $class->addColumn($docCol);
+      }
+
+      $this->classes[$class->getPhpName()] = $class;
+    }
+  }
+
+  public function process()
+  {
+    $this->fixRelationships();
+  }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/addon/sfDoctrineTableSchema.class.php b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineTableSchema.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..d4a5cf6b141f91f2b4035adce1455a7e973f5996
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/addon/sfDoctrineTableSchema.class.php
@@ -0,0 +1,72 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineTableSchema.class.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+
+class sfDoctrineTableSchema extends sfDoctrineClassSchema
+{
+  // the classes associated to that table
+  protected $classes;
+
+  // table name
+  protected $name;
+  
+  // package of that table (usually either a plugin name, or a propel schema name)
+  protected $package;
+  
+  public function getName()
+  {
+    return $this->name;
+  }
+  
+  public function setName($name)
+  {
+    $this->name = $name;
+  }
+  
+  public function __construct($tableName, $package)
+  {
+    $this->setName($tableName);
+    $this->package = $package;
+  }
+  
+  public function addClass($class)
+  {
+    // we add the class and try to avoid duplication
+    $this->classes[$class->getPhpName()] = $class;
+    $class->setTable($this);
+  }
+
+  public function getClasses()
+  {
+    return $this->classes;
+  }
+  
+  // exports this table in propel xml format
+  public function addPropelXmlClasses(&$node)
+  {
+    $t = $node->addChild('table');
+    $t->addAttribute('name', $this->getName());
+    $t->addAttribute('phpName', $this->getPhpName());
+    foreach($this->classes as $class)
+    {
+      $class->addPropelXmlColumns($t);
+    }
+  }
+  
+  public function getPackage()
+  {
+    return $this->package;
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/config/autoload.yml b/website/plugins/sfDoctrinePlugin/config/autoload.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b68c7f8e942c43fc1ce0f7bc60a3bfc15b426ac
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/config/autoload.yml
@@ -0,0 +1,10 @@
+autoload:
+#  Doctrine:
+#    name: Doctrine classes
+#    ext: .php
+#    path: %SF_PLUGINS_DIR%/sfDoctrine/doctrine
+#    recursive: on
+  doctrine_model_classes:
+    name: Doctrine model classes
+    ext: .class.php
+    path:    %SF_LIB_DIR%/model/doctrine
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/config/config_handlers.yml b/website/plugins/sfDoctrinePlugin/config/config_handlers.yml
new file mode 100644
index 0000000000000000000000000000000000000000..31e150951655f64f69ca9725aff960267bd8276f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/config/config_handlers.yml
@@ -0,0 +1,5 @@
+config/doctrine.yml:
+  class:    sfDoctrineConfigHandler
+
+config/schemas.yml:
+  class:    sfDoctrineSchemasConfigHandler
diff --git a/website/plugins/sfDoctrinePlugin/config/doctrine.yml b/website/plugins/sfDoctrinePlugin/config/doctrine.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d71044355b86294041eecd1abcbe866b32ba7945
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/config/doctrine.yml
@@ -0,0 +1,25 @@
+all:
+
+  #doctrine attributes
+  attributes:
+
+    #automatic table creation (none, tables, constraints, all)
+    export:  all
+
+    #default fetch mode (immediate, batch, lazy, offset, lazy_offset)
+    fetchmode:      immediate
+
+    #collection limit (integer 1+)
+    coll_limit:     5
+
+    #global event listener
+#    listener: sfDoctrineEventListener
+
+    #locking (optimistic, pessimistic)
+    lockmode:       pessimistic
+
+    #enable doctrine side validation (true, false)
+    vld:            false
+    
+    # enable quoting
+    quote_identifier: false
diff --git a/website/plugins/sfDoctrinePlugin/config/settings.yml b/website/plugins/sfDoctrinePlugin/config/settings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..68a87c9559deed1ca0d987ab32ef417332e5f83e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/config/settings.yml
@@ -0,0 +1,3 @@
+all:
+  orm: doctrine
+#  default_database: <your default connection here>
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/actions/actions.class.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..483f8fa7210962fad0f8bd87a672d92175175ac5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/actions/actions.class.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * ##MODULE_NAME## actions.
+ *
+ * @package    ##PROJECT_NAME##
+ * @subpackage ##MODULE_NAME##
+ * @author     ##AUTHOR_NAME##
+ * @version    SVN: $Id: actions.class.php,v 1.1 2006/12/08 18:49:35 nathanael Exp $
+ */
+class ##MODULE_NAME##Actions extends auto##MODULE_NAME##Actions
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/config/generator.yml b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/config/generator.yml
new file mode 100644
index 0000000000000000000000000000000000000000..401c213c7ca37376dae2312be9c100afdb2cd356
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/config/generator.yml
@@ -0,0 +1,5 @@
+generator:
+  class:              sfDoctrineAdminGenerator
+  param:
+    model_class:      ##MODEL_CLASS##
+    theme:            crud
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/lib/.sf b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/lib/.sf
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/templates/.sf b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/templates/.sf
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/validate/.sf b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/skeleton/validate/.sf
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/actions/actions.class.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fd746f5d32c652e4a2d0900fa38924fd40600cc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/actions/actions.class.php
@@ -0,0 +1,104 @@
+[?php
+
+/**
+ * <?php echo $this->getGeneratedModuleName() ?> actions.
+ *
+ * @package    ##PROJECT_NAME##
+ * @subpackage <?php echo $this->getGeneratedModuleName() ?>
+
+ * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: actions.class.php 3923 2007-05-03 19:42:33Z gnat $
+ */
+class <?php echo $this->getGeneratedModuleName() ?>Actions extends sfActions
+{
+  public function executeIndex ()
+  {
+    return $this->forward('<?php echo $this->getModuleName() ?>', 'list');
+  }
+
+  public function executeList ()
+  {
+  	$this-><?php echo $this->getPluralName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->findAll();
+  }
+
+  public function executeShow ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(<?php echo $this->getRetrieveByPkParamsForAction('') ?>);    
+    $this->forward404Unless($this-><?php echo $this->getSingularName() ?>);
+  }
+
+  public function executeCreate ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = new <?php echo $this->getClassName() ?>();
+    $this->setTemplate('edit');
+  }
+
+  public function executeEdit ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(<?php echo $this->getRetrieveByPkParamsForAction('') ?>);    
+    $this->forward404Unless($this-><?php echo $this->getSingularName() ?>);
+  }
+
+  public function executeDelete ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(<?php echo $this->getRetrieveByPkParamsForAction('') ?>);    
+    
+    $this->forward404Unless($this-><?php echo $this->getSingularName() ?>);
+
+    try
+    {
+      $this-><?php echo $this->getSingularName() ?>->delete();
+      $this->redirect('<?php echo $this->getModuleName() ?>/list');
+    }
+    catch (Doctrine_Exception $e)
+    {
+      $this->getRequest()->setError('delete', 'Could not delete the selected <?php echo sfInflector::humanize($this->getSingularName()) ?>. Make sure it does not have any associated items.');
+      return $this->forward('<?php echo $this->getModuleName() ?>', 'list');
+    }
+  }
+
+  public function executeUpdate ()
+  {
+    if (<?php echo $this->getTestPksForGetOrCreate(false) ?>)
+    {
+      $<?php echo $this->getSingularName() ?> = new <?php echo $this->getClassName() ?>();
+    }
+    else
+    {
+      $<?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(<?php echo $this->getRetrieveByPkParamsForAction('') ?>);
+      $this->forward404Unless($<?php echo $this->getSingularName() ?>);
+    }
+
+    $formData = $this->getRequestParameter('<?php echo $this->getSingularName() ?>');
+<?php foreach ($this->getColumns('') as $index => $column): 
+$type = $column->getDoctrineType(); 
+$name = $column->getName(); ?>
+<?php if($column->isPrimaryKey()) continue ?>
+<?php if ($name == 'created_at' || $name == 'updated_at') continue ?>
+<?php if ($type == 'boolean'): ?>
+    <?php $boolVar = "\$formData['$name']";
+      echo $this->getColumnSetter($column, "isset($boolVar) ? $boolVar : 0", false, '')?>;
+<?php continue; ?>
+<?php endif; // boolean case ?>
+    if ($newValue = $formData['<?php echo $name ?>'])
+    {
+<?php if ($type == 'date' || $type == 'timestamp'): ?>
+<?php $inputPattern = ($type == 'date' ? 'd' : 'g');
+$outputPattern = ($type == 'date' ? 'i' : 'I'); ?>
+       $dateFormat = new sfDateFormat($this->getUser()->getCulture());
+       <?php echo $this->getColumnSetter($column, sprintf('$dateFormat->format($newValue, \'%s\', $dateFormat->getInputPattern(\'%s\'))', $outputPattern, $inputPattern), false, '');?>;
+<?php elseif ($column->isForeignKey()): ?>
+       $<?php echo $this->getSingularName()?>->set('<?php echo $column->getColumnName()?>', (empty($newValue) ? null : $newValue));
+<?php else: ?>
+	     <?php echo $this->getColumnSetter($column, '$newValue', false, '');?>;
+<?php endif; ?>
+    }
+<?php endforeach; ?>
+
+    $<?php echo $this->getSingularName() ?>->save();
+
+    return $this->redirect('<?php echo $this->getModuleName() ?>/show?<?php echo $this->getPrimaryKeyUrlParams() ?>);
+<?php //' ?>
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/editSuccess.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/editSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..995f26cb3dce6e2c5e458b761bb977ea35587a0f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/editSuccess.php
@@ -0,0 +1,31 @@
+[?php use_helper('ObjectDoctrineAdmin', 'Object', 'Date') ?]
+
+[?php echo form_tag('<?php echo $this->getModuleName() ?>/update', 'multipart=true') ?]
+
+<?php foreach ($this->getPrimaryKey() as $pk): ?>
+[?php echo object_input_hidden_tag($<?php echo $this->getSingularName() ?>, 'get<?php echo $pk->getPhpName() ?>') ?]
+<?php endforeach; ?>
+
+
+<table>
+<tbody>
+<?php foreach ($this->getColumns('') as $index => $column): ?>
+<?php if ($column->isPrimaryKey()) continue ?>
+<?php if ($column->getName() == 'created_at' || $column->getName() == 'updated_at') continue ?>
+<tr>
+  <th><?php echo sfInflector::humanize(sfInflector::underscore($column->getPhpName())) ?>: </th>
+  <td>[?php echo <?php echo $this->getColumnEditTag($column) ?> ?]</td>
+</tr>
+<?php endforeach; ?>
+
+</tbody>
+</table>
+<hr />
+[?php echo submit_tag('save') ?]
+[?php if (<?php echo $this->getPrimaryKeyIsSet() ?>): ?]
+  &nbsp;[?php echo link_to('delete', '<?php echo $this->getModuleName() ?>/delete?<?php echo $this->getPrimaryKeyUrlParams() ?>, 'post=true&confirm=Are you sure?') ?]
+  &nbsp;[?php echo link_to('cancel', '<?php echo $this->getModuleName() ?>/show?<?php echo $this->getPrimaryKeyUrlParams() ?>) ?]
+[?php else: ?]
+  &nbsp;[?php echo link_to('cancel', '<?php echo $this->getModuleName() ?>/list') ?]
+[?php endif; ?]
+</form>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/listSuccess.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/listSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc5d42d666a2693a3f9ce6d7c630c90126f9baf3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/listSuccess.php
@@ -0,0 +1,27 @@
+<h1><?php echo $this->getModuleName() ?></h1>
+
+<table>
+<thead>
+<tr>
+<?php foreach ($this->getColumns('') as $column): ?>
+  <th><?php echo sfInflector::humanize($column->getName()) ?></th>
+<?php endforeach; ?>
+</tr>
+</thead>
+<tbody>
+[?php foreach ($<?php echo $this->getPluralName() ?> as $<?php echo $this->getSingularName() ?>): ?]
+<tr>
+<?php foreach ($this->getColumns('') as $column): ?>
+  <?php if ($column->isPrimaryKey()): ?>
+  <td>[?php echo link_to($<?php echo $this->getSingularName() ?>->get('<?php echo $column->getPhpName() ?>'), '<?php echo $this->getModuleName() ?>/show?<?php echo $this->getPrimaryKeyUrlParams() ?>); ?]</td>
+  <?php else: ?>
+  <td>[?php echo $<?php echo $this->getSingularName() ?>->get('<?php echo $column->getPhpName() ?>'); ?]</td>
+  <?php endif; ?>
+<?php endforeach; ?>
+</tr>
+[?php endforeach; ?]
+<tr><td>Number of <?php echo $this->getPluralName() ?>: [?php echo count($<?php echo $this->getPluralName()?>) ?]</td></tr>
+</tbody>
+</table>
+
+[?php echo link_to ('create', '<?php echo $this->getModuleName() ?>/create') ?]
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/showSuccess.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/showSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..aecf6f3781af3826d4530032a0b34d4ff7cd884d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/crud/template/templates/showSuccess.php
@@ -0,0 +1,13 @@
+<table>
+<tbody>
+<?php foreach ($this->getAllColumns() as $column): ?>
+<tr>
+<th><?php echo sfInflector::humanize(sfInflector::underscore($column->getPhpName())) ?>: </th>
+<td>[?= $<?php echo $this->getSingularName() ?>->get<?php echo $column->getPhpName() ?>() ?]</td>
+</tr>
+<?php endforeach; ?>
+</tbody>
+</table>
+<hr />
+[?php echo link_to('edit', '<?php echo $this->getModuleName() ?>/edit?<?php echo $this->getPrimaryKeyUrlParams() ?>) ?]
+&nbsp;[?php echo link_to('list', '<?php echo $this->getModuleName() ?>/list') ?]
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/actions/actions.class.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1892139bae5c6760379f65378c2437ab997e131
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/actions/actions.class.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * ##MODULE_NAME## actions.
+ *
+ * @package    ##PROJECT_NAME##
+ * @subpackage ##MODULE_NAME##
+ * @author     Your name here
+ * @version    SVN: $Id: actions.class.php 1415 2006-06-11 08:33:51Z fabien $
+ */
+class ##MODULE_NAME##Actions extends auto##MODULE_NAME##Actions
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/config/generator.yml b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/config/generator.yml
new file mode 100644
index 0000000000000000000000000000000000000000..378028b560e798cd0e80d75e636962e5f6b48b53
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/skeleton/config/generator.yml
@@ -0,0 +1,5 @@
+generator:
+  class:              sfDoctrineAdminGenerator
+  param:
+    model_class:      ##MODEL_CLASS##
+    theme:            default
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/actions/actions.class.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/actions/actions.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1ce6697c7a414dba3042ebfb2e2764cfd6b2efa
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/actions/actions.class.php
@@ -0,0 +1,422 @@
+[?php
+
+/**
+ * <?php echo $this->getGeneratedModuleName() ?> actions.
+ *
+ * @package    ##PROJECT_NAME##
+ * @subpackage <?php echo $this->getGeneratedModuleName() ?>
+
+ * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: actions.class.php 4836 2007-08-07 19:10:21Z Jonathan.Wage $
+ */
+class <?php echo $this->getGeneratedModuleName() ?>Actions extends sfActions
+{
+  public function preExecute ()
+  {
+    $this->getResponse()->addStylesheet('<?php echo $this->getParameterValue('css', sfConfig::get('sf_admin_web_dir').'/css/main') ?>');
+  }
+
+  public function executeIndex ()
+  {
+    return $this->forward('<?php echo $this->getModuleName() ?>', 'list');
+  }
+
+  public function executeList ()
+  {
+    $this->processSort();
+
+    $this->processFilters();
+
+<?php if ($this->getParameterValue('list.filters')): ?>
+    $this->filters = $this->getUser()->getAttributeHolder()->getAll('sf_admin/<?php echo $this->getSingularName() ?>/filters');
+<?php endif; ?>
+
+    // pager
+    $this->pager = new sfDoctrinePager('<?php echo $this->getClassName() ?>', <?php echo $this->getParameterValue('list.max_per_page', 20) ?>);
+
+<?php if ($peerMethod = $this->getParameterValue('list.peer_method')): ?>    
+    $q = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')-><?php echo $peerMethod ?>();
+    $this->pager->setQuery($q);
+<?php endif; ?>
+
+    $this->addSortCriteria($this->pager->getQuery());
+    $this->addFiltersCriteria($this->pager->getQuery()); 
+    
+    $this->pager->setPage($this->getRequestParameter('page', $this->getUser()->getAttribute('page', 1, 'sf_admin/<?php echo $this->getSingularName() ?>')));
+    
+    $this->pager->init();
+    // Save page
+    if ($this->getRequestParameter('page')) {
+        $this->getUser()->setAttribute('page', $this->getRequestParameter('page'), 'sf_admin/<?php echo $this->getSingularName() ?>');
+    }
+  }
+
+  public function executeCreate ()
+  {
+    return $this->forward('<?php echo $this->getModuleName() ?>', 'edit');
+  }
+
+  public function executeSave ()
+  {
+    return $this->forward('<?php echo $this->getModuleName() ?>', 'edit');
+  }
+
+  public function executeEdit ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = $this->get<?php echo $this->getClassName() ?>OrCreate();
+
+    if ($this->getRequest()->getMethod() == sfRequest::POST)
+    {
+      $this->update<?php echo $this->getClassName() ?>FromRequest();
+
+      $this->save<?php echo $this->getClassName() ?>($this-><?php echo $this->getSingularName() ?>);
+
+      $this->setFlash('notice', 'Your modifications have been saved');
+
+      if ($this->getRequestParameter('save_and_add'))
+      {
+        return $this->redirect('<?php echo $this->getModuleName() ?>/create');
+      }
+      else if ($this->getRequestParameter('save_and_list'))
+      {
+        return $this->redirect('<?php echo $this->getModuleName() ?>/list');
+      }
+      else
+      {
+        return $this->redirect('<?php echo $this->getModuleName() ?>/edit?<?php echo $this->getPrimaryKeyUrlParams('this->') ?>);
+      }
+    }
+    else
+    {
+      $this->addJavascriptsForEdit();
+
+      $this->labels = $this->getLabels();
+    }
+    
+    // temporary fix to avoid using a distinct editSuccess.php template
+    sfLoader::loadHelpers(array('Helper', 'ObjectDoctrineAdmin'));
+  }
+
+  public function executeDelete ()
+  {
+    $this-><?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(<?php echo $this->getRetrieveByPkParamsForAction(40) ?>);
+    
+    $this->forward404Unless($this-><?php echo $this->getSingularName() ?>);
+
+    try
+    {
+      $this->delete<?php echo $this->getClassName() ?>($this-><?php echo $this->getSingularName() ?>);
+    }
+    catch (Doctrine_Exception $e)
+    {
+      $this->getRequest()->setError('delete', 'Could not delete the selected <?php echo sfInflector::humanize($this->getSingularName()) ?>. Make sure it does not have any associated items.');
+      return $this->forward('<?php echo $this->getModuleName() ?>', 'list');
+    }
+
+<?php foreach ($this->getColumnCategories('edit.display') as $category): ?>
+<?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?>
+<?php $input_type = $this->getParameterValue('edit.fields.'.$column->getName().'.type') ?>
+<?php if ($input_type == 'admin_input_file_tag'): ?>
+<?php $upload_dir = $this->replaceConstants($this->getParameterValue('edit.fields.'.$column->getName().'.upload_dir')) ?>
+      $currentFile = sfConfig::get('sf_upload_dir')."/<?php echo $upload_dir ?>/".<?php echo $this->getColumnGetter($column, true, 'this->')?>;
+      if (is_file($currentFile))
+      {
+        unlink($currentFile);
+      }
+
+<?php endif; ?>
+<?php endforeach; ?>
+<?php endforeach; ?>
+    return $this->redirect('<?php echo $this->getModuleName() ?>/list');
+  }
+
+  public function handleErrorEdit()
+  {
+    $this->preExecute();
+    $this-><?php echo $this->getSingularName() ?> = $this->get<?php echo $this->getClassName() ?>OrCreate();
+    $this->update<?php echo $this->getClassName() ?>FromRequest();
+
+    $this->addJavascriptsForEdit();
+
+    $this->labels = $this->getLabels();
+
+    // temporary fix to avoid using a distinct editSuccess.php template
+    sfLoader::loadHelpers(array('Helper', 'ObjectDoctrineAdmin'));
+
+    return sfView::SUCCESS;
+  }
+
+  protected function save<?php echo $this->getClassName() ?>($<?php echo $this->getSingularName() ?>)
+  {
+    $<?php echo $this->getSingularName() ?>->save();
+  }
+
+  protected function delete<?php echo $this->getClassName() ?>($<?php echo $this->getSingularName() ?>)
+  {
+    $<?php echo $this->getSingularName() ?>->delete();
+  }
+
+  protected function update<?php echo $this->getClassName() ?>FromRequest()
+  {
+    $<?php echo $this->getSingularName() ?> = $this->getRequestParameter('<?php echo $this->getSingularName() ?>');
+
+<?php foreach ($this->getColumnCategories('edit.display') as $category): ?>
+<?php foreach ($this->getColumns('edit.display', $category) as  $column): $type = $column->getDoctrineType(); ?>
+<?php $name = $column->getName();  ?>
+<?php if ($column->isPrimaryKey()) continue ?>
+<?php $credentials = $this->getParameterValue('edit.fields.'.$name.'.credentials') ?>
+<?php $input_type = $this->getParameterValue('edit.fields.'.$name.'.type') ?>
+<?php if ($credentials): $credentials = str_replace("\n", ' ', var_export($credentials, true)) ?>
+    if ($this->getUser()->hasCredential(<?php echo $credentials ?>))
+    {
+<?php endif; ?>
+<?php if ($input_type == 'admin_input_file_tag'): ?>
+<?php $upload_dir = $this->replaceConstants($this->getParameterValue('edit.fields.'.$column->getName().'.upload_dir')) ?>
+    $currentFile = sfConfig::get('sf_upload_dir')."/<?php echo $upload_dir ?>/".<?php echo $this->getColumnGetter($column, true, 'this->')?>;
+    if (!$this->getRequest()->hasErrors() && isset($<?php echo $this->getSingularName() ?>['<?php echo $name ?>_remove']))
+    {
+      <?php echo $this->getColumnSetter($column, '', true) ?>;
+      if (is_file($currentFile))
+      {
+        unlink($currentFile);
+      }
+    }
+
+    if (!$this->getRequest()->hasErrors() && $this->getRequest()->getFileSize('<?php echo $this->getSingularName() ?>[<?php echo $name ?>]'))
+    {
+<?php elseif ($type != 'boolean'): ?>
+    if (isset($<?php echo $this->getSingularName() ?>['<?php echo $name ?>']))
+    {
+<?php endif; ?>
+<?php if ($input_type == 'admin_input_file_tag'): ?>
+<?php if ($this->getParameterValue('edit.fields.'.$name.'.filename')): ?>
+      $fileName = "<?php echo str_replace('"', '\\"', $this->replaceConstants($this->getParameterValue('edit.fields.'.$column->getName().'.filename'))) ?>";
+<?php else: ?>
+      $fileName = md5($this->getRequest()->getFileName('<?php echo $this->getSingularName() ?>[<?php echo $name ?>]').time());
+<?php endif; ?>
+      $ext = $this->getRequest()->getFileExtension('<?php echo $this->getSingularName() ?>[<?php echo $name ?>]');
+      if (is_file($currentFile))
+      {
+        unlink($currentFile);
+      }
+      $this->getRequest()->moveFile('<?php echo $this->getSingularName() ?>[<?php echo $name ?>]', sfConfig::get('sf_upload_dir')."/<?php echo $upload_dir ?>/".$fileName.$ext);
+      <?php echo $this->getColumnSetter($column, '$fileName.$ext')?>;
+<?php elseif ($type == 'date' || $type == 'timestamp'): ?>
+      if ($<?php echo $this->getSingularName() ?>['<?php echo $name ?>'])
+      {
+        $dateFormat = new sfDateFormat($this->getUser()->getCulture());
+<?php 
+$inputPattern = ($type == 'date' ? 'd' : 'g');
+$outputPattern = ($type == 'date' ? 'i' : 'I'); 
+?>
+        // if this is a direct date input (rich == true)
+        if (!is_array($<?php echo $this->getSingularName() ?>['<?php echo $name ?>']))
+        {
+          try
+          {
+            $value = $dateFormat->format($<?php echo $this->getSingularName() ?>['<?php echo $name ?>'], '<?php echo $outputPattern ?>', $dateFormat->getInputPattern('<?php echo $inputPattern ?>'));
+          }
+          catch (sfException $e)
+          {
+            // not a valid date
+          }
+        }
+        else // rich == false
+        {
+          $value_array = $<?php echo $this->getSingularName() ?>['<?php echo $name ?>'];
+          $value = $value_array['year'].'-'.$value_array['month'].'-'.$value_array['day'].(isset($value_array['hour']) ? ' '.$value_array['hour'].':'.$value_array['minute'].(isset($value_array['second']) ? ':'.$value_array['second'] : '') : ''); 
+        }
+        <?php echo $this->getColumnSetter($column, '$value') ?>;
+      }
+      else
+      {
+        <?php echo $this->getColumnSetter($column, 'null') ?>;
+      }
+<?php elseif ($type == 'boolean'): ?>
+  <?php $boolVar = "\${$this->getSingularName()}['$name']";
+     echo $this->getColumnSetter($column, "isset($boolVar) ? $boolVar : 0") ?>;
+<?php elseif ($column->isForeignKey()): ?>
+      $foreignKey = $<?php echo $this->getSingularName() ?>['<?php echo $name ?>'];
+      $foreignKey = empty($foreignKey) ? null : $foreignKey;
+      $this-><?php echo $this->getSingularName()?>->set('<?php echo $column->getColumnName()?>', $foreignKey);
+<?php else: ?>
+      $this-><?php echo $this->getSingularName() ?>->set('<?php echo $column->getName() ?>', $<?php echo $this->getSingularName() ?>['<?php echo $name ?>']);
+<?php endif; ?>
+<?php if ($type != 'boolean'): ?>
+    }
+<?php endif; ?>
+
+<?php // double lists
+if (in_array($input_type, array('doctrine_admin_double_list', 'doctrine_admin_check_list', 'doctrine_admin_select_list'))): ?>
+      // Update many-to-many for "<?php echo $name ?>"
+      $<?php echo $name?>Table = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->getRelation('<?php echo $name ?>')->getTable();
+ 
+      $associationName = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->getRelation('<?php echo $name ?>')->getAssociationTable()->getOption('name');
+      $this-><?php echo $this->getSingularName()?>->$associationName->delete();
+ 
+      $ids = $this->getRequestParameter('associated_<?php echo $name ?>');
+      if (is_array($ids))
+      {
+        foreach ($ids as $id)
+        {
+          $id = explode('/', $id);
+          $this-><?php echo $this->getSingularName()?>->get('<?php echo $name ?>')->add($<?php echo $name?>Table->find($id));
+        }
+      }
+<?php endif; // double lists ?>
+<?php if ($credentials): ?>
+      }
+<?php endif; ?>
+<?php endforeach; ?>
+<?php endforeach; ?>
+  }
+
+  protected function get<?php echo $this->getClassName() ?>OrCreate (<?php echo $this->getMethodParamsForGetOrCreate() ?>)
+  {
+    if (<?php echo $this->getTestPksForGetOrCreate() ?>)
+    {
+      $<?php echo $this->getSingularName() ?> = new <?php echo $this->getClassName() ?>();
+    }
+    else
+    {
+      $<?php echo $this->getSingularName() ?> = sfDoctrine::getTable('<?php echo $this->getClassName() ?>')->find(array(<?php echo $this->getRetrieveByPkParamsForGetOrCreate() ?>));
+
+      $this->forward404Unless($<?php echo $this->getSingularName() ?>);
+    }
+
+    return $<?php echo $this->getSingularName() ?>;
+  }
+
+  protected function processFilters ()
+  {
+<?php if ($this->getParameterValue('list.filters')): ?>
+    if ($this->getRequest()->hasParameter('filter'))
+    {
+      $filters = $this->getRequestParameter('filters');
+<?php foreach ($this->getColumns('list.filters') as $column): $type = $column->getDoctrineType() ?>
+<?php if ($type == 'date' || $type == 'timestamp'): 
+$inputPattern = ($type == 'date' ? 'd' : 'g');
+$outputPattern = ($type == 'date' ? 'i' : 'I'); ?>
+        $dateFormat = new sfDateFormat($this->getUser()->getCulture());
+
+      if (isset($filters['<?php echo $column->getName() ?>']['from']) && $filters['<?php echo $column->getName() ?>']['from'] !== '')
+      {
+        $filters['<?php echo $column->getName() ?>']['from'] = $dateFormat->format($filters['<?php echo $column->getName() ?>']['from'], '<?php echo $outputPattern?>', $dateFormat->getInputPattern('<?php echo $inputPattern ?>'));
+      }
+      if (isset($filters['<?php echo $column->getName() ?>']['to']) && $filters['<?php echo $column->getName() ?>']['to'] !== '')
+      {
+        $filters['<?php echo $column->getName() ?>']['to'] = $dateFormat->format($filters['<?php echo $column->getName() ?>']['to'], '<?php echo $outputPattern?>', $dateFormat->getInputPattern('<?php echo $inputPattern ?>'));
+      }
+<?php endif; ?>
+<?php endforeach; ?>
+      $this->getUser()->getAttributeHolder()->removeNamespace('sf_admin/<?php echo $this->getSingularName() ?>');
+      $this->getUser()->getAttributeHolder()->removeNamespace('sf_admin/<?php echo $this->getSingularName() ?>/filters');
+      $this->getUser()->getAttributeHolder()->add($filters, 'sf_admin/<?php echo $this->getSingularName() ?>/filters');
+    }
+<?php endif; ?>
+  }
+
+  protected function processSort ()
+  {
+    if ($this->getRequestParameter('sort'))
+    {
+      $this->getUser()->setAttribute('sort', $this->getRequestParameter('sort'), 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+      $this->getUser()->setAttribute('type', $this->getRequestParameter('type', 'asc'), 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+    }
+
+    if (!$this->getUser()->getAttribute('sort', null, 'sf_admin/<?php echo $this->getSingularName() ?>/sort'))
+    {
+<?php if ($sort = $this->getParameterValue('list.sort')): ?>
+<?php if (is_array($sort)): ?>
+      $this->getUser()->setAttribute('sort', '<?php echo $sort[0] ?>', 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+      $this->getUser()->setAttribute('type', '<?php echo $sort[1] ?>', 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+<?php else: ?>
+      $this->getUser()->setAttribute('sort', '<?php echo $sort ?>', 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+      $this->getUser()->setAttribute('type', 'asc', 'sf_admin/<?php echo $this->getSingularName() ?>/sort');
+<?php endif; ?>
+<?php endif; ?>
+    }
+  }
+
+  protected function addFiltersCriteria ($q)
+  {
+<?php if ($this->getParameterValue('list.filters')): ?>
+<?php foreach ($this->getColumns('list.filters') as $column): $type = $column->getDoctrineType() ?>
+<?php if (($column->isPartial() || $column->isComponent()) && $this->getParameterValue('list.fields.'.$column->getName().'.filter_criteria_disabled')) continue ?>
+<?php 
+$filterColumnName = $column->getName();
+if ($column->isForeignKey())
+  $filterColumnName = $column->getColumnName();
+$queryColumn = $this->getClassName().'.'.$filterColumnName;?>
+    if (isset($this->filters['<?php echo $column->getName() ?>_is_empty']))
+    {
+      $q->addWhere("<?php echo $queryColumn?> = '' OR <?php echo $queryColumn?> IS NULL");
+    }
+<?php if ($type == 'date' || $type == 'timestamp'): ?>
+    else if (isset($this->filters['<?php echo $column->getName() ?>']))
+    {
+      if (isset($this->filters['<?php echo $column->getName() ?>']['from']) && $this->filters['<?php echo $column->getName() ?>']['from'] !== '')
+      {
+<?php 
+$dateArg = "\$this->filters['{$column->getName()}']['%s']";
+?>
+        $q->addWhere('<?php echo $queryColumn?> >= ?', <?php echo sprintf($dateArg, 'from') ?>);
+      }
+      if (isset($this->filters['<?php echo $column->getName() ?>']['to']) && $this->filters['<?php echo $column->getName() ?>']['to'] !== '')
+      {
+        $q->addWhere('<?php echo $queryColumn?> <= ?', <?php echo sprintf($dateArg, 'to') ?>);
+      }
+
+    }
+<?php else: ?>
+    else if (isset($this->filters['<?php echo $column->getName() ?>']) && $this->filters['<?php echo $column->getName() ?>'] !== '')
+    {
+<?php if ($type == 'char' || $type == 'string'): ?>
+      $q->addWhere("<?php echo $queryColumn?> LIKE ?", '%'.$this->filters['<?php echo $column->getName() ?>'].'%');
+<?php else: ?>
+      $q->addWhere("<?php echo $queryColumn?> = ?", $this->filters['<?php echo $column->getName() ?>']);
+<?php endif; ?>
+    }
+<?php endif; ?>
+<?php endforeach; ?>
+<?php endif; ?>
+  }
+
+  protected function addSortCriteria ($q)
+  {
+    if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/<?php echo $this->getSingularName() ?>/sort'))
+    {
+      $table = sfDoctrine::getTable('<?php echo $this->getClassName()?>');
+      $colNames = array_keys($table->getColumns());
+      if (!in_array($sort_column, $colNames)) // illegal column name
+        return;
+      if ($this->getUser()->getAttribute('type', null, 'sf_admin/<?php echo $this->getSingularName() ?>/sort') == 'asc')
+      {
+        $q->orderBy('<?php echo $this->getClassName()?>.'.$sort_column);
+      }
+      else
+      {
+        $q->orderBy('<?php echo $this->getClassName()?>.'.$sort_column.' desc');
+      }
+    }
+  }
+
+  protected function addJavascriptsForEdit()
+  {
+    $this->getResponse()->addJavascript(sfConfig::get('sf_prototype_web_dir').'/js/prototype');
+    $this->getResponse()->addJavascript(sfConfig::get('sf_admin_web_dir').'/js/collapse');
+    $this->getResponse()->addJavascript(sfConfig::get('sf_admin_web_dir').'/js/double_list');
+  }
+
+  protected function getLabels()
+  {
+    return array(
+<?php foreach ($this->getColumnCategories('edit.display') as $category): ?>
+<?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?>
+      '<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}' => '<?php $label_name = str_replace("'", "\\'", $this->getParameterValue('edit.fields.'.$column->getName().'.name')); echo $label_name ?><?php if ($label_name): ?>:<?php endif; ?>',
+<?php endforeach; ?>
+<?php endforeach; ?>
+    );
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_actions.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_actions.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d0d7203c64fd3bfedecf321c4484df585b21a70
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_actions.php
@@ -0,0 +1,13 @@
+<ul class="sf_admin_actions">
+<?php $editActions = $this->getParameterValue('edit.actions') ?>
+<?php if (null !== $editActions): ?>
+<?php foreach ((array) $editActions as $actionName => $params): ?>
+  <?php if ($actionName == '_delete') continue ?>
+  <?php echo $this->addCredentialCondition($this->getButtonToAction($actionName, $params, true), $params) ?>
+<?php endforeach; ?>
+<?php else: ?>
+  <?php echo $this->getButtonToAction('_list', array(), true) ?>
+  <?php echo $this->getButtonToAction('_save', array(), true) ?>
+  <?php echo $this->getButtonToAction('_save_and_add', array(), true) ?>
+<?php endif; ?>
+</ul>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_footer.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_form.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_form.php
new file mode 100644
index 0000000000000000000000000000000000000000..f130179572e9eab041b18e07519370bc4a88ea20
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_form.php
@@ -0,0 +1,86 @@
+[?php echo form_tag('<?php echo $this->getModuleName() ?>/save', array(
+  'id'        => 'sf_admin_edit_form',
+  'name'      => 'sf_admin_edit_form',
+  'multipart' => true,
+<?php foreach ($this->getColumnCategories('edit.display') as $category): ?>
+<?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?>
+<?php if (false !== strpos($this->getParameterValue('edit.fields.'.$column->getName().'.type'), 'admin_double_list')): ?>
+  'onsubmit'  => 'double_list_submit(); return true;'
+<?php break 2; ?>
+<?php endif; ?>
+<?php endforeach; ?>
+<?php endforeach; ?>
+)) ?]
+
+<?php foreach ($this->getPrimaryKey() as $pk): ?>
+[?php echo object_input_hidden_tag($<?php echo $this->getSingularName() ?>, 'get<?php echo $pk->getPhpName() ?>') ?]
+<?php endforeach; ?>
+
+<?php $first = true ?>
+<?php foreach ($this->getColumnCategories('edit.display') as $category): ?>
+<?php
+  if ($category[0] == '-')
+  {
+    $category_name = substr($category, 1);
+    $collapse = true;
+
+    if ($first)
+    {
+      $first = false;
+      echo "[?php use_javascript(sfConfig::get('sf_prototype_web_dir').'/js/prototype') ?]\n";
+      echo "[?php use_javascript(sfConfig::get('sf_admin_web_dir').'/js/collapse') ?]\n";
+    }
+  }
+  else
+  {
+    $category_name = $category;
+    $collapse = false;
+  }
+?>
+<fieldset id="sf_fieldset_<?php echo preg_replace('/[^a-z0-9_]/', '_', strtolower($category_name)) ?>" class="<?php if ($collapse): ?> collapse<?php endif; ?>">
+<?php if ($category != 'NONE'): ?><h2>[?php echo __('<?php echo $category_name ?>') ?]</h2>
+
+<?php endif; ?>
+
+<?php $hides = $this->getParameterValue('edit.hide', array()) ?>
+<?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?>
+<?php if (in_array($column->getName(), $hides)) continue ?>
+<?php if ($column->isPrimaryKey()) continue ?>
+<?php $credentials = $this->getParameterValue('edit.fields.'.$column->getName().'.credentials') ?>
+<?php if ($credentials): $credentials = str_replace("\n", ' ', var_export($credentials, true)) ?>
+    [?php if ($sf_user->hasCredential(<?php echo $credentials ?>)): ?]
+<?php endif; ?>
+<div class="form-row">
+  [?php echo label_for('<?php echo $this->getParameterValue("edit.fields.".$column->getName().".label_for", $this->getSingularName()."[".$column->getName()."]") ?>', __($labels['<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}']), '<?php if ($column->isNotNull()): ?>class="required" <?php endif; ?>') ?]
+  <div class="content[?php if ($sf_request->hasError('<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}')): ?] form-error[?php endif; ?]">
+  [?php if ($sf_request->hasError('<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}')): ?]
+    [?php echo form_error('<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}', array('class' => 'form-error-msg')) ?]
+  [?php endif; ?]
+
+  [?php $value = <?php echo $this->getColumnEditTag($column); ?>; echo $value ? $value : '&nbsp;' ?]
+  <?php echo $this->getHelp($column, 'edit') ?>
+  </div>
+</div>
+<?php if ($credentials): ?>
+    [?php endif; ?]
+<?php endif; ?>
+
+<?php endforeach; ?>
+</fieldset>
+<?php endforeach; ?>
+
+[?php include_partial('edit_actions', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>)) ?]
+
+</form>
+
+<ul class="sf_admin_actions">
+<?php
+/*
+ * WARNING: delete is a form, it must be outside the main form
+ */
+ $editActions = $this->getParameterValue('edit.actions');
+?>
+  <?php if (null === $editActions || (null !== $editActions && array_key_exists('_delete', $editActions))): ?>
+    <?php echo $this->addCredentialCondition($this->getButtonToAction('_delete', $editActions['_delete'], true), $editActions['_delete']) ?>
+  <?php endif; ?>
+</ul>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_header.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_header.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_messages.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_messages.php
new file mode 100644
index 0000000000000000000000000000000000000000..32fff4175150d6dfe3d94ab89300f310420cf149
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_edit_messages.php
@@ -0,0 +1,15 @@
+[?php if ($sf_request->hasErrors()): ?]
+<div class="form-errors">
+<h2>[?php echo __('There are some errors that prevent the form to validate') ?]</h2>
+<dl>
+[?php foreach ($sf_request->getErrorNames() as $name): ?]
+  <dt>[?php echo __($labels[$name]) ?]</dt>
+  <dd>[?php echo $sf_request->getError($name) ?]</dd>
+[?php endforeach; ?]
+</dl>
+</div>
+[?php elseif ($sf_flash->has('notice')): ?]
+<div class="save-ok">
+<h2>[?php echo __($sf_flash->get('notice')) ?]</h2>
+</div>
+[?php endif; ?]
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_filters.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_filters.php
new file mode 100644
index 0000000000000000000000000000000000000000..dbe284ef20ed088a9407edba0a7ce6140d0a8f50
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_filters.php
@@ -0,0 +1,37 @@
+[?php use_helper('Object') ?]
+
+<?php if ($this->getParameterValue('list.filters')): ?>
+<div class="sf_admin_filters">
+[?php echo form_tag('<?php echo $this->getModuleName() ?>/list', array('method' => 'get')) ?]
+
+  <fieldset>
+    <h2>[?php echo __('filters') ?]</h2>
+<?php foreach ($this->getColumns('list.filters') as $column): $type = $column->getCreoleType() ?>
+<?php $credentials = $this->getParameterValue('list.fields.'.$column->getName().'.credentials') ?>
+<?php if ($credentials): $credentials = str_replace("\n", ' ', var_export($credentials, true)) ?>
+    [?php if ($sf_user->hasCredential(<?php echo $credentials ?>)): ?]
+<?php endif; ?>
+    <div class="form-row">
+    <label for="<?php echo $column->getName() ?>">[?php echo __('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>:') ?]</label>
+    <div class="content">
+    [?php echo <?php echo $this->getColumnFilterTag($column) ?> ?]
+<?php if ($this->getParameterValue('list.fields.'.$column->getName().'.filter_is_empty')): ?>
+    <div>[?php echo checkbox_tag('filters[<?php echo $column->getName() ?>_is_empty]', 1, isset($filters['<?php echo $column->getName() ?>_is_empty']) ? $filters['<?php echo $column->getName() ?>_is_empty'] : null) ?]&nbsp;<label for="filters[<?php echo $column->getName() ?>_is_empty]">[?php echo __('is empty') ?]</label></div>
+<?php endif; ?>
+    </div>
+    </div>
+<?php if ($credentials): ?>
+    [?php endif; ?]
+<?php endif; ?>
+
+    <?php endforeach; ?>
+  </fieldset>
+
+  <ul class="sf_admin_actions">
+    <li>[?php echo button_to(__('reset'), '<?php echo $this->getModuleName() ?>/list?filter=filter', 'class=sf_admin_action_reset_filter') ?]</li>
+    <li>[?php echo submit_tag(__('filter'), 'name=filter class=sf_admin_action_filter') ?]</li>
+  </ul>
+
+</form>
+</div>
+<?php endif; ?>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f9d896555c1cbc2b96b66462e4b30841755af2a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list.php
@@ -0,0 +1,36 @@
+<table cellspacing="0" class="sf_admin_list">
+<thead>
+<tr>
+[?php include_partial('list_th_<?php echo $this->getParameterValue('list.layout', 'tabular') ?>') ?]
+<?php if ($this->getParameterValue('list.object_actions')): ?>
+  <th id="sf_admin_list_th_sf_actions">[?php echo __('Actions') ?]</th>
+<?php endif; ?>
+</tr>
+</thead>
+<tbody>
+[?php $i = 1; foreach ($pager->getResults() as $<?php echo $this->getSingularName() ?>): $odd = fmod(++$i, 2) ?]
+<tr class="sf_admin_row_[?php echo $odd ?]">
+[?php include_partial('list_td_<?php echo $this->getParameterValue('list.layout', 'tabular') ?>', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>)) ?]
+[?php include_partial('list_td_actions', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>)) ?]
+</tr>
+[?php endforeach; ?]
+</tbody>
+<tfoot>
+<tr><th colspan="<?php echo $this->getParameterValue('list.object_actions') ? count($this->getColumns('list.display')) + 1 : count($this->getColumns('list.display')) ?>">
+<div class="float-right">
+[?php if ($pager->haveToPaginate()): ?]
+  [?php echo link_to(image_tag(sfConfig::get('sf_admin_web_dir').'/images/first.png', array('align' => 'absmiddle', 'alt' => __('First'), 'title' => __('First'))), '<?php echo $this->getModuleName() ?>/list?page=1') ?]
+  [?php echo link_to(image_tag(sfConfig::get('sf_admin_web_dir').'/images/previous.png', array('align' => 'absmiddle', 'alt' => __('Previous'), 'title' => __('Previous'))), '<?php echo $this->getModuleName() ?>/list?page='.$pager->getPreviousPage()) ?]
+
+  [?php foreach ($pager->getLinks() as $page): ?]
+    [?php echo link_to_unless($page == $pager->getPage(), $page, '<?php echo $this->getModuleName() ?>/list?page='.$page) ?]
+  [?php endforeach; ?]
+
+  [?php echo link_to(image_tag(sfConfig::get('sf_admin_web_dir').'/images/next.png', array('align' => 'absmiddle', 'alt' => __('Next'), 'title' => __('Next'))), '<?php echo $this->getModuleName() ?>/list?page='.$pager->getNextPage()) ?]
+  [?php echo link_to(image_tag(sfConfig::get('sf_admin_web_dir').'/images/last.png', array('align' => 'absmiddle', 'alt' => __('Last'), 'title' => __('Last'))), '<?php echo $this->getModuleName() ?>/list?page='.$pager->getLastPage()) ?]
+[?php endif; ?]
+</div>
+[?php echo format_number_choice('[0] no result|[1] 1 result|(1,+Inf] %1% results', array('%1%' => $pager->getNbResults()), $pager->getNbResults()) ?]
+</th></tr>
+</tfoot>
+</table>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_actions.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_actions.php
new file mode 100644
index 0000000000000000000000000000000000000000..a13263c362049f0217ddc35d76488562c0a71ea3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_actions.php
@@ -0,0 +1,10 @@
+<ul class="sf_admin_actions">
+<?php $listActions = $this->getParameterValue('list.actions') ?>
+<?php if (null !== $listActions): ?>
+  <?php foreach ((array) $listActions as $actionName => $params): ?>
+    <?php echo $this->addCredentialCondition($this->getButtonToAction($actionName, $params, false), $params) ?>
+  <?php endforeach; ?>
+<?php else: ?>
+  <?php echo $this->getButtonToAction('_create', array(), false) ?>
+<?php endif; ?>
+</ul>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_footer.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_header.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_header.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_messages.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_messages.php
new file mode 100644
index 0000000000000000000000000000000000000000..f860b2542f5de0a47d24f0da5d7a6d07bfb70144
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_messages.php
@@ -0,0 +1,8 @@
+[?php if ($sf_request->getError('delete')): ?]
+<div class="form-errors">
+  <h2>[?php echo __('Could not delete the selected %name%', array('%name%' => '<?php echo sfInflector::humanize($this->getSingularName()) ?>')) ?]</h2>
+  <ul>
+    <li>[?php echo $sf_request->getError('delete') ?]</li>
+  </ul>
+</div>
+[?php endif; ?]
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_actions.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_actions.php
new file mode 100644
index 0000000000000000000000000000000000000000..fa96473c7363409b34ceb2f17c73227ec4f12c33
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_actions.php
@@ -0,0 +1,9 @@
+<?php if ($this->getParameterValue('list.object_actions')): ?>
+<td>
+<ul class="sf_admin_td_actions">
+<?php foreach ($this->getParameterValue('list.object_actions') as $actionName => $params): ?>
+  <?php echo $this->addCredentialCondition($this->getLinkToAction($actionName, $params, true), $params) ?>
+<?php endforeach; ?>
+</ul>
+</td>
+<?php endif; ?>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_stacked.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_stacked.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d9e274ece424f122765735c0732251eeae0fc41
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_stacked.php
@@ -0,0 +1,16 @@
+<td colspan="<?php echo count($this->getColumns('list.display'))  ?>">
+<?php if ($this->getParameterValue('list.params')): ?>
+  <?php echo $this->getI18NString('list.params') ?>
+<?php else: ?>
+<?php $hides = $this->getParameterValue('list.hide', array()) ?>
+<?php foreach ($this->getColumns('list.display') as $column): ?>
+<?php if (in_array($column->getName(), $hides)) continue ?>
+  <?php if ($column->isLink()): ?>
+  [?php echo link_to(<?php echo $this->getColumnListTag($column) ?> ? <?php echo $this->getColumnListTag($column) ?> : __('-'), '<?php echo $this->getModuleName() ?>/edit?<?php echo $this->getPrimaryKeyUrlParams() ?>) ?]
+  <?php else: ?>
+  [?php echo <?php echo $this->getColumnListTag($column) ?> ?]
+  <?php endif; ?>
+   - 
+<?php endforeach; ?>
+<?php endif; ?>
+</td>
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_tabular.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_tabular.php
new file mode 100644
index 0000000000000000000000000000000000000000..19f482b23b8c38eb73fd0ebf409870bfb05bd7f1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_td_tabular.php
@@ -0,0 +1,16 @@
+<?php $hs = $this->getParameterValue('list.hide', array()) ?>
+<?php foreach ($this->getColumns('list.display') as $column): ?>
+<?php if (in_array($column->getName(), $hs)) continue ?>
+<?php $credentials = $this->getParameterValue('list.fields.'.$column->getName().'.credentials') ?>
+<?php if ($credentials): $credentials = str_replace("\n", ' ', var_export($credentials, true)) ?>
+    [?php if ($sf_user->hasCredential(<?php echo $credentials ?>)): ?]
+<?php endif; ?>
+  <?php if ($column->isLink()): ?>
+  <td>[?php echo link_to(<?php echo $this->getColumnListTag($column) ?> ? <?php echo $this->getColumnListTag($column) ?> : __('-'), '<?php echo $this->getModuleName() ?>/edit?<?php echo $this->getPrimaryKeyUrlParams() ?>) ?]</td>
+<?php else: ?>
+  <td>[?php echo <?php echo $this->getColumnListTag($column) ?> ?]</td>
+  <?php endif; ?>
+<?php if ($credentials): ?>
+    [?php endif; ?]
+<?php endif; ?>
+<?php endforeach; ?>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_stacked.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_stacked.php
new file mode 100644
index 0000000000000000000000000000000000000000..305bdcf60d11678415fc40f8eec58981c360e1fb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_stacked.php
@@ -0,0 +1 @@
+[?php include_partial('list_th_tabular') ?]
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_tabular.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_tabular.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e9d4b8244e5481e9b60870e355ebcbf1e2afce9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/_list_th_tabular.php
@@ -0,0 +1,24 @@
+<?php $hides = $this->getParameterValue('list.hide', array()) ?>
+<?php foreach ($this->getColumns('list.display') as $column): ?>
+<?php if (in_array($column->getName(), $hides)) continue ?>
+<?php $credentials = $this->getParameterValue('list.fields.'.$column->getName().'.credentials') ?>
+<?php if ($credentials): $credentials = str_replace("\n", ' ', var_export($credentials, true)) ?>
+    [?php if ($sf_user->hasCredential(<?php echo $credentials ?>)): ?]
+<?php endif; ?>
+  <th id="sf_admin_list_th_<?php echo $column->getName() ?>">
+    <?php if ($column->isReal()): ?>
+      [?php if ($sf_user->getAttribute('sort', null, 'sf_admin/<?php echo $this->getSingularName() ?>/sort') == '<?php echo $column->getName() ?>'): ?]
+      [?php echo link_to(__('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>'), '<?php echo $this->getModuleName() ?>/list?sort=<?php echo $column->getName() ?>&type='.($sf_user->getAttribute('type', 'asc', 'sf_admin/<?php echo $this->getSingularName() ?>/sort') == 'asc' ? 'desc' : 'asc')) ?]
+      ([?php echo __($sf_user->getAttribute('type', 'asc', 'sf_admin/<?php echo $this->getSingularName() ?>/sort')) ?])
+      [?php else: ?]
+      [?php echo link_to(__('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>'), '<?php echo $this->getModuleName() ?>/list?sort=<?php echo $column->getName() ?>&type=asc') ?]
+      [?php endif; ?]
+    <?php else: ?>
+    [?php echo __('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>') ?]
+    <?php endif; ?>
+    <?php echo $this->getHelpAsIcon($column, 'list') ?>
+  </th>
+<?php if ($credentials): ?>
+    [?php endif; ?]
+<?php endif; ?>
+<?php endforeach; ?>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/editSuccess.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/editSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..de2348ecf3c65116560864ad3606c23f472e4486
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/editSuccess.php
@@ -0,0 +1,22 @@
+[?php use_helper('Object', 'Validation', 'ObjectAdmin', 'I18N', 'Date') ?]
+
+[?php use_stylesheet('<?php echo $this->getParameterValue('css', sfConfig::get('sf_admin_web_dir').'/css/main') ?>') ?]
+
+<div id="sf_admin_container">
+
+<h1><?php echo $this->getI18NString('edit.title', 'edit '.$this->getModuleName()) ?></h1>
+
+<div id="sf_admin_header">
+[?php include_partial('<?php echo $this->getModuleName() ?>/edit_header', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>)) ?]
+</div>
+
+<div id="sf_admin_content">
+[?php include_partial('<?php echo $this->getModuleName() ?>/edit_messages', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>, 'labels' => $labels)) ?]
+[?php include_partial('<?php echo $this->getModuleName() ?>/edit_form', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>, 'labels' => $labels)) ?]
+</div>
+
+<div id="sf_admin_footer">
+[?php include_partial('<?php echo $this->getModuleName() ?>/edit_footer', array('<?php echo $this->getSingularName() ?>' => $<?php echo $this->getSingularName() ?>)) ?]
+</div>
+
+</div>
diff --git a/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/listSuccess.php b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/listSuccess.php
new file mode 100644
index 0000000000000000000000000000000000000000..f29b9f8d906842db53f48f6a90ee5bda48af5163
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/generator/sfDoctrineAdmin/default/template/templates/listSuccess.php
@@ -0,0 +1,33 @@
+[?php use_helper('I18N', 'Date') ?]
+
+[?php use_stylesheet('<?php echo $this->getParameterValue('css', sfConfig::get('sf_admin_web_dir').'/css/main') ?>') ?]
+
+<div id="sf_admin_container">
+
+<h1><?php echo $this->getI18NString('list.title', $this->getModuleName().' list') ?></h1>
+
+<div id="sf_admin_header">
+[?php include_partial('<?php echo $this->getModuleName() ?>/list_header', array('pager' => $pager)) ?]
+[?php include_partial('<?php echo $this->getModuleName() ?>/list_messages', array('pager' => $pager)) ?]
+</div>
+
+<div id="sf_admin_bar">
+<?php if ($this->getParameterValue('list.filters')): ?>
+[?php include_partial('filters', array('filters' => $filters)) ?]
+<?php endif; ?>
+</div>
+
+<div id="sf_admin_content">
+[?php if (!$pager->getNbResults()): ?]
+[?php echo __('no result') ?]
+[?php else: ?]
+[?php include_partial('<?php echo $this->getModuleName() ?>/list', array('pager' => $pager)) ?]
+[?php endif; ?]
+[?php include_partial('list_actions') ?]
+</div>
+
+<div id="sf_admin_footer">
+[?php include_partial('<?php echo $this->getModuleName() ?>/list_footer', array('pager' => $pager)) ?]
+</div>
+
+</div>
diff --git a/website/plugins/sfDoctrinePlugin/data/tasks/sfPakeDoctrine.php b/website/plugins/sfDoctrinePlugin/data/tasks/sfPakeDoctrine.php
new file mode 100644
index 0000000000000000000000000000000000000000..a08b87c2d4c57a5c582b04765cb5c31df232b318
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/data/tasks/sfPakeDoctrine.php
@@ -0,0 +1,897 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @author     Nathanael D. Noblet <nathanael@gnat.ca>
+ * @version    SVN: $Id: sfPakeDoctrine.php 4878 2007-08-17 17:45:54Z Jonathan.Wage $
+ */
+
+pake_desc('converts propel schema.*ml into doctrine schema');
+pake_task('doctrine-import', 'project_exists');
+
+pake_desc('exports doctrine schemas to sql');
+pake_task('doctrine-build-sql', 'project_exists');
+
+pake_desc('insert sql for doctrine schemas in to database');
+pake_task('doctrine-insert-sql', 'project_exists');
+
+pake_desc('build Doctrine classes');
+pake_task('doctrine-build-model', 'project_exists');
+
+pake_desc('Creates Doctrine CRUD Module');
+pake_task('doctrine-generate-crud', 'app_exists');
+
+pake_desc('initialize a new doctrine admin module');
+pake_task('doctrine-init-admin', 'app_exists');
+
+pake_desc('dump data to yaml fixtures file');
+pake_task('doctrine-dump-data', 'project_exists');
+
+pake_desc('load data from yaml fixtures file');
+pake_task('doctrine-load-data', 'project_exists');
+
+pake_desc('load doctrine nested set data from nested set fixtures file');
+pake_task('doctrine-load-nested-set', 'project_exists');
+
+pake_desc('doctrine build all - generate model and initialize database, drops current database if exists');
+pake_task('doctrine-build-all', 'project_exists');
+
+pake_desc('doctrine build all load - generate model, initialize database, and load data from fixtures. Drops current database if exists');
+pake_task('doctrine-build-all-load', 'project_exists');
+
+pake_desc('doctrine build schema - build schema from an existing database');
+pake_task('doctrine-build-schema', 'project_exists');
+
+pake_desc('doctrine drop all - drop all database tables');
+pake_task('doctrine-drop-all-tables', 'project_exists');
+
+pake_desc('doctrine build database - initialize database, drop current database if exists');
+pake_task('doctrine-build-db', 'project_exists');
+
+pake_desc('doctrine drop database - drops database');
+pake_task('doctrine-drop-db', 'project_exists');
+
+function run_doctrine_drop_all_tables($task, $args)
+{
+  if (!count($args))
+  {
+    throw new Exception('You must provide the app.');
+  }
+
+  $app = $args[0];
+  
+  $env = empty($args[1]) ? 'dev' : $args[1];
+  
+  _load_application_environment($app, $env);
+  
+  $sf_root_dir = sfConfig::get('sf_root_dir');
+  
+  $declared = get_declared_classes();
+  
+  $directory = sfConfig::get('sf_lib_dir').DIRECTORY_SEPARATOR.'model'.DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR;
+  if ($directory !== null)
+  {
+      foreach ((array) $directory as $dir)
+      {
+        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir),
+                                                RecursiveIteratorIterator::LEAVES_ONLY);
+                                              
+        foreach ($it as $file)
+        {
+            $e = explode('.', $file->getFileName());
+            if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false)
+            {
+                require_once $file->getPathName();
+            }
+        }
+    }
+    
+    $declared = array_diff(get_declared_classes(), $declared);
+  }
+
+  $parent = new ReflectionClass('Doctrine_Record');
+  
+  $sql = array();
+  $fks = array();
+
+  // we iterate trhough the diff of previously declared classes 
+  // and currently declared classes
+  foreach ($declared as $name)
+  {
+      $class = new ReflectionClass($name);
+      $conn  = Doctrine_Manager::getInstance()->getConnectionForComponent($name);
+
+      // check if class is an instance of Doctrine_Record and not abstract
+      // class must have method setTableDefinition (to avoid non-Record subclasses like symfony's sfDoctrineRecord)
+      if ($class->isSubclassOf($parent) && ! $class->isAbstract() && method_exists($class->getName(), 'setTableDefinition'))
+      {
+          $record = new $name();
+          $table  = $record->getTable();
+          
+          try {
+            pake_echo_action('doctrine', "dropping table '".$table->getTableName()."'");
+            
+            $table->getConnection()->export->dropTable($table->getTableName());
+          } catch(Exception $e) {
+            continue;
+          }
+      }
+  }
+}
+
+function run_doctrine_load_data($task, $args)
+{
+  if (!count($args))
+  { 
+    throw new Exception('You must provide the app.');
+  }
+ 
+  $app = $args[0];
+ 
+  if (!is_dir(sfConfig::get('sf_app_dir').DIRECTORY_SEPARATOR.$app))
+  { 
+    throw new Exception('The app "'.$app.'" does not exist.');
+  }
+ 
+  if (count($args) > 1 && $args[count($args) - 1] == 'append')
+  { 
+    array_pop($args);
+    $delete = false;
+  }
+  else
+  { 
+    $delete = true;
+  }
+ 
+  $env = empty($args[1]) ? 'dev' : $args[1];
+ 
+  _load_application_environment($app, $env);
+  
+  if (count($args) == 1)
+  {
+    if (!$pluginDirs = glob(sfConfig::get('sf_root_dir').'/plugins/*/data'))
+    {
+      $pluginDirs = array();
+    }
+    $fixtures_dirs = pakeFinder::type('dir')->name('fixtures')->in(array_merge($pluginDirs, array(sfConfig::get('sf_data_dir'))));
+  }
+  else
+  {
+    $fixtures_dirs = array_slice($args, 1);
+  }
+ 
+  $data = new sfDoctrineData();
+  $data->setDeleteCurrentData($delete);
+ 
+  foreach ($fixtures_dirs as $fixtures_dir)
+  {
+    if (!is_readable($fixtures_dir))
+    {
+      continue;
+    }
+ 
+    pake_echo_action('doctrine', sprintf('load data from "%s"', $fixtures_dir));
+ 
+    $data->loadData($fixtures_dir);
+  }
+}
+
+function run_doctrine_import($task, $args)
+{
+  $type = 'xml';
+  if (isset($args[0]))
+    $type = $args[0];
+
+  $schemas = _doctrine_load('propel', $type, false);
+  
+  $doctrineSchemasDir = sfConfig::get('sf_config_dir').DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR;
+  
+  pake_mkdirs($doctrineSchemasDir);
+
+  foreach($schemas as $schema)
+  {
+    $doctrineYml = $schema->asDoctrineYml();
+    $classes = $schema->getClasses();
+    $class = array_pop($classes);
+    $package = $class->getTable()->getPackage();
+    $filePath = $package.'.yml';
+    
+    pake_echo_action('writing', $filePath);
+    
+    file_put_contents($doctrineSchemasDir.$filePath, $doctrineYml['source']);
+  }
+}
+
+function run_doctrine_export($task, $args)
+{
+  $schemas = _doctrine_load('doctrine', 'yml', false);
+  
+  $configDir = sfConfig::get('sf_config_dir').DIRECTORY_SEPARATOR;
+  
+  foreach($schemas as $schema)
+  {
+    $propelXml = $schema->asPropelXml();
+    
+    // we do some tidying before echoing the xml
+    $source = preg_replace(array('#</database#', '#<(/?)table#', '#<column#', '#<(/?)foreign-key#', '#<reference#'), array("\n</database", "\n<\\1table", "\n  <column", "\n  <\\1foreign-key", "\n    <reference",), $propelXml['source']);
+    
+    $filePath = $propelXml['name'].'-schema.xml';
+    
+    pake_echo_action('writing', $filePath);
+    
+    file_put_contents($configDir.$filePath, $source);
+  }
+}
+
+function run_doctrine_insert_sql($task, $args)
+{
+  if (!count($args))
+  {
+    throw new Exception('You must provide the app.');
+  }
+
+  $app = $args[0];
+  
+  $env = empty($args[1]) ? 'dev' : $args[1];
+  
+  _load_application_environment($app, $env);
+  
+  $sf_root_dir = sfConfig::get('sf_root_dir');
+  
+  $directories = sfFinder::type('dir')->maxdepth(0)->ignore_version_control()->in(sfConfig::get('sf_model_lib_dir').'/doctrine');
+  
+  Doctrine::exportSchema($directories);
+  
+  pake_echo_action('doctrine', 'sql was inserted successfully');
+  
+  return;
+}
+
+function run_doctrine_build_sql($task,$args)
+{
+    if(count($args) < 1)
+    {
+        throw new Exception('You must provide your app name.');
+    }
+    
+    $sf_root_dir = sfConfig::get('sf_root_dir');
+    define('SF_APP',         $args[0]);
+    $connection = isset($args[1])?$args[1]:'all';
+    
+    simpleAutoloader::registerCallable(array('Doctrine','autoload'));
+
+    sfConfig::set('sf_app_module_dir',$sf_root_dir.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR);
+
+    $doctrineSchemaPathScheme = DIRECTORY_SEPARATOR.'model'.DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR;
+    $doctrineModelDir = sfConfig::get('sf_lib_dir').$doctrineSchemaPathScheme;
+    $generatedDir = $doctrineModelDir.'generated'.DIRECTORY_SEPARATOR;
+    
+    $tmp_dir = $sf_root_dir.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.md5(uniqid(rand(), true));
+
+    $db_connections = sfYaml::load($sf_root_dir.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'databases.yml');
+    if(!isset($db_connections[$connection]))
+    {
+        throw new sfException('Unable to find connection: '.$connection);
+    }
+    
+    $connection = current($db_connections[$connection]);
+    $db = new sfDoctrineDatabase();
+    $db->initialize($connection['param']);
+    
+    $directories = sfFinder::type('dir')->maxdepth(0)->ignore_version_control()->in(sfConfig::get('sf_model_lib_dir').'/doctrine');
+
+    foreach ($directories AS $directory)
+    {
+        $basename = basename($directory);
+        $name = $basename == 'generated' ? 'doctrine':'doctrine-'.$basename;
+  
+        pake_echo_action("Building SQL", $name);
+  
+        $sql = implode(";\n\n",Doctrine::exportSql($directory)).";\n";
+        $sql = str_replace(array(" (",") ",","),array("(\n ",")\n",",\n"),$sql);
+
+        if (!is_dir($sf_root_dir.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'sql'))
+        {
+            mkdir($sf_root_dir.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'sql');
+        }
+
+        $fd = fopen($sf_root_dir.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'sql'.DIRECTORY_SEPARATOR.$name.'.model.sql','w+');
+        fwrite($fd,$sql);
+        fclose($fd);
+    }
+    
+    return; 
+}
+
+
+function run_doctrine_build_model($task, $args)
+{
+  $schemas = _doctrine_load('doctrine', 'yml', true);
+  $doctrineSchemaPathScheme = DIRECTORY_SEPARATOR.'model'.DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR;
+  $doctrineModelDir = sfConfig::get('sf_lib_dir').$doctrineSchemaPathScheme;
+
+  $generatedDir = $doctrineModelDir.'generated'.DIRECTORY_SEPARATOR;
+  pake_mkdirs($generatedDir);
+
+  foreach($schemas as $db_schema)
+  {
+    foreach ($db_schema->getClasses() as $class)
+    {
+      foreach ($class->asPHP() as $cd)
+      {
+        $path = $doctrineModelDir;
+
+        $package = $class->getTable()->getPackage();
+        if ($package)
+        {
+          if (isset($cd['plugin']))
+          {
+            $path = sfConfig::get('sf_plugins_dir').DIRECTORY_SEPARATOR.$package.DIRECTORY_SEPARATOR.'lib'.$doctrineSchemaPathScheme;
+          }
+          else
+          {
+            $path.= $package.DIRECTORY_SEPARATOR;
+          }
+        }
+        
+        if (isset($cd['overwrite']))
+        {
+          $path .= 'generated'.DIRECTORY_SEPARATOR;
+        }
+        
+        pake_mkdirs($path);
+
+        $filePath = $cd['className'].'.class.php';
+          
+        // we overwrite only the base classes
+        if (isset($cd['overwrite']) || !file_exists($path.$filePath)) 
+        {
+          pake_echo_action('writing', $filePath);
+          file_put_contents($path.$filePath, $cd['source']);
+        }
+      }
+    }
+  }
+}
+
+function run_doctrine_build_all($task, $args)
+{
+  run_doctrine_drop_db($task, $args);
+  run_doctrine_build_db($task, $args);
+  run_doctrine_build_model($task, $args);
+  //run_doctrine_insert_sql($task, $args);
+}
+
+function run_doctrine_build_all_load($task, $args)
+{
+  run_doctrine_build_all($task, $args);
+  run_doctrine_load_data($task, $args);
+}
+
+function run_doctrine_build_schema($task, $args)
+{
+  // This will build schema from an existing database
+  throw new Exception('Not implemented.');
+}
+
+function run_doctrine_drop_db($task, $args)
+{
+  if (!count($args))
+  {
+    throw new Exception('You must provide the app.');
+  }
+
+  $app = $args[0];
+  
+  $env = empty($args[1]) ? 'dev' : $args[1];
+  
+  _load_application_environment($app, $env);
+  
+  $databases = sfYaml::load(sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'databases.yml');
+  
+  $connectionBlockKey = $env;
+  
+  if(!isset($databases[$connectionBlockKey]))
+  {
+  	$connectionBlockKey = 'all';
+  }
+
+  
+ 
+  $connections = $databases[$connectionBlockKey];
+  
+  $manager = Doctrine_Manager::getInstance();
+  
+  foreach ($connections AS $name => $info)
+  {
+    $dsnInfo = $manager->parseDsn($info['param']['dsn']);
+    $connection = $manager->getConnection($name);
+    
+    try {
+      echo "Drop database '".$dsnInfo['database']."' are you sure Y/N ?";
+      $confirmation = strtolower(trim(fgets(STDIN)));
+      if ($confirmation!='y') {
+        pake_echo_action("cancelled");
+        exit(1);
+      }
+
+      pake_echo_action('doctrine', "dropping database '".$dsnInfo['database']."'");
+      
+      $connection->export->dropDatabase($dsnInfo['database']);
+    } catch (Exception $e) {
+      pake_echo_action('doctrine', "could not drop database '".$dsnInfo['database']."'");
+    }
+  }
+}
+
+function run_doctrine_build_db($task, $args)
+{
+  $connectionName = isset($args[0]) ? $args[0]:'all';
+  
+  simpleAutoloader::registerCallable(array('Doctrine','autoload'));
+  
+  $databases = sfYaml::load(sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'databases.yml');
+  
+  if(!isset($databases[$connectionName]))
+  {
+  	$connectionName = 'all';
+  }
+      
+  $connections = $databases[$connectionName];
+  
+  foreach($connections AS $name => $connection)
+  {
+    $dsn = $connection['param']['dsn'];
+    $info = Doctrine_Manager::getInstance()->parseDsn($dsn);
+    
+    $dsn = $info['scheme'].':host='.$info['host'];
+    $user = $info['user'];
+    $password = $info['pass'];
+    
+    $connection = Doctrine_Manager::getInstance()->openConnection(new PDO($dsn, $user, $password), $name.'2');
+    
+    pake_echo_action('doctrine', "creating database '".$info['database']."'");
+  
+    try {
+      $connection->export->createDatabase($info['database']);
+    } catch(Exception $e) {
+      pake_echo_action('doctrine', "could not create database '".$info['database']."'");
+    }
+  }
+}
+
+// FIXME: has to be rewritten to avoid code duplication
+function run_doctrine_generate_crud($task,$args)
+{
+  if (count($args) < 2)
+  {
+    throw new Exception('You must provide your module name.');
+  }
+
+  if (count($args) < 3)
+  {
+    throw new Exception('You must provide your model class name.');
+  }
+
+  $app         = $args[0];
+  $module      = $args[1];
+  $model_class = $args[2];
+  $theme = isset($args[3]) ? $args[3] : 'crud';
+
+  // function variables
+  $doctrineModelDir = sfConfig::get('sf_lib_dir').DIRECTORY_SEPARATOR.'model'.DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR;
+  $sf_root_dir = sfConfig::get('sf_root_dir');
+  $sf_symfony_lib_dir = sfConfig::get('sf_symfony_lib_dir');
+  $pluginDir = realpath(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..');
+  $doctrineLibDir =$pluginDir.DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'doctrine'.DIRECTORY_SEPARATOR.'Doctrine'.DIRECTORY_SEPARATOR;
+  $tmp_dir = $sf_root_dir.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.md5(uniqid(rand(), true));
+
+  sfConfig::set('sf_module_cache_dir', $tmp_dir);
+  sfConfig::set('sf_app_dir', $tmp_dir);
+  // add classes to autoload function
+  pake_echo_action('PluginDir', $pluginDir);
+
+  simpleAutoloader::registerCallable(array('Doctrine','autoload'));
+
+  // generate module
+  $generator_manager = new sfGeneratorManager();
+  $generator_manager->initialize();
+  $generator_manager->generate('sfDoctrineAdminGenerator', array('model_class' => $model_class, 'moduleName' => $module, 'theme' => $theme));
+  $moduleDir = $sf_root_dir.'/'.sfConfig::get('sf_apps_dir_name').'/'.$app.'/'.sfConfig::get('sf_app_module_dir_name').'/'.$module;
+  
+  // copy our generated module
+  $finder = pakeFinder::type('any');
+  pake_mirror($finder, $tmp_dir.'/auto'.ucfirst($module), $moduleDir);
+
+  // change module name
+  pake_replace_tokens($moduleDir.'/actions/actions.class.php', getcwd(), '', '', array('auto'.ucfirst($module) => $module));
+
+  try
+  {
+    $author_name = $task->get_property('author', 'symfony');
+  }
+  catch (pakeException $e)
+  {
+    $author_name = 'Your name here';
+  }
+
+  $constants = array(
+    'PROJECT_NAME' => $task->get_property('name', 'symfony'),
+    'APP_NAME'     => $app,
+    'MODULE_NAME'  => $module,
+    'MODEL_CLASS'  => $model_class,
+    'AUTHOR_NAME'  => $author_name,
+  );
+
+  // customize php files
+  $finder = pakeFinder::type('file')->name('*.php');
+  pake_replace_tokens($finder, $moduleDir, '##', '##', $constants);
+
+  // delete temp files
+  $finder = pakeFinder::type('any');
+  pake_remove($finder, $tmp_dir);
+
+  // for some reason the above does not remove the tmp dir as it should.
+  // delete temp dir
+  @rmdir($tmp_dir);
+  
+  // delete cache/tmp
+  @rmdir(sfConfig::get('sf_cache_dir').'tmp');
+}
+
+// FIXME: has to be rewritten to avoid code duplication
+function run_doctrine_init_admin($task, $args)
+{
+  if (count($args) < 2)
+  {
+    throw new Exception('You must provide your module name.');
+  }
+
+  if (count($args) < 3)
+  {
+    throw new Exception('You must provide your model class name.');
+  }
+    
+  $app         = $args[0];
+  $module      = $args[1];
+  $model_class = $args[2];
+  $theme       = isset($args[3]) ? $args[3] : 'default';
+
+  try
+  {
+    $author_name = $task->get_property('author', 'symfony');
+  }
+  catch (pakeException $e)
+  {
+    $author_name = 'Your name here';
+  }
+
+  $constants = array(
+    'PROJECT_NAME' => $task->get_property('name', 'symfony'),
+    'APP_NAME'     => $app,
+    'MODULE_NAME'  => $module,
+    'MODEL_CLASS'  => $model_class,
+    'AUTHOR_NAME'  => $author_name,
+    'THEME'        => $theme,
+  );
+
+  $moduleDir = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.sfConfig::get('sf_apps_dir_name').DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.sfConfig::get('sf_app_module_dir_name').DIRECTORY_SEPARATOR.$module;
+  
+  // create module structure
+  $finder = pakeFinder::type('any')->ignore_version_control()->discard('.sf');
+  $dirs = sfLoader::getGeneratorSkeletonDirs('sfDoctrineAdmin', $theme);
+  foreach($dirs as $dir)
+  {
+    echo $dir;
+    if(is_dir($dir))
+    {
+      pake_mirror($finder, $dir, $moduleDir);
+      break;
+    }
+  }
+
+  // customize php and yml files
+  $finder = pakeFinder::type('file')->name('*.php', '*.yml');
+  pake_replace_tokens($finder, $moduleDir, '##', '##', $constants);
+}
+
+
+/**
+ * run_doctrine_load_nested_set 
+ * 
+ * @param mixed $task 
+ * @param mixed $args 
+ * @access public
+ * @return void
+ */
+function run_doctrine_load_nested_set($task, $args)
+{
+  if (!count($args))
+  {
+    throw new Exception('You must provide the app.');
+  }
+
+  $app = $args[0];
+
+  if (!is_dir(sfConfig::get('sf_app_dir').DIRECTORY_SEPARATOR.$app))
+  {
+    throw new Exception('The app "'.$app.'" does not exist.');
+  }
+
+  if (!isset($args[1]))
+  {
+    throw new Exception('You must provide a filename.');
+  }
+
+  $filename = $args[1];
+
+  $env = empty($args[2]) ? 'dev' : $args[2];
+  
+  _load_application_environment($app, $env);
+
+  $model = sfInflector::classify($args[1]);
+  $ymlName = sfInflector::tableize($args[1]);
+  
+  $ymlPath = sfConfig::get('sf_data_dir').'/'.$ymlName.'.yml';
+  
+  pake_echo_action('doctrine', 'loading nested set data for '.$model);
+  pake_echo_action('doctrine', 'loading '.$ymlPath);
+  
+  $nestedSetData = sfYaml::load($ymlPath);
+
+  _doctrine_load_nested_set_data($model, $nestedSetData);
+}
+
+/**
+ * run_doctrine_dump_data 
+ * 
+ * @param mixed $task 
+ * @param mixed $args 
+ * @access public
+ * @return void
+ */
+function run_doctrine_dump_data($task, $args)
+{
+  if (!count($args))
+  {
+    throw new Exception('You must provide the app.');
+  }
+
+  $app = $args[0];
+
+  if (!is_dir(sfConfig::get('sf_app_dir').DIRECTORY_SEPARATOR.$app))
+  {
+    throw new Exception('The app "'.$app.'" does not exist.');
+  }
+
+  if (!isset($args[1]))
+  {
+    throw new Exception('You must provide a filename.');
+  }
+
+  $filename = $args[1];
+
+  $env = empty($args[2]) ? 'dev' : $args[2];
+  
+  _load_application_environment($app, $env);
+
+  if (!sfToolkit::isPathAbsolute($filename))
+  {
+    $dir = sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.'fixtures';
+    pake_mkdirs($dir);
+    $filename = $dir.DIRECTORY_SEPARATOR.$filename;
+  }
+
+  pake_echo_action('doctrine', sprintf('dumping data to "%s"', $filename));
+
+  $data = new sfDoctrineData();
+  $data->dumpData($filename);
+}
+
+/**
+ * _doctrine_load_nested_set_data 
+ * 
+ * @param mixed $model 
+ * @param mixed $nestedSetData 
+ * @param mixed $parent 
+ * @access protected
+ * @return void
+ */
+function _doctrine_load_nested_set_data($model, $nestedSetData, $parent = null)
+{
+  $manager = Doctrine_Manager::getInstance();
+
+  foreach($nestedSetData AS $name => $data)
+  {
+    $children = array();
+    $setters  = array();
+    
+    if( array_key_exists('children', $data) )
+    {
+      $children = $data['children'];
+      unset($data['children']);
+    }
+
+    if( array_key_exists('setters', $data) )
+    {
+      $setters = $data['setters'];
+      unset($data['setters']);
+    }
+
+    $record = new $model();
+    
+    if( is_array($setters) AND !empty($setters) )
+    {
+      foreach($setters AS $key => $value)
+      {
+        $record->set($key, $value);
+      }
+    }
+    
+    if( !$parent )
+    {
+      $manager->getTable($model)->getTree()->createRoot($record);
+    } else {
+      $parent->getNode()->addChild($record);
+    }
+
+    pake_echo_action('doctrine', 'loading '.str_repeat(' ', $record->getNode()->getLevel()).$name);
+
+    if( is_array($children) AND !empty($children) )
+    {
+      _doctrine_load_nested_set_data($model, $children, $record);
+    }
+  }
+}
+
+function _findPropelSchemas($type)
+{
+  $preGlob = '*schema';
+  $root = 'config';
+
+  $extension = '.'.$type;
+
+  $schemas = pakeFinder::type('file')->name($preGlob.$extension)->in($root);
+
+  $schemasToLoad = array();
+  foreach ($schemas as $schema)
+  {
+    // we store the name of the file as "package"
+    $schemasToLoad[$schema] = basename($schema, $extension);
+  }
+
+  return $schemasToLoad;
+}
+
+function _findDoctrineSchemas()
+{
+  $schemasToLoad = array();
+
+  // first we try with a connection mapping config file
+  $connectionMappingPath = 'config/schemas.yml';
+  if (file_exists($connectionMappingPath))
+  {
+    $connectionMapping = sfYaml::load($connectionMappingPath);
+
+    foreach ($connectionMapping as $connection => $schemas)
+    {
+      foreach ($schemas as $schema)
+      {
+        $components = explode('/', $schema);
+        $name = array_pop($components);
+        $schemaPath = 'config/doctrine/'.$name.'.yml';
+        if (!empty($components))
+        {
+          $packageName = $components[0];
+          $schemaPath = sfConfig::get('sf_plugins_dir').DIRECTORY_SEPARATOR.$packageName.DIRECTORY_SEPARATOR.$schemaPath;
+        }
+        else
+          $packageName = null;
+
+        if (file_exists($schemaPath))
+        {
+          $schemasToLoad[$schemaPath] = $packageName;
+        }
+      }
+    }
+  }
+  else // otherwise we load all the schemas in the doctrine directories
+  {
+    $preGlob = '*';
+    $root = 'config'.DIRECTORY_SEPARATOR.'doctrine';
+
+    $schemas = pakeFinder::type('file')->name($preGlob.'.yml')->in($root);
+
+    if(count($schemas))
+        $schemas = array_combine($schemas, array_fill(0, count($schemas), null));
+
+    // adding the plugin schemas
+    $pluginSchemas = array();
+    $pluginSchemas = pakeFinder::type('file')->name($preGlob.'.yml')->in(glob('plugins/*/'.$root));
+    $schemasToLoad = array();
+    foreach ($pluginSchemas as $pluginSchema)
+    {
+      // we get the plugin name from the path file; not very elegant...
+      $pluginName = basename(substr(dirname($pluginSchema), 0, -strlen($root)));
+      $schemasToLoad[$pluginSchema] = $pluginName;
+    }
+
+    $schemasToLoad = array_merge($schemas, $schemasToLoad);
+  }
+  return $schemasToLoad;
+}
+
+function _doctrine_load($mode, $type, $aggregate)
+{
+  $schemasToLoad = array();
+
+  if ($mode == 'doctrine')
+  {
+    $schemasToLoad = _findDoctrineSchemas();
+  }
+  elseif ($mode == 'propel')
+  {
+    $schemasToLoad = _findPropelSchemas($type);
+  }
+    
+  if (!count($schemasToLoad))
+  {
+    throw new Exception('No schemas were found');
+  }
+
+  $dbSchemas = array();
+  
+  // schema loader class
+  $schemaClass = 'sfDoctrineSchema'.ucfirst($mode).'Loader';
+  
+  $db_schema = new $schemaClass();
+  $db_schemas = array();
+
+  foreach ($schemasToLoad as $schema => $package)
+  {
+    if (!$aggregate)
+    {
+      $db_schema = new $schemaClass();
+    }
+    $relativeSchema = substr($schema, strlen(sfConfig::get('sf_root_dir'))+1);
+
+    pake_echo_action('loading', 'Class descriptions from "'.$schema.'"');
+    $db_schema->load($schema, $package);
+    if (!$aggregate)
+    {
+      $db_schema->process();
+      $db_schemas[] = $db_schema;
+    }
+  }
+
+  if ($aggregate)
+  {
+    $db_schema->process();
+    $db_schemas = array($db_schema);
+  }
+
+  return $db_schemas;
+}
+
+function _load_application_environment($app, $env)
+{
+  // define constants
+  define('SF_ROOT_DIR',    sfConfig::get('sf_root_dir'));
+  define('SF_APP',         $app);
+  define('SF_ENVIRONMENT', $env);
+  define('SF_DEBUG',       true);
+
+  // get configuration
+  require_once SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php';
+  
+  sfContext::getInstance();
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5e5d81e37c02f7bc42aa863bcf71ee7b1abbc44
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine.php
@@ -0,0 +1,548 @@
+<?php
+/*
+ *  $Id: Doctrine.php 2255 2007-08-16 22:42:35Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine
+ * the base class of Doctrine framework
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2255 $
+ */
+final class Doctrine
+{
+    /**
+     * ERROR CONSTANTS
+     */
+    const ERR                       = -1;
+    const ERR_SYNTAX                = -2;
+    const ERR_CONSTRAINT            = -3;
+    const ERR_NOT_FOUND             = -4;
+    const ERR_ALREADY_EXISTS        = -5;
+    const ERR_UNSUPPORTED           = -6;
+    const ERR_MISMATCH              = -7;
+    const ERR_INVALID               = -8;
+    const ERR_NOT_CAPABLE           = -9;
+    const ERR_TRUNCATED             = -10;
+    const ERR_INVALID_NUMBER        = -11;
+    const ERR_INVALID_DATE          = -12;
+    const ERR_DIVZERO               = -13;
+    const ERR_NODBSELECTED          = -14;
+    const ERR_CANNOT_CREATE         = -15;
+    const ERR_CANNOT_DELETE         = -16;
+    const ERR_CANNOT_DROP           = -17;
+    const ERR_NOSUCHTABLE           = -18;
+    const ERR_NOSUCHFIELD           = -19;
+    const ERR_NEED_MORE_DATA        = -20;
+    const ERR_NOT_LOCKED            = -21;
+    const ERR_VALUE_COUNT_ON_ROW    = -22;
+    const ERR_INVALID_DSN           = -23;
+    const ERR_CONNECT_FAILED        = -24;
+    const ERR_EXTENSION_NOT_FOUND   = -25;
+    const ERR_NOSUCHDB              = -26;
+    const ERR_ACCESS_VIOLATION      = -27;
+    const ERR_CANNOT_REPLACE        = -28;
+    const ERR_CONSTRAINT_NOT_NULL   = -29;
+    const ERR_DEADLOCK              = -30;
+    const ERR_CANNOT_ALTER          = -31;
+    const ERR_MANAGER               = -32;
+    const ERR_MANAGER_PARSE         = -33;
+    const ERR_LOADMODULE            = -34;
+    const ERR_INSUFFICIENT_DATA     = -35;
+    const ERR_CLASS_NAME            = -36;
+    
+    /**
+     * PDO derived constants
+     */
+    const CASE_LOWER = 2;
+    const CASE_NATURAL = 0;
+    const CASE_UPPER = 1;
+    const CURSOR_FWDONLY = 0;
+    const CURSOR_SCROLL = 1;
+    const ERRMODE_EXCEPTION = 2;
+    const ERRMODE_SILENT = 0;
+    const ERRMODE_WARNING = 1;
+    const FETCH_ASSOC = 2;
+    const FETCH_BOTH = 4;
+    const FETCH_BOUND = 6;
+    const FETCH_CLASS = 8;
+    const FETCH_CLASSTYPE = 262144;
+    const FETCH_COLUMN = 7;
+    const FETCH_FUNC = 10;
+    const FETCH_GROUP = 65536;
+    const FETCH_INTO = 9;
+    const FETCH_LAZY = 1;
+    const FETCH_NAMED = 11;
+    const FETCH_NUM = 3;
+    const FETCH_OBJ = 5;
+    const FETCH_ORI_ABS = 4;
+    const FETCH_ORI_FIRST = 2;
+    const FETCH_ORI_LAST = 3;
+    const FETCH_ORI_NEXT = 0;
+    const FETCH_ORI_PRIOR = 1;
+    const FETCH_ORI_REL = 5;
+    const FETCH_SERIALIZE = 524288;
+    const FETCH_UNIQUE = 196608;
+    const NULL_EMPTY_STRING = 1;
+    const NULL_NATURAL = 0;
+    const NULL_TO_STRING		 = NULL;
+    const PARAM_BOOL = 5;
+    const PARAM_INPUT_OUTPUT = -2147483648;
+    const PARAM_INT = 1;
+    const PARAM_LOB = 3;
+    const PARAM_NULL = 0;
+    const PARAM_STMT = 4;
+    const PARAM_STR = 2;
+    /**
+     * ATTRIBUTE CONSTANTS
+     */
+     
+    /**
+     * PDO derived attributes
+     */
+    const ATTR_AUTOCOMMIT           = 0;
+    const ATTR_PREFETCH             = 1;
+    const ATTR_TIMEOUT              = 2; 
+    const ATTR_ERRMODE              = 3;
+    const ATTR_SERVER_VERSION       = 4;
+    const ATTR_CLIENT_VERSION       = 5;
+    const ATTR_SERVER_INFO          = 6;
+    const ATTR_CONNECTION_STATUS    = 7;
+    const ATTR_CASE                 = 8;
+    const ATTR_CURSOR_NAME          = 9;
+    const ATTR_CURSOR               = 10;
+    const ATTR_ORACLE_NULLS         = 11;
+    const ATTR_PERSISTENT           = 12;
+    const ATTR_STATEMENT_CLASS      = 13;
+    const ATTR_FETCH_TABLE_NAMES    = 14;
+    const ATTR_FETCH_CATALOG_NAMES  = 15;
+    const ATTR_DRIVER_NAME          = 16;
+    const ATTR_STRINGIFY_FETCHES    = 17;
+    const ATTR_MAX_COLUMN_LEN       = 18;
+
+    /**
+     * Doctrine constants
+     */
+    const ATTR_LISTENER             = 100;
+    const ATTR_QUOTE_IDENTIFIER     = 101;
+    const ATTR_FIELD_CASE           = 102;
+    const ATTR_IDXNAME_FORMAT       = 103;
+    const ATTR_SEQNAME_FORMAT       = 104;
+    const ATTR_SEQCOL_NAME          = 105;
+    const ATTR_CMPNAME_FORMAT       = 118;
+    const ATTR_DBNAME_FORMAT        = 117;
+    const ATTR_TBLCLASS_FORMAT      = 119;
+    const ATTR_EXPORT               = 140;
+    const ATTR_DECIMAL_PLACES       = 141;  
+
+    const ATTR_PORTABILITY          = 106;
+    const ATTR_VLD                  = 107;
+    const ATTR_COLL_KEY             = 108;
+    const ATTR_QUERY_LIMIT          = 109;
+    const ATTR_AUTO_LENGTH_VLD      = 110;
+    const ATTR_AUTO_TYPE_VLD        = 111;
+    const ATTR_DEFAULT_TABLE_TYPE   = 112;
+    const ATTR_DEF_TEXT_LENGTH      = 113;
+    const ATTR_DEF_VARCHAR_LENGTH   = 114;
+    const ATTR_DEF_TABLESPACE       = 115;
+    const ATTR_EMULATE_DATABASE     = 116;
+    const ATTR_DEFAULT_SEQUENCE     = 133;
+
+    /** TODO: REMOVE THE FOLLOWING CONSTANTS AND UPDATE THE DOCS ! */
+
+
+    const ATTR_FETCHMODE            = 118;
+    const ATTR_BATCH_SIZE           = 119;
+    const ATTR_LOCKMODE             = 120;
+    const ATTR_NAME_PREFIX          = 121;
+    const ATTR_CREATE_TABLES        = 122;
+    const ATTR_COLL_LIMIT           = 123;
+    const ATTR_ACCESSORS            = 124;
+    const ATTR_ACCESSOR_PREFIX_GET  = 125;
+    const ATTR_ACCESSOR_PREFIX_SET  = 126;
+
+    /**
+     * NESTED SET CONSTANTS
+     */
+    const ATTR_NS_ROOT_COLUMN_NAME  = 130;
+    const ATTR_NS_GAP_SIZE          = 131;
+    const ATTR_NS_GAP_DECREASE_EXP  = 132;
+
+    const ATTR_CACHE                = 150;
+    const ATTR_CACHE_LIFESPAN       = 151;
+    const ATTR_LOAD_REFERENCES      = 153;
+    const ATTR_RECORD_LISTENER      = 154;
+    const ATTR_THROW_EXCEPTIONS     = 155;
+
+
+    /**
+     * LIMIT CONSTANTS
+     */
+
+    /**
+     * constant for row limiting
+     */
+    const LIMIT_ROWS       = 1;
+    /**
+     * constant for record limiting
+     */
+    const LIMIT_RECORDS    = 2;
+
+    /**
+     * FETCHMODE CONSTANTS
+     */
+
+    /**
+     * IMMEDIATE FETCHING
+     * mode for immediate fetching
+     */
+    const FETCH_IMMEDIATE       = 0;
+    /**
+     * BATCH FETCHING
+     * mode for batch fetching
+     */
+    const FETCH_BATCH           = 1;
+    /**
+     * LAZY FETCHING
+     * mode for offset fetching
+     */
+    const FETCH_OFFSET          = 3;
+    /**
+     * LAZY OFFSET FETCHING
+     * mode for lazy offset fetching
+     */
+    const FETCH_LAZY_OFFSET     = 4;
+
+    /**
+     * FETCH CONSTANTS
+     */
+
+
+    /**
+     * FETCH VALUEHOLDER
+     */
+    const FETCH_VHOLDER         = 1;
+    /**
+     * FETCH RECORD
+     *
+     * Specifies that the fetch method shall return Doctrine_Record
+     * objects as the elements of the result set.
+     *
+     * This is the default fetchmode.
+     */
+    const FETCH_RECORD          = 2;
+    /**
+     * FETCH ARRAY
+     */
+
+    const FETCH_ARRAY           = 3;
+    /**
+     * PORTABILITY CONSTANTS
+     */
+
+    /**
+     * Portability: turn off all portability features.
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_NONE          = 0;
+    /**
+     * Portability: convert names of tables and fields to case defined in the
+     * "field_case" option when using the query*(), fetch*() methods.
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_FIX_CASE      = 1;
+
+    /**
+     * Portability: right trim the data output by query*() and fetch*().
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_RTRIM         = 2;
+    /**
+     * Portability: force reporting the number of rows deleted.
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_DELETE_COUNT  = 4;
+    /**
+     * Portability: convert empty values to null strings in data output by
+     * query*() and fetch*().
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_EMPTY_TO_NULL = 8;
+    /**
+     * Portability: removes database/table qualifiers from associative indexes
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_FIX_ASSOC_FIELD_NAMES = 16;
+    /**
+     * Portability: makes Doctrine_Expression throw exception for unportable RDBMS expressions
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_EXPR          = 32;
+    /**
+     * Portability: turn on all portability features.
+     * @see Doctrine::ATTR_PORTABILITY
+     */
+    const PORTABILITY_ALL           = 33;
+
+    /**
+     * LOCKMODE CONSTANTS
+     */
+
+    /**
+     * mode for optimistic locking
+     */
+    const LOCK_OPTIMISTIC       = 0;
+    /**
+     * mode for pessimistic locking
+     */
+    const LOCK_PESSIMISTIC      = 1;
+    /**
+     * EXPORT CONSTANTS
+     */
+     
+    /**
+     * turns of exporting
+     */
+    const EXPORT_NONE               = 0;
+    /**
+     * export tables
+     */
+    const EXPORT_TABLES             = 1;
+    /**
+     * export constraints
+     */
+    const EXPORT_CONSTRAINTS        = 2;
+    /**
+     * export all
+     */
+    const EXPORT_ALL                = 3;
+
+
+    /**
+     * constant for auto_increment identifier
+     */
+    const IDENTIFIER_AUTOINC        = 1;
+    /**
+     * constant for sequence identifier
+     */
+    const IDENTIFIER_SEQUENCE       = 2;
+    /**
+     * constant for normal identifier
+     */
+    const IDENTIFIER_NATURAL        = 3;
+    /**
+     * constant for composite identifier
+     */
+    const IDENTIFIER_COMPOSITE      = 4;
+    /**
+     * constructor
+     */
+    public function __construct()
+    {
+        throw new Doctrine_Exception('Doctrine is static class. No instances can be created.');
+    }
+    /**
+     * @var string $path            doctrine root directory
+     */
+    private static $path;
+    /**
+     * @var boolean $_debug
+     */
+    private static $_debug = false;
+
+    public static function debug($bool = null)
+    {
+        if ($bool !== null) {
+            self::$_debug = (bool) $bool;
+        }
+        return self::$_debug;
+    }
+    /**
+     * getPath
+     * returns the doctrine root
+     *
+     * @return string
+     */
+    public static function getPath()
+    {
+        if ( ! self::$path) {
+            self::$path = dirname(__FILE__);
+        }
+        return self::$path;
+    }
+    /**
+     * loadAll
+     * loads all runtime classes
+     *
+     * @return void
+     */
+    public static function loadAll()
+    {
+        $classes = Doctrine_Compiler::getRuntimeClasses();
+
+        foreach ($classes as $class) {
+            Doctrine::autoload($class);
+        }
+    }
+    /**
+     * importSchema
+     * method for importing existing schema to Doctrine_Record classes
+     *
+     * @param string $directory
+     * @param array $info
+     * @return boolean
+     */
+    public static function importSchema($directory, array $databases = array())
+    {
+        return Doctrine_Manager::connection()->import->importSchema($directory, $databases);
+    }
+    /**
+     * exportSchema
+     * method for exporting Doctrine_Record classes to a schema
+     *
+     * @param string $directory
+     */
+    public static function exportSchema($directory = null)
+    {
+        return Doctrine_Manager::connection()->export->exportSchema($directory);
+    }
+    /**
+     * exportSql
+     * method for exporting Doctrine_Record classes to a schema
+     *
+     * @param string $directory
+     */
+    public static function exportSql($directory = null)
+    {
+        return Doctrine_Manager::connection()->export->exportSql($directory);
+    }
+    /**
+     * compile
+     * method for making a single file of most used doctrine runtime components
+     * including the compiled file instead of multiple files (in worst
+     * cases dozens of files) can improve performance by an order of magnitude
+     *
+     * @param string $target
+     *
+     * @throws Doctrine_Exception
+     * @return void
+     */
+    public static function compile($target = null)
+    {
+        Doctrine_Compiler::compile($target);
+    }
+    /**
+     * simple autoload function
+     * returns true if the class was loaded, otherwise false
+     *
+     * @param string $classname
+     * @return boolean
+     */
+    public static function autoload($classname)
+    {  
+        if (class_exists($classname, false)) {
+            return false;
+        }
+        if (! self::$path) {
+            self::$path = dirname(__FILE__);
+        }
+        $class = self::$path . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR,$classname) . '.php';
+
+        if ( ! file_exists($class)) {
+            return false;
+        }
+
+        require_once($class);
+
+        return true;
+    }
+    /**
+     * dump
+     *
+     * dumps a given variable
+     *
+     * @param mixed $var        a variable of any type
+     * @param boolean $output   whether to output the content
+     * @return void|string
+     */
+    public static function dump($var, $output = true)
+    {
+    	$ret = array();
+        switch (gettype($var)) {
+            case 'array':
+                $ret[] = 'Array(';
+                foreach ($var as $k => $v) {
+                    $ret[] = $k . ' : ' . Doctrine::dump($v, false);
+                }
+                $ret[] = ")";
+                break;
+            case 'object':
+                $ret[] = 'Object(' . get_class($var) . ')';
+                break;
+            default:
+                $ret[] = var_export($var, true);
+        }
+        if ($output) {
+            print implode("\n", $ret);
+        }
+        return implode("\n", $ret);
+    }
+    /**
+     * returns table name from class name
+     *
+     * @param string $classname
+     * @return string
+     */
+    public static function tableize($classname)
+    {
+         return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $classname));
+    }
+    /**
+     * returns class name from table name
+     *
+     * @param string $tablename
+     * @return string
+     */
+    public static function classify($tablename)
+    {
+        return preg_replace('~(_?)(_)([\w])~e', '"$1".strtoupper("$3")', ucfirst($tablename));
+    }
+    /**
+     * checks for valid class name (uses camel case and underscores)
+     *
+     * @param string $classname
+     * @return boolean
+     */
+    public static function isValidClassname($classname)
+    {
+        if (preg_match('~(^[a-z])|(_[a-z])|([\W])|(_{2})~', $classname)) {
+            return false;
+        }    
+
+        return true;
+    }
+}
+?>
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Access.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Access.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b431e62a2c50836b8868499241934e849351901
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Access.php
@@ -0,0 +1,141 @@
+<?php
+/*
+ *  $Id: Access.php 1604 2007-06-08 19:07:32Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Access
+ *
+ * the purpose of Doctrine_Access is to provice array access
+ * and property overload interface for subclasses
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1604 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Access extends Doctrine_Object implements ArrayAccess
+{
+    /**
+     * setArray
+     *
+     * @param array $array          an array of key => value pairs
+     * @since 1.0
+     * @return Doctrine_Access
+     */
+    public function setArray(array $array)
+    {
+        foreach ($array as $k=>$v) {
+            $this->set($k,$v);
+        }
+
+        return $this;
+    }
+    /**
+     * __set        an alias of set()
+     *
+     * @see set, offsetSet
+     * @param $name
+     * @param $value
+     * @since 1.0
+     * @return void
+     */
+    public function __set($name,$value)
+    {
+        $this->set($name,$value);
+    }
+    /**
+     * __get -- an alias of get()
+     *
+     * @see get,  offsetGet
+     * @param mixed $name
+     * @since 1.0
+     * @return mixed
+     */
+    public function __get($name)
+    {
+        return $this->get($name);
+    }
+    /**
+     * __isset()
+     *
+     * @param string $name
+     * @since 1.0
+     * @return boolean          whether or not this object contains $name
+     */
+    public function __isset($name)
+    {
+        return $this->contains($name);
+    }
+    /**
+     * __unset()
+     *
+     * @param string $name
+     * @since 1.0
+     * @return void
+     */
+    public function __unset($name)
+    {
+        return $this->remove($name);
+    }
+    /**
+     * @param mixed $offset
+     * @return boolean          whether or not this object contains $offset
+     */
+    public function offsetExists($offset)
+    {
+        return $this->contains($offset);
+    }
+    /**
+     * offsetGet    an alias of get()
+     * @see get,  __get
+     * @param mixed $offset
+     * @return mixed
+     */
+    public function offsetGet($offset)
+    {
+        return $this->get($offset);
+    }
+    /**
+     * sets $offset to $value
+     * @see set,  __set
+     * @param mixed $offset
+     * @param mixed $value
+     * @return void
+     */
+    public function offsetSet($offset, $value)
+    {
+        if ( ! isset($offset)) {
+            $this->add($value);
+        } else {
+            $this->set($offset, $value);
+        }
+    }
+    /**
+     * unset a given offset
+     * @see set, offsetSet, __set
+     * @param mixed $offset
+     */
+    public function offsetUnset($offset)
+    {
+        return $this->remove($offset);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter.php
new file mode 100644
index 0000000000000000000000000000000000000000..57c9b73acb1785eada784d8a898feb83ad121e26
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ *  $Id: Adapter.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ *
+ * Doctrine_Adapter
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Adapter
+{
+    const ATTR_AUTOCOMMIT = 0;
+    const ATTR_CASE = 8;
+    const ATTR_CLIENT_VERSION = 5;
+    const ATTR_CONNECTION_STATUS = 7;
+    const ATTR_CURSOR = 10;
+    const ATTR_CURSOR_NAME = 9;
+    const ATTR_DRIVER_NAME = 16;
+    const ATTR_ERRMODE = 3;
+    const ATTR_FETCH_CATALOG_NAMES = 15;
+    const ATTR_FETCH_TABLE_NAMES = 14;
+    const ATTR_MAX_COLUMN_LEN = 18;
+    const ATTR_ORACLE_NULLS = 11;
+    const ATTR_PERSISTENT = 12;
+    const ATTR_PREFETCH = 1;
+    const ATTR_SERVER_INFO = 6;
+    const ATTR_SERVER_VERSION = 4;
+    const ATTR_STATEMENT_CLASS = 13;
+    const ATTR_STRINGIFY_FETCHES = 17;
+    const ATTR_TIMEOUT = 2;
+    const CASE_LOWER = 2;
+    const CASE_NATURAL = 0;
+    const CASE_UPPER = 1;
+    const CURSOR_FWDONLY = 0;
+    const CURSOR_SCROLL = 1;
+    const ERR_ALREADY_EXISTS = NULL;
+    const ERR_CANT_MAP = NULL;
+    const ERR_CONSTRAINT = NULL;
+    const ERR_DISCONNECTED = NULL;
+    const ERR_MISMATCH = NULL;
+    const ERR_NO_PERM = NULL;
+    const ERR_NONE = '00000';
+    const ERR_NOT_FOUND = NULL;
+    const ERR_NOT_IMPLEMENTED = NULL;
+    const ERR_SYNTAX = NULL;
+    const ERR_TRUNCATED = NULL;
+    const ERRMODE_EXCEPTION = 2;
+    const ERRMODE_SILENT = 0;
+    const ERRMODE_WARNING = 1;
+    const FETCH_ASSOC = 2;
+    const FETCH_BOTH = 4;
+    const FETCH_BOUND = 6;
+    const FETCH_CLASS = 8;
+    const FETCH_CLASSTYPE = 262144;
+    const FETCH_COLUMN = 7;
+    const FETCH_FUNC = 10;
+    const FETCH_GROUP = 65536;
+    const FETCH_INTO = 9;
+    const FETCH_LAZY = 1;
+    const FETCH_NAMED = 11;
+    const FETCH_NUM = 3;
+    const FETCH_OBJ = 5;
+    const FETCH_ORI_ABS = 4;
+    const FETCH_ORI_FIRST = 2;
+    const FETCH_ORI_LAST = 3;
+    const FETCH_ORI_NEXT = 0;
+    const FETCH_ORI_PRIOR = 1;
+    const FETCH_ORI_REL = 5;
+    const FETCH_SERIALIZE = 524288;
+    const FETCH_UNIQUE = 196608;
+    const NULL_EMPTY_STRING = 1;
+    const NULL_NATURAL = 0;
+    const NULL_TO_STRING = NULL;
+    const PARAM_BOOL = 5;
+    const PARAM_INPUT_OUTPUT = -2147483648;
+    const PARAM_INT = 1;
+    const PARAM_LOB = 3;
+    const PARAM_NULL = 0;
+    const PARAM_STMT = 4;
+    const PARAM_STR = 2;
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ab450cab999d9785893397b68cfd16fccd34fd7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2.php
@@ -0,0 +1,333 @@
+<?php
+/*
+ *  $Id: Mock.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Adapter');
+/**
+ * Doctrine_Adapter_Db2
+ * IBM DB2 Adapter  [BORROWED FROM ZEND FRAMEWORK]
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Adapter
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Adapter_Db2 extends Doctrine_Adapter
+{
+    /**
+     * User-provided configuration.
+     *
+     * Basic keys are:
+     *
+     * username   => (string)  Connect to the database as this username.
+     * password   => (string)  Password associated with the username.
+     * host       => (string)  What host to connect to (default 127.0.0.1)
+     * dbname     => (string)  The name of the database to user
+     * protocol   => (string)  Protocol to use, defaults to "TCPIP"
+     * port       => (integer) Port number to use for TCP/IP if protocol is "TCPIP"
+     * persistent => (boolean) Set TRUE to use a persistent connection (db2_pconnect)
+     *
+     * @var array
+     */
+    protected $_config = array(
+        'dbname'       => null,
+        'username'     => null,
+        'password'     => null,
+        'host'         => 'localhost',
+        'port'         => '50000',
+        'protocol'     => 'TCPIP',
+        'persistent'   => false
+    );
+
+    /**
+     * Execution mode
+     *
+     * @var int execution flag (DB2_AUTOCOMMIT_ON or DB2_AUTOCOMMIT_OFF)
+     * @access protected
+     */
+    protected $_execute_mode = DB2_AUTOCOMMIT_ON;
+
+    /**
+     * Table name of the last accessed table for an insert operation
+     * This is a DB2-Adapter-specific member variable with the utmost
+     * probability you might not find it in other adapters...
+     *
+     * @var string
+     * @access protected
+     */
+    protected $_lastInsertTable = null;
+
+     /**
+     * Constructor.
+     *
+     * $config is an array of key/value pairs containing configuration
+     * options.  These options are common to most adapters:
+     *
+     * dbname         => (string) The name of the database to user
+     * username       => (string) Connect to the database as this username.
+     * password       => (string) Password associated with the username.
+     * host           => (string) What host to connect to, defaults to localhost
+     * port           => (string) The port of the database, defaults to 50000
+     * persistent     => (boolean) Whether to use a persistent connection or not, defaults to false
+     * protocol       => (string) The network protocol, defaults to TCPIP
+     * options        => (array)  Other database options such as autocommit, case, and cursor options
+     *
+     * @param array $config An array of configuration keys.
+     */
+    public function __construct(array $config)
+    {
+        if ( ! isset($config['password'])) {
+            throw new Doctrine_Adapter_Db2_Exception("Configuration array must have a key for 'password' for login credentials.");
+        }
+
+        if ( ! isset($config['username'])) {
+            throw new Doctrine_Adapter_Db2_Exception("Configuration array must have a key for 'username' for login credentials.");
+        }
+
+        if ( ! isset($config['dbname'])) {
+            throw new Doctrine_Adapter_Db2_Exception("Configuration array must have a key for 'dbname' that names the database instance.");
+        }
+
+        // keep the config
+        $this->_config = array_merge($this->_config, (array) $config);
+
+        // create a profiler object
+        $enabled = false;
+        if (array_key_exists('profiler', $this->_config)) {
+            $enabled = (bool) $this->_config['profiler'];
+            unset($this->_config['profiler']);
+        }
+
+        $this->_profiler = new Doctrine_Profiler($enabled);
+    }
+
+    /**
+     * Creates a connection resource.
+     *
+     * @return void
+     */
+    protected function _connect()
+    {
+        if (is_resource($this->_connection)) {
+            // connection already exists
+            return;
+        }
+
+        if ( ! extension_loaded('ibm_db2')) {
+            throw new Doctrine_Adapter_Db2_Exception('The IBM DB2 extension is required for this adapter but not loaded');
+        }
+
+        if ($this->_config['persistent']) {
+            // use persistent connection
+            $conn_func_name = 'db2_pconnect';
+        } else {
+            // use "normal" connection
+            $conn_func_name = 'db2_connect';
+        }
+
+        if (!isset($this->_config['options'])) {
+            // config options were not set, so set it to an empty array
+            $this->_config['options'] = array();
+        }
+
+        if (!isset($this->_config['options']['autocommit'])) {
+            // set execution mode
+            $this->_config['options']['autocommit'] = &$this->_execute_mode;
+        }
+
+        if ($this->_config['host'] !== 'localhost') {
+            // if the host isn't localhost, use extended connection params
+            $dbname = 'DRIVER={IBM DB2 ODBC DRIVER}' .
+                     ';DATABASE=' . $this->_config['dbname'] .
+                     ';HOSTNAME=' . $this->_config['host'] .
+                     ';PORT='     . $this->_config['port'] .
+                     ';PROTOCOL=' . $this->_config['protocol'] .
+                     ';UID='      . $this->_config['username'] .
+                     ';PWD='      . $this->_config['password'] .';';
+            $this->_connection = $conn_func_name(
+                $dbname,
+                null,
+                null,
+                $this->_config['options']
+            );
+        } else {
+            // host is localhost, so use standard connection params
+            $this->_connection = $conn_func_name(
+                $this->_config['dbname'],
+                $this->_config['username'],
+                $this->_config['password'],
+                $this->_config['options']
+            );
+        }
+
+        // check the connection
+        if (!$this->_connection) {
+            throw new Doctrine_Adapter_Db2_Exception(db2_conn_errormsg(), db2_conn_error());
+        }
+    }
+
+    /**
+     * Force the connection to close.
+     *
+     * @return void
+     */
+    public function closeConnection()
+    {
+        db2_close($this->_connection);
+        $this->_connection = null;
+    }
+
+    /**
+     * Returns an SQL statement for preparation.
+     *
+     * @param string $sql The SQL statement with placeholders.
+     * @return Doctrine_Statement_Db2
+     */
+    public function prepare($sql)
+    {
+        $this->_connect();
+        $stmt = new Doctrine_Statement_Db2($this, $sql);
+        $stmt->setFetchMode($this->_fetchMode);
+        return $stmt;
+    }
+
+    /**
+     * Gets the execution mode
+     *
+     * @return int the execution mode (DB2_AUTOCOMMIT_ON or DB2_AUTOCOMMIT_OFF)
+     */
+    public function _getExecuteMode()
+    {
+        return $this->_execute_mode;
+    }
+
+    /**
+     * @param integer $mode
+     * @return void
+     */
+    public function _setExecuteMode($mode)
+    {
+        switch ($mode) {
+            case DB2_AUTOCOMMIT_OFF:
+            case DB2_AUTOCOMMIT_ON:
+                $this->_execute_mode = $mode;
+                db2_autocommit($this->_connection, $mode);
+                break;
+            default:
+                throw new Doctrine_Adapter_Db2_Exception("execution mode not supported");
+                break;
+        }
+    }
+
+    /**
+     * Quote a raw string.
+     *
+     * @param string $value     Raw string
+     * @return string           Quoted string
+     */
+    protected function _quote($value)
+    {
+        /**
+         * Some releases of the IBM DB2 extension appear
+         * to be missing the db2_escape_string() method.
+         * The method was added in ibm_db2.c revision 1.53
+         * according to cvs.php.net.  But the function is
+         * not present in my build of PHP 5.2.1.
+         */
+        if (function_exists('db2_escape_string')) {
+            return db2_escape_string($value);
+        }
+        return parent::_quote($value);
+    }
+
+    /**
+     * @return string
+     */
+    public function getQuoteIdentifierSymbol()
+    {
+        $info = db2_server_info($this->_connection);
+        $identQuote = $info->IDENTIFIER_QUOTE_CHAR;
+        return $identQuote;
+    }
+    /**
+     * Begin a transaction.
+     *
+     * @return void
+     */
+    protected function _beginTransaction()
+    {
+        $this->_setExecuteMode(DB2_AUTOCOMMIT_OFF);
+    }
+
+    /**
+     * Commit a transaction.
+     *
+     * @return void
+     */
+    protected function _commit()
+    {
+        if (!db2_commit($this->_connection)) {
+            throw new Doctrine_Adapter_Db2_Exception(
+                db2_conn_errormsg($this->_connection),
+                db2_conn_error($this->_connection));
+        }
+
+        $this->_setExecuteMode(DB2_AUTOCOMMIT_ON);
+    }
+
+    /**
+     * Rollback a transaction.
+     *
+     * @return void
+     */
+    protected function _rollBack()
+    {
+        if (!db2_rollback($this->_connection)) {
+            throw new Doctrine_Adapter_Db2_Exception(
+                db2_conn_errormsg($this->_connection),
+                db2_conn_error($this->_connection));
+        }
+        $this->_setExecuteMode(DB2_AUTOCOMMIT_ON);
+    }
+
+    /**
+     * Set the fetch mode.
+     *
+     * @param integer $mode
+     * @return void
+     */
+    public function setFetchMode($mode)
+    {
+        switch ($mode) {
+            case Doctrine::FETCH_NUM:   // seq array
+            case Doctrine::FETCH_ASSOC: // assoc array
+            case Doctrine::FETCH_BOTH:  // seq+assoc array
+            case Doctrine::FETCH_OBJ:   // object
+                $this->_fetchMode = $mode;
+                break;
+            default:
+                throw new Doctrine_Adapter_Db2_Exception('Invalid fetch mode specified');
+                break;
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..9faba844853c789366e9fc509aba89ec824574e6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Db2/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Adapter_Exception');
+/**
+ * Doctrine_Adapter_Db2_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Adapter_Db2_Exception extends Doctrine_Adapter_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6d4b157f8239ab2e8976fe0e14033a66886bf3b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Adapter_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Adapter_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..790dfc39e043078ec756edb82029fb1746946f7d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Interface.php
@@ -0,0 +1,44 @@
+<?php
+/*
+ *  $Id: Interface.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Interface
+ * This adapter interface should be implemented by all custom adapters
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+interface Doctrine_Adapter_Interface {
+    public function prepare($prepareString);
+    public function query($queryString);
+    public function quote($input);
+    public function exec($statement);
+    public function lastInsertId();
+    public function beginTransaction();
+    public function commit();
+    public function rollBack();
+    public function errorCode();
+    public function errorInfo();
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mock.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mock.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d6295332f2c57dd1613a0e9f1121724964c6a88
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mock.php
@@ -0,0 +1,162 @@
+<?php
+/*
+ *  $Id: Mock.php 1819 2007-06-25 17:48:44Z subzero2000 $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Mock
+ * This class is used for special testing purposes.
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Adapter
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1819 $
+ */
+class Doctrine_Adapter_Mock implements Doctrine_Adapter_Interface, Countable
+{
+    private $name;
+    
+    private $queries = array();
+    
+    private $exception = array();
+    
+    private $lastInsertIdFail = false;
+
+    public function __construct($name = null) 
+    {
+        $this->name = $name;
+    }
+    public function getName() 
+    {
+        return $this->name;
+    }
+    public function pop() 
+    {
+        return array_pop($this->queries);
+    }
+    public function forceException($name, $message = '', $code = 0) 
+    {
+        $this->exception = array($name, $message, $code);
+    }
+    public function prepare($query)
+    {
+        $mock = new Doctrine_Adapter_Statement_Mock($this, $query);
+        $mock->queryString = $query;
+        
+        return $mock;
+    }
+    public function addQuery($query)
+    {
+        $this->queries[] = $query;
+    }
+    public function query($query) 
+    {
+        $this->queries[] = $query;
+
+        $e    = $this->exception;
+
+        if( ! empty($e)) {
+            $name = $e[0];
+
+            $this->exception = array();
+
+            throw new $name($e[1], $e[2]);
+        }
+
+        $stmt = new Doctrine_Adapter_Statement_Mock($this, $query);
+        $stmt->queryString = $query;
+        
+        return $stmt;
+    }
+    public function getAll() 
+    {
+        return $this->queries;
+    }
+    public function quote($input) 
+    {
+        return "'" . addslashes($input) . "'";
+    }
+    public function exec($statement) 
+    {
+        $this->queries[] = $statement;
+
+        $e    = $this->exception;
+
+        if( ! empty($e)) {
+            $name = $e[0];
+
+            $this->exception = array();
+
+            throw new $name($e[1], $e[2]);
+        }
+
+        return 0;
+    }
+    public function forceLastInsertIdFail($fail = true) 
+    {
+        if ($fail) {
+            $this->lastInsertIdFail = true;
+        } else {
+            $this->lastInsertIdFail = false;
+        }
+    }
+    public function lastInsertId()
+    {
+    	$this->queries[] = 'LAST_INSERT_ID()';
+    	if ($this->lastInsertIdFail) {
+            return null;
+    	} else {
+            return 1;
+        }
+    }
+    public function count() 
+    {
+        return count($this->queries);	
+    }
+    public function beginTransaction()
+    {
+        $this->queries[] = 'BEGIN TRANSACTION';
+    }
+    public function commit()
+    {
+        $this->queries[] = 'COMMIT';
+    }
+    public function rollBack() 
+    {
+        $this->queries[] = 'ROLLBACK';
+    }
+    public function errorCode() 
+    { }
+    public function errorInfo()
+    { }
+    public function getAttribute($attribute) 
+    {
+        if($attribute == Doctrine::ATTR_DRIVER_NAME)
+            return strtolower($this->name);
+    }
+    public function setAttribute($attribute, $value) 
+    {
+                                   	
+    }
+    public function sqliteCreateFunction()
+    { }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mysqli.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mysqli.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4de89d756d95177095433f1d57d5beb02e9c7e2
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Mysqli.php
@@ -0,0 +1,141 @@
+<?php
+/*
+ *  $Id: Mock.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Mysqli
+ * This class is used for special testing purposes.
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Adapter
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Adapter_Mysqli extends Doctrine_Adapter
+{
+    /**
+     * Creates a connection to the database.
+     *
+     * @return void
+     * @throws Doctrine_Adapter_Mysqli_Exception
+     */
+    protected function _connect()
+    {
+        if ($this->_connection) {
+            return;
+        }
+        // Suppress connection warnings here.
+        // Throw an exception instead.
+        @$this->_connection = new mysqli(
+            $this->_config['host'],
+            $this->_config['username'],
+            $this->_config['password'],
+            $this->_config['dbname']
+        );
+        if ($this->_connection === false || mysqli_connect_errno()) {
+            throw new Doctrine_Adapter_Mysqli_Exception(mysqli_connect_error());
+        }
+    }
+
+    /**
+     * Force the connection to close.
+     *
+     * @return void
+     */
+    public function closeConnection()
+    {
+        $this->_connection->close();
+        $this->_connection = null;
+    }
+
+    /**
+     * Prepare a statement and return a PDOStatement-like object.
+     *
+     * @param  string  $sql  SQL query
+     * @return Doctrine_Statement_Mysqli
+     */
+    public function prepare($sql)
+    {
+        $this->_connect();
+        $stmt = new Doctrine_Statement_Mysqli($this, $sql);
+        $stmt->setFetchMode($this->_fetchMode);
+        return $stmt;
+    }
+
+    /**
+     * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column.
+     *
+     * As a convention, on RDBMS brands that support sequences
+     * (e.g. Oracle, PostgreSQL, DB2), this method forms the name of a sequence
+     * from the arguments and returns the last id generated by that sequence.
+     * On RDBMS brands that support IDENTITY/AUTOINCREMENT columns, this method
+     * returns the last value generated for such a column, and the table name
+     * argument is disregarded.
+     *
+     * MySQL does not support sequences, so $tableName and $primaryKey are ignored.
+     *
+     * @param string $tableName   OPTIONAL Name of table.
+     * @param string $primaryKey  OPTIONAL Name of primary key column.
+     * @return integer
+     */
+    public function lastInsertId($tableName = null, $primaryKey = null)
+    {
+        $mysqli = $this->_connection;
+        return $mysqli->insert_id;
+    }
+
+    /**
+     * Begin a transaction.
+     *
+     * @return void
+     */
+    protected function _beginTransaction()
+    {
+        $this->_connect();
+        $this->_connection->autocommit(false);
+    }
+
+    /**
+     * Commit a transaction.
+     *
+     * @return void
+     */
+    protected function _commit()
+    {
+        $this->_connect();
+        $this->_connection->commit();
+        $this->_connection->autocommit(true);
+    }
+
+    /**
+     * Roll-back a transaction.
+     *
+     * @return void
+     */
+    protected function _rollBack()
+    {
+        $this->_connect();
+        $this->_connection->rollback();
+        $this->_connection->autocommit(true);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d19970d70c9076a076f0c3c2209c225de27584e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Oracle.php
@@ -0,0 +1,268 @@
+<?php
+/*
+ *  $Id: Mock.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Adapter');
+/**
+ * Doctrine_Adapter_Oracle
+ * [BORROWED FROM ZEND FRAMEWORK]
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Adapter
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Adapter_Oracle extends Doctrine_Adapter
+{
+    /**
+     * User-provided configuration.
+     *
+     * Basic keys are:
+     *
+     * username => (string) Connect to the database as this username.
+     * password => (string) Password associated with the username.
+     * dbname   => Either the name of the local Oracle instance, or the
+     *             name of the entry in tnsnames.ora to which you want to connect.
+     *
+     * @var array
+     */
+    protected $_config = array(
+        'dbname'       => null,
+        'username'     => null,
+        'password'     => null,
+    );
+
+    /**
+     * @var integer
+     */
+    protected $_execute_mode = OCI_COMMIT_ON_SUCCESS;
+
+    /**
+     * Constructor.
+     *
+     * $config is an array of key/value pairs containing configuration
+     * options.  These options are common to most adapters:
+     *
+     * username => (string) Connect to the database as this username.
+     * password => (string) Password associated with the username.
+     * dbname   => Either the name of the local Oracle instance, or the
+     *             name of the entry in tnsnames.ora to which you want to connect.
+     *
+     * @param array $config An array of configuration keys.
+     * @throws Doctrine_Adapter_Exception
+     */
+    public function __construct(array $config)
+    {
+        if ( ! isset($config['password']) || ! isset($config['username'])) {
+            throw new Doctrine_Adapter_Exception('config array must have at least a username and a password');
+        }
+
+        // @todo Let this protect backward-compatibility for one release, then remove
+        if ( ! isset($config['database']) || ! isset($config['dbname'])) {
+            $config['dbname'] = $config['database'];
+            unset($config['database']);
+            trigger_error("Deprecated config key 'database', use 'dbname' instead.", E_USER_NOTICE);
+        }
+
+        // keep the config
+        $this->_config = array_merge($this->_config, (array) $config);
+
+        // create a profiler object
+        $enabled = false;
+        if (array_key_exists('profiler', $this->_config)) {
+            $enabled = (bool) $this->_config['profiler'];
+            unset($this->_config['profiler']);
+        }
+
+        $this->_profiler = new Doctrine_Profiler($enabled);
+    }
+
+    /**
+     * Creates a connection resource.
+     *
+     * @return void
+     * @throws Doctrine_Adapter_Oracle_Exception
+     */
+    protected function _connect()
+    {
+        if (is_resource($this->_connection)) {
+            // connection already exists
+            return;
+        }
+
+        if (!extension_loaded('oci8')) {
+            throw new Doctrine_Adapter_Oracle_Exception('The OCI8 extension is required for this adapter but not loaded');
+        }
+
+        if (isset($this->_config['dbname'])) {
+            $this->_connection = @oci_connect(
+                $this->_config['username'],
+                $this->_config['password'],
+                $this->_config['dbname']);
+        } else {
+            $this->_connection = oci_connect(
+                $this->_config['username'],
+                $this->_config['password']);
+        }
+
+        // check the connection
+        if (!$this->_connection) {
+            throw new Doctrine_Adapter_Oracle_Exception(oci_error());
+        }
+    }
+
+    /**
+     * Force the connection to close.
+     *
+     * @return void
+     */
+    public function closeConnection()
+    {
+        if (is_resource($this->_connection)) {
+            oci_close($this->_connection);
+        }
+        $this->_connection = null;
+    }
+
+    /**
+     * Returns an SQL statement for preparation.
+     *
+     * @param string $sql The SQL statement with placeholders.
+     * @return Doctrine_Statement_Oracle
+     */
+    public function prepare($sql)
+    {
+        $this->_connect();
+        $stmt = new Doctrine_Statement_Oracle($this, $sql);
+        $stmt->setFetchMode($this->_fetchMode);
+        return $stmt;
+    }
+
+    /**
+     * Quote a raw string.
+     *
+     * @param string $value     Raw string
+     * @return string           Quoted string
+     */
+    protected function _quote($value)
+    {
+        $value = str_replace("'", "''", $value);
+        return "'" . addcslashes($value, "\000\n\r\\\032") . "'";
+    }
+
+    /**
+     * Quote a table identifier and alias.
+     *
+     * @param string|array|Doctrine_Expr $ident The identifier or expression.
+     * @param string $alias An alias for the table.
+     * @return string The quoted identifier and alias.
+     */
+    public function quoteTableAs($ident, $alias)
+    {
+        // Oracle doesn't allow the 'AS' keyword between the table identifier/expression and alias.
+        return $this->_quoteIdentifierAs($ident, $alias, ' ');
+    }
+    /**
+     * Leave autocommit mode and begin a transaction.
+     *
+     * @return void
+     */
+    protected function _beginTransaction()
+    {
+        $this->_setExecuteMode(OCI_DEFAULT);
+    }
+    /**
+     * Commit a transaction and return to autocommit mode.
+     *
+     * @return void
+     * @throws Doctrine_Adapter_Oracle_Exception
+     */
+    protected function _commit()
+    {
+        if (!oci_commit($this->_connection)) {
+            throw new Doctrine_Adapter_Oracle_Exception(oci_error($this->_connection));
+        }
+        $this->_setExecuteMode(OCI_COMMIT_ON_SUCCESS);
+    }
+    /**
+     * Roll back a transaction and return to autocommit mode.
+     *
+     * @return void
+     * @throws Doctrine_Adapter_Oracle_Exception
+     */
+    protected function _rollBack()
+    {
+        if (!oci_rollback($this->_connection)) {
+            throw new Doctrine_Adapter_Oracle_Exception(oci_error($this->_connection));
+        }
+        $this->_setExecuteMode(OCI_COMMIT_ON_SUCCESS);
+    }
+
+    /**
+     * Set the fetch mode.
+     *
+     * @todo Support FETCH_CLASS and FETCH_INTO.
+     *
+     * @param integer $mode A fetch mode.
+     * @return void
+     * @throws Doctrine_Adapter_Exception
+     */
+    public function setFetchMode($mode)
+    {
+        switch ($mode) {
+            case Doctrine::FETCH_NUM:   // seq array
+            case Doctrine::FETCH_ASSOC: // assoc array
+            case Doctrine::FETCH_BOTH:  // seq+assoc array
+            case Doctrine::FETCH_OBJ:   // object
+                $this->_fetchMode = $mode;
+                break;
+            default:
+                throw new Doctrine_Adapter_Exception('Invalid fetch mode specified');
+                break;
+        }
+    }
+    /**
+     * @param integer $mode
+     * @throws Doctrine_Adapter_Exception
+     */
+    private function _setExecuteMode($mode)
+    {
+        switch($mode) {
+            case OCI_COMMIT_ON_SUCCESS:
+            case OCI_DEFAULT:
+            case OCI_DESCRIBE_ONLY:
+                $this->_execute_mode = $mode;
+                break;
+            default:
+                throw new Doctrine_Adapter_Exception('wrong execution mode specified');
+                break;
+        }
+    }
+    /**
+     * @return
+     */
+    public function _getExecuteMode()
+    {
+        return $this->_execute_mode;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef65e07482c755b6df0a07d874f069882958de8f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement.php
@@ -0,0 +1,88 @@
+<?php
+/*
+ *  $Id: Statement.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Statement
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ */
+abstract class Doctrine_Adapter_Statement
+{
+    public function bindValue($no, $value)
+    {
+    }
+    /**
+     * fetch
+     *
+     * @see Doctrine::FETCH_* constants
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $cursorOrientation    For a PDOStatement object representing a scrollable cursor, 
+     *                                      this value determines which row will be returned to the caller. 
+     *                                      This value must be one of the Doctrine::FETCH_ORI_* constants, defaulting to
+     *                                      Doctrine::FETCH_ORI_NEXT. To request a scrollable cursor for your 
+     *                                      Doctrine_Adapter_Statement_Interface object,
+     *                                      you must set the Doctrine::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
+     *                                      prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+     *
+     * @param integer $cursorOffset         For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+     *                                      $cursorOrientation parameter is set to Doctrine::FETCH_ORI_ABS, this value specifies
+     *                                      the absolute number of the row in the result set that shall be fetched.
+     *                                      
+     *                                      For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for 
+     *                                      which the $cursorOrientation parameter is set to Doctrine::FETCH_ORI_REL, this value 
+     *                                      specifies the row to fetch relative to the cursor position before 
+     *                                      Doctrine_Adapter_Statement_Interface->fetch() was called.
+     *
+     * @return mixed
+     */
+    public function fetch()
+    {
+    }
+    public function nextRowset()
+    {
+    }
+    public function execute()
+    {
+    }
+    public function errorCode()
+    {
+    }
+    public function errorInfo()
+    {
+    }
+    public function rowCount()
+    {
+    }
+    public function setFetchMode($mode)
+    {
+    }
+    public function columnCount()
+    {
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc5dee67cca79a80c66feb0ac9a243a23e384c8b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Interface.php
@@ -0,0 +1,275 @@
+<?php
+/*
+ *  $Id: Interface.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Statement
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+interface Doctrine_Adapter_Statement_Interface
+{    
+    /**
+     * bindColumn
+     * Bind a column to a PHP variable
+     *
+     * @param mixed $column         Number of the column (1-indexed) or name of the column in the result set.
+     *                              If using the column name, be aware that the name should match
+     *                              the case of the column, as returned by the driver.
+     * @param string $param         Name of the PHP variable to which the column will be bound.
+     * @param integer $type         Data type of the parameter, specified by the Doctrine::PARAM_* constants.
+     * @return boolean              Returns TRUE on success or FALSE on failure
+     */
+    public function bindColumn($column, $param, $type = null);
+    /**
+     * bindValue
+     * Binds a value to a corresponding named or question mark 
+     * placeholder in the SQL statement that was use to prepare the statement.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $value          The value to bind to the parameter.
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindValue($param, $value, $type = null);
+    /**
+     * bindParam
+     * Binds a PHP variable to a corresponding named or question mark placeholder in the 
+     * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+     * the variable is bound as a reference and will only be evaluated at the time 
+     * that Doctrine_Adapter_Statement_Interface->execute() is called.
+     *
+     * Most parameters are input parameters, that is, parameters that are 
+     * used in a read-only fashion to build up the query. Some drivers support the invocation 
+     * of stored procedures that return data as output parameters, and some also as input/output
+     * parameters that both send in data and are updated to receive it.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $variable       Name of the PHP variable to bind to the SQL statement parameter.
+     *
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants. To return
+     *                              an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+     *                              Doctrine::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+     *
+     * @param integer $length       Length of the data type. To indicate that a parameter is an OUT parameter
+     *                              from a stored procedure, you must explicitly set the length.
+     * @param mixed $driverOptions
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindParam($column, $variable, $type = null, $length = null, $driverOptions = array());
+    /**
+     * closeCursor
+     * Closes the cursor, enabling the statement to be executed again.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function closeCursor();
+    /** 
+     * columnCount
+     * Returns the number of columns in the result set 
+     *
+     * @return integer              Returns the number of columns in the result set represented
+     *                              by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+     *                              this method should return 0.
+     */
+    public function columnCount();
+    /**
+     * errorCode
+     * Fetch the SQLSTATE associated with the last operation on the statement handle 
+     *
+     * @see Doctrine_Adapter_Interface::errorCode()
+     * @return string       error code string
+     */
+    public function errorCode();
+    /**
+     * errorInfo
+     * Fetch extended error information associated with the last operation on the statement handle
+     *
+     * @see Doctrine_Adapter_Interface::errorInfo()
+     * @return array        error info array
+     */
+    public function errorInfo();
+    /**
+     * execute
+     * Executes a prepared statement
+     *
+     * If the prepared statement included parameter markers, you must either:
+     * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+     * bound variables pass their value as input and receive the output value,
+     * if any, of their associated parameter markers or pass an array of input-only
+     * parameter values
+     *
+     *
+     * @param array $params             An array of values with as many elements as there are
+     *                                  bound parameters in the SQL statement being executed.
+     * @return boolean                  Returns TRUE on success or FALSE on failure.
+     */
+    public function execute($params = null);
+    /**
+     * fetch
+     *
+     * @see Doctrine::FETCH_* constants
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $cursorOrientation    For a PDOStatement object representing a scrollable cursor, 
+     *                                      this value determines which row will be returned to the caller. 
+     *                                      This value must be one of the Doctrine::FETCH_ORI_* constants, defaulting to
+     *                                      Doctrine::FETCH_ORI_NEXT. To request a scrollable cursor for your 
+     *                                      Doctrine_Adapter_Statement_Interface object,
+     *                                      you must set the Doctrine::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
+     *                                      prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+     *
+     * @param integer $cursorOffset         For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+     *                                      $cursorOrientation parameter is set to Doctrine::FETCH_ORI_ABS, this value specifies
+     *                                      the absolute number of the row in the result set that shall be fetched.
+     *                                      
+     *                                      For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for 
+     *                                      which the $cursorOrientation parameter is set to Doctrine::FETCH_ORI_REL, this value 
+     *                                      specifies the row to fetch relative to the cursor position before 
+     *                                      Doctrine_Adapter_Statement_Interface->fetch() was called.
+     *
+     * @return mixed
+     */
+    public function fetch($fetchStyle = Doctrine::FETCH_BOTH,
+                          $cursorOrientation = Doctrine::FETCH_ORI_NEXT,
+                          $cursorOffset = null);
+    /**
+     * fetchAll
+     * Returns an array containing all of the result set rows
+     *
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $columnIndex          Returns the indicated 0-indexed column when the value of $fetchStyle is
+     *                                      Doctrine::FETCH_COLUMN. Defaults to 0.
+     *
+     * @return array
+     */
+    public function fetchAll($fetchStyle = Doctrine::FETCH_BOTH);
+    /**
+     * fetchColumn
+     * Returns a single column from the next row of a
+     * result set or FALSE if there are no more rows.
+     *
+     * @param integer $columnIndex          0-indexed number of the column you wish to retrieve from the row. If no 
+     *                                      value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn() 
+     *                                      fetches the first column.
+     *
+     * @return string                       returns a single column in the next row of a result set.
+     */
+    public function fetchColumn($columnIndex = 0);
+    /**
+     * fetchObject
+     * Fetches the next row and returns it as an object.
+     *
+     * Fetches the next row and returns it as an object. This function is an alternative to 
+     * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine::FETCH_CLASS or Doctrine::FETCH_OBJ style.
+     *
+     * @param string $className             Name of the created class, defaults to stdClass. 
+     * @param array $args                   Elements of this array are passed to the constructor.
+     *
+     * @return mixed                        an instance of the required class with property names that correspond 
+     *                                      to the column names or FALSE in case of an error.
+     */
+    public function fetchObject($className = 'stdClass', $args = array());
+    /**
+     * getAttribute
+     * Retrieve a statement attribute 
+     *
+     * @param integer $attribute
+     * @see Doctrine::ATTR_* constants
+     * @return mixed                        the attribute value
+     */
+    public function getAttribute($attribute);
+    /**
+     * getColumnMeta
+     * Returns metadata for a column in a result set
+     *
+     * @param integer $column               The 0-indexed column in the result set.
+     *
+     * @return array                        Associative meta data array with the following structure:
+     *
+     *          native_type                 The PHP native type used to represent the column value.
+     *          driver:decl_                type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+     *          flags                       Any flags set for this column.
+     *          name                        The name of this column as returned by the database.
+     *          len                         The length of this column. Normally -1 for types other than floating point decimals.
+     *          precision                   The numeric precision of this column. Normally 0 for types other than floating point decimals.
+     *          pdo_type                    The type of this column as represented by the PDO::PARAM_* constants.
+     */
+    public function getColumnMeta($column);
+    /**
+     * nextRowset
+     * Advances to the next rowset in a multi-rowset statement handle
+     * 
+     * Some database servers support stored procedures that return more than one rowset 
+     * (also known as a result set). The nextRowset() method enables you to access the second 
+     * and subsequent rowsets associated with a PDOStatement object. Each rowset can have a 
+     * different set of columns from the preceding rowset.
+     *
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function nextRowset();
+    /**
+     * rowCount
+     * rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement 
+     * executed by the corresponding object.
+     *
+     * If the last SQL statement executed by the associated Statement object was a SELECT statement, 
+     * some databases may return the number of rows returned by that statement. However, 
+     * this behaviour is not guaranteed for all databases and should not be 
+     * relied on for portable applications.
+     *
+     * @return integer                      Returns the number of rows.
+     */
+    public function rowCount();
+    /**
+     * setAttribute
+     * Set a statement attribute
+     *
+     * @param integer $attribute
+     * @param mixed $value                  the value of given attribute
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function setAttribute($attribute, $value);
+    /**
+     * setFetchMode
+     * Set the default fetch mode for this statement 
+     *
+     * @param integer $mode                 The fetch mode must be one of the Doctrine::FETCH_* constants.
+     * @return boolean                      Returns 1 on success or FALSE on failure.
+     */
+    public function setFetchMode($mode, $arg1 = null, $arg2 = null);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Mock.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Mock.php
new file mode 100644
index 0000000000000000000000000000000000000000..030a8143f4b90dfdf985a3682e35c751ce545d21
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Adapter/Statement/Mock.php
@@ -0,0 +1,334 @@
+<?php
+/*
+ *  $Id: Mock.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Adapter_Statement_Mock
+ * This class is used for special testing purposes.
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Adapter
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ */
+class Doctrine_Adapter_Statement_Mock implements Doctrine_Adapter_Statement_Interface
+{
+    private $mock;
+    
+    public $queryString;
+
+    public function __construct($mock)
+    {
+        $this->mock  = $mock;
+    }
+    /**
+     * bindColumn
+     * Bind a column to a PHP variable
+     *
+     * @param mixed $column         Number of the column (1-indexed) or name of the column in the result set.
+     *                              If using the column name, be aware that the name should match
+     *                              the case of the column, as returned by the driver.
+     * @param string $param         Name of the PHP variable to which the column will be bound.
+     * @param integer $type         Data type of the parameter, specified by the Doctrine::PARAM_* constants.
+     * @return boolean              Returns TRUE on success or FALSE on failure
+     */
+    public function bindColumn($column, $param, $type = null)
+    {
+    	
+    }
+    /**
+     * bindValue
+     * Binds a value to a corresponding named or question mark 
+     * placeholder in the SQL statement that was use to prepare the statement.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $value          The value to bind to the parameter.
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindValue($param, $value, $type = null)
+    {
+    	
+    }
+    /**
+     * bindParam
+     * Binds a PHP variable to a corresponding named or question mark placeholder in the 
+     * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+     * the variable is bound as a reference and will only be evaluated at the time 
+     * that Doctrine_Adapter_Statement_Interface->execute() is called.
+     *
+     * Most parameters are input parameters, that is, parameters that are 
+     * used in a read-only fashion to build up the query. Some drivers support the invocation 
+     * of stored procedures that return data as output parameters, and some also as input/output
+     * parameters that both send in data and are updated to receive it.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $variable       Name of the PHP variable to bind to the SQL statement parameter.
+     *
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants. To return
+     *                              an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+     *                              Doctrine::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+     *
+     * @param integer $length       Length of the data type. To indicate that a parameter is an OUT parameter
+     *                              from a stored procedure, you must explicitly set the length.
+     * @param mixed $driverOptions
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindParam($column, $variable, $type = null, $length = null, $driverOptions = array())
+    {
+    	
+    }
+    /**
+     * closeCursor
+     * Closes the cursor, enabling the statement to be executed again.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function closeCursor()
+    {
+        return true;
+    }
+    /** 
+     * columnCount
+     * Returns the number of columns in the result set 
+     *
+     * @return integer              Returns the number of columns in the result set represented
+     *                              by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+     *                              this method should return 0.
+     */
+    public function columnCount()
+    {
+        return 0;    	
+    }
+    /**
+     * errorCode
+     * Fetch the SQLSTATE associated with the last operation on the statement handle 
+     *
+     * @see Doctrine_Adapter_Interface::errorCode()
+     * @return string       error code string
+     */
+    public function errorCode()
+    {
+        return array();
+    }
+    /**
+     * errorInfo
+     * Fetch extended error information associated with the last operation on the statement handle
+     *
+     * @see Doctrine_Adapter_Interface::errorInfo()
+     * @return array        error info array
+     */
+    public function errorInfo()
+    { 
+        return array();
+    }
+    /**
+     * fetch
+     *
+     * @see Doctrine::FETCH_* constants
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $cursorOrientation    For a PDOStatement object representing a scrollable cursor, 
+     *                                      this value determines which row will be returned to the caller. 
+     *                                      This value must be one of the Doctrine::FETCH_ORI_* constants, defaulting to
+     *                                      Doctrine::FETCH_ORI_NEXT. To request a scrollable cursor for your 
+     *                                      Doctrine_Adapter_Statement_Interface object,
+     *                                      you must set the Doctrine::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
+     *                                      prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+     *
+     * @param integer $cursorOffset         For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+     *                                      $cursorOrientation parameter is set to Doctrine::FETCH_ORI_ABS, this value specifies
+     *                                      the absolute number of the row in the result set that shall be fetched.
+     *                                      
+     *                                      For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for 
+     *                                      which the $cursorOrientation parameter is set to Doctrine::FETCH_ORI_REL, this value 
+     *                                      specifies the row to fetch relative to the cursor position before 
+     *                                      Doctrine_Adapter_Statement_Interface->fetch() was called.
+     *
+     * @return mixed
+     */
+    public function fetch($fetchStyle = Doctrine::FETCH_BOTH,
+                          $cursorOrientation = Doctrine::FETCH_ORI_NEXT,
+                          $cursorOffset = null)
+    {
+        return array();
+    }
+    /**
+     * fetchAll
+     * Returns an array containing all of the result set rows
+     *
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $columnIndex          Returns the indicated 0-indexed column when the value of $fetchStyle is
+     *                                      Doctrine::FETCH_COLUMN. Defaults to 0.
+     *
+     * @return array
+     */
+    public function fetchAll($fetchMode = Doctrine::FETCH_BOTH)
+    {
+        return array();
+    }
+    /**
+     * execute
+     * Executes a prepared statement
+     *
+     * If the prepared statement included parameter markers, you must either:
+     * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+     * bound variables pass their value as input and receive the output value,
+     * if any, of their associated parameter markers or pass an array of input-only
+     * parameter values
+     *
+     *
+     * @param array $params             An array of values with as many elements as there are
+     *                                  bound parameters in the SQL statement being executed.
+     * @return boolean                  Returns TRUE on success or FALSE on failure.
+     */
+    public function execute($params = null)
+    {
+    	if(is_object($this->mock)) {
+            $this->mock->addQuery($this->queryString);
+        }
+        return true;
+    }
+    /**
+     * fetchColumn
+     * Returns a single column from the next row of a
+     * result set or FALSE if there are no more rows.
+     *
+     * @param integer $columnIndex          0-indexed number of the column you wish to retrieve from the row. If no 
+     *                                      value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn() 
+     *                                      fetches the first column.
+     *
+     * @return string                       returns a single column in the next row of a result set.
+     */
+    public function fetchColumn($columnIndex = 0)
+    {
+        return 0;
+    }
+    /**
+     * fetchObject
+     * Fetches the next row and returns it as an object.
+     *
+     * Fetches the next row and returns it as an object. This function is an alternative to 
+     * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine::FETCH_CLASS or Doctrine::FETCH_OBJ style.
+     *
+     * @param string $className             Name of the created class, defaults to stdClass. 
+     * @param array $args                   Elements of this array are passed to the constructor.
+     *
+     * @return mixed                        an instance of the required class with property names that correspond 
+     *                                      to the column names or FALSE in case of an error.
+     */
+    public function fetchObject($className = 'stdClass', $args = array()) 
+    {
+        return new $className();
+    }
+    /**
+     * nextRowset
+     * Advances to the next rowset in a multi-rowset statement handle
+     * 
+     * Some database servers support stored procedures that return more than one rowset 
+     * (also known as a result set). The nextRowset() method enables you to access the second 
+     * and subsequent rowsets associated with a PDOStatement object. Each rowset can have a 
+     * different set of columns from the preceding rowset.
+     *
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function nextRowset()
+    {
+        return true;
+    }
+    /**
+     * rowCount
+     * rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement 
+     * executed by the corresponding object.
+     *
+     * If the last SQL statement executed by the associated Statement object was a SELECT statement, 
+     * some databases may return the number of rows returned by that statement. However, 
+     * this behaviour is not guaranteed for all databases and should not be 
+     * relied on for portable applications.
+     *
+     * @return integer                      Returns the number of rows.
+     */
+    public function rowCount()
+    { 
+        return 0;
+    }
+    /**
+     * getColumnMeta
+     * Returns metadata for a column in a result set
+     *
+     * @param integer $column               The 0-indexed column in the result set.
+     *
+     * @return array                        Associative meta data array with the following structure:
+     *
+     *          native_type                 The PHP native type used to represent the column value.
+     *          driver:decl_                type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+     *          flags                       Any flags set for this column.
+     *          name                        The name of this column as returned by the database.
+     *          len                         The length of this column. Normally -1 for types other than floating point decimals.
+     *          precision                   The numeric precision of this column. Normally 0 for types other than floating point decimals.
+     *          pdo_type                    The type of this column as represented by the PDO::PARAM_* constants.
+     */
+    public function getColumnMeta($column)
+    { }
+    /**
+     * getAttribute
+     * Retrieve a statement attribute 
+     *
+     * @param integer $attribute
+     * @see Doctrine::ATTR_* constants
+     * @return mixed                        the attribute value
+     */
+    public function getAttribute($attribute)
+    { }
+    /**
+     * setAttribute
+     * Set a statement attribute
+     *
+     * @param integer $attribute
+     * @param mixed $value                  the value of given attribute
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function setAttribute($attribute, $value)
+    { }
+    /**
+     * setFetchMode
+     * Set the default fetch mode for this statement
+     *
+     * @param integer $mode                 The fetch mode must be one of the Doctrine::FETCH_* constants.
+     * @return boolean                      Returns 1 on success or FALSE on failure.
+     */
+    public function setFetchMode($mode, $arg1 = null, $arg2 = null)
+    { }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog.php
new file mode 100644
index 0000000000000000000000000000000000000000..fbac8236567f49b955607b9af185a23c88fc95b8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog.php
@@ -0,0 +1,163 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_AuditLog
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_AuditLog
+{
+    protected $_options = array(
+                            'className'     => '%CLASS%Version',
+                            'versionColumn' => 'version',
+                            'generateFiles' => false,
+                            'table'         => false,
+                            );
+
+    protected $_auditTable;
+
+    public function __construct($options)
+    {
+        $this->_options = array_merge($this->_options, $options);
+    }
+    /**
+     * __get
+     * an alias for getOption
+     *
+     * @param string $option
+     */
+    public function __get($option)
+    {
+        if (isset($this->options[$option])) {
+            return $this->_options[$option];
+        }
+        return null;
+    }
+    /**
+     * __isset
+     *
+     * @param string $option
+     */
+    public function __isset($option) 
+    {
+        return isset($this->_options[$option]);
+    }
+    /**
+     * getOptions
+     * returns all options of this table and the associated values
+     *
+     * @return array    all options and their values
+     */
+    public function getOptions()
+    {
+        return $this->_options;
+    }
+    /**
+     * setOption
+     * sets an option and returns this object in order to
+     * allow flexible method chaining
+     *
+     * @see slef::$_options             for available options
+     * @param string $name              the name of the option to set
+     * @param mixed $value              the value of the option
+     * @return Doctrine_AuditLog        this object
+     */
+    public function setOption($name, $value)
+    {
+        if ( ! isset($this->_options[$name])) {
+            throw new Doctrine_Exception('Unknown option ' . $name);
+        }
+        $this->_options[$name] = $value;
+    }
+    /**
+     * getOption
+     * returns the value of given option
+     *
+     * @param string $name  the name of the option
+     * @return mixed        the value of given option
+     */
+    public function getOption($name)
+    {
+        if (isset($this->_options[$name])) {
+            return $this->_options[$name];
+        }
+        return null;
+    }
+
+    public function getVersion(Doctrine_Record $record, $version)
+    {           
+        $className = $this->_options['className'];
+
+        $q = new Doctrine_Query();
+
+        $values = array();
+        foreach ((array) $this->_options['table']->getIdentifier() as $id) {
+            $conditions[] = $className . '.' . $id . ' = ?';
+            $values[] = $record->get($id);
+        }
+        $where = implode(' AND ', $conditions) . ' AND ' . $className . '.' . $this->_options['versionColumn'] . ' = ?';
+        
+        $values[] = $version;
+
+        $q->from($className)
+          ->where($where);
+
+        return $q->execute($values, Doctrine_HYDRATE::HYDRATE_ARRAY);
+    }
+    public function buildDefinition(Doctrine_Table $table)
+    {
+        $this->_options['className'] = str_replace('%CLASS%', 
+                                                   $this->_options['table']->getComponentName(),
+                                                   $this->_options['className']);
+
+        $name = $table->getComponentName();
+
+        $className = $name . 'Version';
+        
+        if (class_exists($className)) {
+            return false;
+        }
+
+        $columns = $table->getColumns();
+        
+        // the version column should be part of the primary key definition
+        $columns[$this->_options['versionColumn']]['primary'] = true;
+
+        $id = $table->getIdentifier();
+
+        $options = array('className' => $className);
+
+        $builder = new Doctrine_Import_Builder();
+
+        $def = $builder->buildDefinition($options, $columns);
+
+        if ( ! $this->_options['generateFiles']) {
+            eval($def);
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog/Listener.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog/Listener.php
new file mode 100644
index 0000000000000000000000000000000000000000..0405393ab2522604fd5d41e1ac08e1a9f981f25c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/AuditLog/Listener.php
@@ -0,0 +1,77 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Record_Listener');
+/**
+ * Doctrine_AuditLog_Listener
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_AuditLog_Listener extends Doctrine_Record_Listener
+{
+    
+    protected $_auditLog;
+
+    public function __construct(Doctrine_AuditLog $auditLog) {
+        $this->_auditLog = $auditLog;
+    }
+    public function preInsert(Doctrine_Event $event)
+    {
+    	$versionColumn = $this->_auditLog->getOption('versionColumn');
+
+        $event->getInvoker()->set($versionColumn, 1);
+    }
+    public function preDelete(Doctrine_Event $event)
+    {
+        $class = $this->_auditLog->getOption('className');
+
+        $record  = $event->getInvoker();
+
+        $version = new $class();
+        $version->merge($record->toArray());
+        $version->save();
+
+    	$versionColumn = $this->_auditLog->getOption('versionColumn');
+    	$version = $record->get($versionColumn);
+
+        $record->set($versionColumn, ++$version);
+    }
+    public function preUpdate(Doctrine_Event $event)
+    {
+    	$class = $this->_auditLog->getOption('className');
+        $record  = $event->getInvoker();
+        
+        $version = new $class();
+        $version->merge($record->toArray());
+        $version->save();        
+
+    	$versionColumn = $this->_auditLog->getOption('versionColumn');
+
+    	$version = $record->get($versionColumn);
+
+        $record->set($versionColumn, ++$version);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache.php
new file mode 100644
index 0000000000000000000000000000000000000000..29873889a4e3142936d08140f9cf47e624265b18
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache.php
@@ -0,0 +1,401 @@
+<?php
+/*
+ *  $Id: Cache.php 1857 2007-06-26 22:30:23Z subzero2000 $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_EventListener');
+/**
+ * Doctrine_Cache
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1857 $
+ */
+class Doctrine_Cache extends Doctrine_EventListener implements Countable, IteratorAggregate
+{
+    /**
+     * @var array $_options                         an array of general caching options
+     */
+    protected $_options = array('size'                  => 1000,
+                                'lifeTime'              => 3600,
+                                'addStatsPropability'   => 0.25,
+                                'savePropability'       => 0.10,
+                                'cleanPropability'      => 0.01,
+                                'statsFile'             => '../data/stats.cache',
+                                );
+    /**
+     * @var array $_queries                         query stack
+     */
+    protected $_queries = array();
+    /**
+     * @var Doctrine_Cache_Interface $_driver       the cache driver object
+     */
+    protected $_driver;
+    /**
+     * @var array $data                             current cache data array
+     */
+    protected $_data = array();
+    /**
+     * @var boolean $success                        the success of last operation
+     */
+    protected $_success = false;
+    /**
+     * constructor
+     *
+     * @param Doctrine_Cache_Interface|string $driver       cache driver name or a driver object
+     * @param array $options                                cache driver options
+     */
+    public function __construct($driver, $options = array())
+    {
+    	if (is_object($driver)) {
+    	   if ( ! ($driver instanceof Doctrine_Cache_Interface)) {
+    	       throw new Doctrine_Cache_Exception('Driver should implement Doctrine_Cache_Interface.');
+    	   }
+    	   
+    	   $this->_driver = $driver;
+    	   $this->_driver->setOptions($options);
+        } else {
+            $class = 'Doctrine_Cache_' . ucwords(strtolower($driver));
+    
+            if ( ! class_exists($class)) {
+                throw new Doctrine_Cache_Exception('Cache driver ' . $driver . ' could not be found.');
+            }
+    
+            $this->_driver = new $class($options);
+        }
+    }
+    /**
+     * getDriver
+     * returns the current cache driver
+     *
+     * @return Doctrine_Cache_Driver
+     */
+    public function getDriver()
+    {
+        return $this->_driver;
+    }
+    /**
+     * setOption
+     *
+     * @param mixed $option     the option name
+     * @param mixed $value      option value
+     * @return boolean          TRUE on success, FALSE on failure
+     */
+    public function setOption($option, $value)
+    {
+    	// sanity check (we need this since we are using isset() instead of array_key_exists())
+    	if ($value === null) {
+            throw new Doctrine_Cache_Exception('Null values not accepted for options.');
+    	}
+
+    	if (isset($this->_options[$option])) {
+            $this->_options[$option] = $value;
+            return true;
+        }
+        return false;
+    }
+    /**
+     * getOption
+     * 
+     * @param mixed $option     the option name
+     * @return mixed            option value
+     */
+    public function getOption($option)
+    {
+        if ( ! isset($this->_options[$option])) {
+            throw new Doctrine_Cache_Exception('Unknown option ' . $option);
+        }
+
+        return $this->_options[$option];
+    }
+    /**
+     * add
+     * adds a query to internal query stack
+     *
+     * @param string|array $query           sql query string
+     * @param string $namespace             connection namespace
+     * @return void
+     */
+    public function add($query, $namespace = null)
+    {
+    	if (isset($namespace)) {
+            $this->_queries[$namespace][] = $query;
+        } else {
+            $this->_queries[] = $query;
+        }
+    }
+    /**
+     * getQueries
+     *
+     * @param string $namespace     optional query namespace
+     * @return array                an array of sql query strings
+     */
+    public function getAll($namespace = null)
+    {
+        if (isset($namespace)) {
+            if( ! isset($this->_queries[$namespace])) {
+                return array();
+            }
+
+            return $this->_queries[$namespace];
+        }
+        
+        return $this->_queries;
+    }
+    /**
+     * pop
+     *
+     * pops a query from the stack
+     * @return string
+     */
+    public function pop()
+    {
+        return array_pop($this->_queries);
+    }
+    /**
+     * reset
+     *
+     * removes all queries from the query stack
+     * @return void
+     */
+    public function reset()
+    {
+        $this->_queries = array();
+    }
+    /**
+     * count
+     *
+     * @return integer          the number of queries in the stack
+     */
+    public function count() 
+    {
+        return count($this->_queries);
+    }
+    /**
+     * getIterator
+     *
+     * @return ArrayIterator    an iterator that iterates through the query stack
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->_queries);
+    }
+    /**
+     * @return boolean          whether or not the last cache operation was successful
+     */
+    public function isSuccessful() 
+    {
+        return $this->_success;
+    }
+    /**
+     * save
+     *
+     * @return boolean
+     */
+    public function clean()
+    {
+        $rand = (mt_rand() / mt_getrandmax());
+
+    	if ($rand <= $this->_options['cleanPropability']) {
+            $queries = $this->readStats();
+
+            $stats   = array();
+    
+            foreach ($queries as $query) {
+                if (isset($stats[$query])) {
+                    $stats[$query]++;
+                } else {
+                    $stats[$query] = 1;
+                }
+            }
+            sort($stats);
+    
+            $i = $this->_options['size'];
+    
+            while ($i--) {
+                $element = next($stats);
+                $query   = key($stats);
+
+                $hash = md5($query);
+
+                $this->_driver->delete($hash);
+            }
+        }
+    }
+    /**
+     * readStats
+     *
+     * @return array
+     */
+    public function readStats() 
+    {
+    	if ($this->_options['statsFile'] !== false) {
+    	   $content = file_get_contents($this->_options['statsFile']);
+           
+           $e = explode("\n", $content);
+           
+           return array_map('unserialize', $e);
+    	}
+    	return array();
+    }
+    /**
+     * appendStats
+     *
+     * adds all queries to stats file
+     * @return void
+     */
+    public function appendStats()
+    {
+    	if ($this->_options['statsFile'] !== false) {
+
+            if ( ! file_exists($this->_options['statsFile'])) {
+                throw new Doctrine_Cache_Exception("Couldn't save cache statistics. Cache statistics file doesn't exists!");
+            }
+            
+            $rand = (mt_rand() / mt_getrandmax());
+
+            if ($rand <= $this->_options['addStatsPropability']) {
+                file_put_contents($this->_options['statsFile'], implode("\n", array_map('serialize', $this->_queries)));
+            }
+        }
+    }
+    /**
+     * preQuery
+     * listens on the Doctrine_Event preQuery event
+     *
+     * adds the issued query to internal query stack
+     * and checks if cached element exists
+     *
+     * @return boolean
+     */
+    public function preQuery(Doctrine_Event $event)
+    {
+        $query = $event->getQuery();
+
+        $data  = false;
+        // only process SELECT statements
+        if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
+
+            $this->add($query, $event->getInvoker()->getName());
+
+            $data = $this->_driver->fetch(md5(serialize($query)));
+
+            $this->success = ($data) ? true : false;
+
+            if ( ! $data) {
+                $rand = (mt_rand() / mt_getrandmax());
+
+                if ($rand < $this->_options['savePropability']) {
+                    $stmt = $event->getInvoker()->getAdapter()->query($query);
+
+                    $data = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
+
+                    $this->success = true;
+
+                    $this->_driver->save(md5(serialize($query)), $data);
+                }
+            }
+            if ($this->success)
+            {
+                $this->_data = $data;
+                return true;
+            }
+        }
+        return false;
+    }
+    /**
+     * preFetch
+     * listens the preFetch event of Doctrine_Connection_Statement
+     *
+     * advances the internal pointer of cached data and returns 
+     * the current element
+     *
+     * @return array
+     */
+    public function preFetch(Doctrine_Event $event)
+    {
+        $ret = current($this->_data);
+    	next($this->_data);
+        return $ret;
+    }
+    /**
+     * preFetch
+     * listens the preFetchAll event of Doctrine_Connection_Statement
+     *
+     * returns the current cache data array
+     *
+     * @return array
+     */
+    public function preFetchAll(Doctrine_Event $event)
+    {
+        return $this->_data;
+    }
+    /**
+     * preExecute
+     * listens the preExecute event of Doctrine_Connection_Statement
+     *
+     * adds the issued query to internal query stack
+     * and checks if cached element exists
+     *
+     * @return boolean
+     */
+    public function preExecute(Doctrine_Event $event)
+    {
+        $query = $event->getQuery();
+
+        $data  = false;
+
+        // only process SELECT statements
+        if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
+
+            $this->add($query, $event->getInvoker()->getDbh()->getName());
+
+            $data = $this->_driver->fetch(md5(serialize(array($query, $event->getParams()))));
+
+            $this->success = ($data) ? true : false;
+
+            if ( ! $data) {
+                $rand = (mt_rand() / mt_getrandmax());
+
+                if ($rand <= $this->_options['savePropability']) {
+
+                    $stmt = $event->getInvoker()->getStatement();
+
+                    $stmt->execute($event->getParams());
+
+                    $data = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
+
+                    $this->success = true;
+
+                    $this->_driver->save(md5(serialize(array($query, $event->getParams()))), $data);
+                }
+            }
+            if ($this->success)
+            {
+                $this->_data = $data;
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Apc.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Apc.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8ff4e8a9e989027289184e8115766a3586730b7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Apc.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ *  $Id: Apc.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Cache_Apc
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Cache_Apc extends Doctrine_Cache_Driver
+{
+    /**
+     * constructor
+     * 
+     * @param array $options    associative array of cache driver options
+     */
+    public function __construct($options = array())
+    {      
+        if ( ! extension_loaded('apc')) {
+            throw new Doctrine_Cache_Exception('The apc extension must be loaded for using this backend !');
+        }
+        parent::__construct($options);
+    }
+    /**
+     * Test if a cache is available for the given id and (if yes) return it (false else)
+     * 
+     * Note : return value is always "string" (unserialization is done by the core not by the backend)
+     * 
+     * @param string $id cache id
+     * @param boolean $testCacheValidity        if set to false, the cache validity won't be tested
+     * @return string cached datas (or false)
+     */
+    public function fetch($id, $testCacheValidity = true) 
+    {
+        $tmp = apc_fetch($id);
+        if (is_array($tmp)) {
+            return $tmp[0];
+        }
+        return false;
+    }
+    /**
+     * Test if a cache is available or not (for the given id)
+     *
+     * @param string $id cache id
+     * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record
+     */
+    public function contains($id) 
+    {
+        $tmp = apc_fetch($id);
+        if (is_array($tmp)) {
+            return $tmp[1];
+        }
+        return false;
+    }
+    /**
+     * Save some string datas into a cache record
+     *
+     * Note : $data is always saved as a string
+     *
+     * @param string $data      data to cache
+     * @param string $id        cache id
+     * @param int $lifeTime     if != false, set a specific lifetime for this cache record (null => infinite lifeTime)
+     * @return boolean true if no problem
+     */
+    public function save($id, $data, $lifeTime = false)
+    {
+        $lifeTime = $this->getLifeTime($lifeTime);
+
+        return (bool) apc_store($id, array($data, time()), $lifeTime);
+    }
+    /**
+     * Remove a cache record
+     * 
+     * @param string $id cache id
+     * @return boolean true if no problem
+     */
+    public function delete($id) 
+    {
+        return apc_delete($id);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Array.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Array.php
new file mode 100644
index 0000000000000000000000000000000000000000..38b872555291c153f5ed54eb2a222c5067a597b6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Array.php
@@ -0,0 +1,109 @@
+<?php
+/*
+ *  $Id: Array.php 1495 2007-05-27 18:56:04Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Cache_Interface
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1495 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Cache_Array implements Countable, Doctrine_Cache_Interface
+{
+    /**
+     * @var array $data         an array of cached data
+     */
+    protected $data;
+
+    /**
+     * Test if a cache is available for the given id and (if yes) return it (false else)
+     * 
+     * Note : return value is always "string" (unserialization is done by the core not by the backend)
+     * 
+     * @param string $id cache id
+     * @param boolean $testCacheValidity        if set to false, the cache validity won't be tested
+     * @return string cached datas (or false)
+     */
+    public function fetch($id, $testCacheValidity = true) 
+    {
+        if (isset($this->data[$id])) {
+            return $this->data[$id];
+        }
+        return null;
+    }
+    /**
+     * Test if a cache is available or not (for the given id)
+     *
+     * @param string $id cache id
+     * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record
+     */
+    public function contains($id)
+    {
+        return isset($this->data[$id]);
+    }
+    /**
+     * Save some string datas into a cache record
+     *
+     * Note : $data is always saved as a string
+     *
+     * @param string $data      data to cache
+     * @param string $id        cache id
+     * @param int $lifeTime     if != false, set a specific lifetime for this cache record (null => infinite lifeTime)
+     * @return boolean true if no problem
+     */
+    public function save($id, $data, $lifeTime = false)
+    {
+        $this->data[$id] = $data;
+    }
+    /**
+     * Remove a cache record
+     * 
+     * @param string $id cache id
+     * @return boolean true if no problem
+     */
+    public function delete($id)
+    {
+        unset($this->data[$id]);
+    }
+    /**
+     * Remove all cache record
+     * 
+     * @return boolean true if no problem
+     */
+    public function deleteAll()
+    {
+        $this->data = array();
+    }
+    /**
+     * count
+     *
+     * @return integer
+     */
+    public function count() 
+    {
+        return count($this->data);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Db.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Db.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f5cac53b7c812ad39f029ac5dbc354e620a3869
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Db.php
@@ -0,0 +1,196 @@
+<?php
+/*
+ *  $Id: Db.php 2258 2007-08-17 10:49:51Z jepso $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Cache_Db
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2258 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Cache_Db extends Doctrine_Cache_Driver implements Countable
+{
+    /**
+     * constructor
+     *
+     * @param array $_options      an array of options
+     */
+    public function __construct($options) 
+    {
+    	if ( ! isset($options['connection']) || 
+             ! ($options['connection'] instanceof Doctrine_Connection)) {
+
+    	    throw new Doctrine_Cache_Exception('Connection option not set.');
+    	}
+    	
+    	if ( ! isset($options['tableName']) ||
+    	     ! is_string($options['tableName'])) {
+    	     
+    	     throw new Doctrine_Cache_Exception('Table name option not set.');
+    	}
+    	
+
+        $this->_options = $options;
+    }
+    /**
+     * getConnection
+     * returns the connection object associated with this cache driver
+     *
+     * @return Doctrine_Connection      connection object
+     */
+    public function getConnection() 
+    {
+        return $this->_options['connection'];
+    }
+    /**
+     * Test if a cache is available for the given id and (if yes) return it (false else)
+     *
+     * Note : return value is always "string" (unserialization is done by the core not by the backend)
+     *
+     * @param string $id cache id
+     * @param boolean $testCacheValidity        if set to false, the cache validity won't be tested
+     * @return string cached datas (or false)
+     */
+    public function fetch($id, $testCacheValidity = true)
+    {
+        $sql = 'SELECT data, expire FROM ' . $this->_options['tableName']
+             . ' WHERE id = ?';
+
+        if ($testCacheValidity) {
+            $sql .= ' AND (expire=0 OR expire > ' . time() . ')';
+        }
+
+        $result = $this->getConnection()->fetchAssoc($sql, array($id));
+        
+        if ( ! isset($result[0])) {
+            return false;
+        }
+        
+        return unserialize($result[0]['data']);
+    }
+    /**
+     * Test if a cache is available or not (for the given id)
+     *
+     * @param string $id cache id
+     * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record
+     */
+    public function contains($id) 
+    {
+        $sql = 'SELECT expire FROM ' . $this->_options['tableName']
+             . ' WHERE id = ? AND (expire=0 OR expire > ' . time() . ')';
+
+        return $this->getConnection()->fetchOne($sql, array($id));
+    }
+    /**
+     * Save some string datas into a cache record
+     *
+     * Note : $data is always saved as a string
+     *
+     * @param string $data      data to cache
+     * @param string $id        cache id
+     * @param int $lifeTime     if != false, set a specific lifetime for this cache record (null => infinite lifeTime)
+     * @return boolean true if no problem
+     */
+    public function save($data, $id, $lifeTime = false)
+    {
+        $sql = 'INSERT INTO ' . $this->_options['tableName']
+             . ' (id, data, expire) VALUES (?, ?, ?)';
+        
+        if ($lifeTime) {
+            $expire = time() + $lifeTime;
+        } else {
+            $expire = 0;
+        }
+        
+        $params = array($id, serialize($data), $expire);
+
+        return (bool) $this->getConnection()->exec($sql, $params);
+    }
+    /**
+     * Remove a cache record
+     * 
+     * @param string $id cache id
+     * @return boolean true if no problem
+     */
+    public function delete($id) 
+    {
+        $sql = 'DELETE FROM ' . $this->_options['tableName'] . ' WHERE id = ?';
+
+        return (bool) $this->getConnection()->exec($sql, array($id));
+    }
+    
+    /**
+     * Removes all cache records
+     *
+     * $return bool true on success, false on failure
+     */
+    public function deleteAll()
+    {
+        $sql = 'DELETE FROM ' . $this->_options['tableName'];
+        
+        return (bool) $this->getConnection()->exec($sql);
+    }
+    
+    /**
+     * count
+     * returns the number of cached elements
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        $sql = 'SELECT COUNT(*) FROM ' . $this->_options['tableName'];
+        
+        return (int) $this->getConnection()->fetchOne($sql);
+    }
+    
+    /**
+     * Creates the cache table.
+     */
+    public function createTable()
+    {
+        $name = $this->_options['tableName'];
+        
+        $fields = array(
+            'id' => array(
+                'type'   => 'string',
+                'length' => 255
+            ),
+            'data' => array(
+                'type'    => 'blob'
+            ),
+            'expire' => array(
+                'type'    => 'timestamp'
+            )
+        );
+        
+        $options = array(
+            'primary' => array('id')
+        );
+        
+        $this->getConnection()->export->createTable($name, $fields, $options);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Driver.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Driver.php
new file mode 100644
index 0000000000000000000000000000000000000000..93cd544c8408f646729d61a05a84a9b31fddab73
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Driver.php
@@ -0,0 +1,79 @@
+<?php
+/*
+ *  $Id: Driver.php 1401 2007-05-20 17:54:22Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Cache_Driver
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1401 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Cache_Driver implements Doctrine_Cache_Interface
+{
+    /**
+     * @var array $_options      an array of options
+     */
+    protected $_options = array();
+    
+    /**
+     * constructor
+     *
+     * @param array $_options      an array of options
+     */
+    public function __construct($options) 
+    {
+        $this->_options = $options;
+    }
+    /**
+     * setOption
+     *
+     * @param mixed $option     the option name
+     * @param mixed $value      option value
+     * @return boolean          TRUE on success, FALSE on failure
+     */
+    public function setOption($option, $value)
+    {
+    	if (isset($this->_options[$option])) {
+            $this->_options[$option] = $value;
+            return true;
+        }
+        return false;
+    }
+    /**
+     * getOption
+     * 
+     * @param mixed $option     the option name
+     * @return mixed            option value
+     */
+    public function getOption($option)
+    {
+        if ( ! isset($this->_options[$option])) {
+            return null;
+        }
+
+        return $this->_options[$option];
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..981f313a46ed66c6f21ddb19e8ae3995c2feb391
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Exception.php
@@ -0,0 +1,35 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Cache_Exception
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Cache_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8c5f66ef184a78362065882392cbcc429ef4863
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Interface.php
@@ -0,0 +1,74 @@
+<?php
+/*
+ *  $Id: Interface.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Cache_Interface
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+interface Doctrine_Cache_Interface 
+{
+    /**
+     * Test if a cache is available for the given id and (if yes) return it (false else)
+     * 
+     * Note : return value is always "string" (unserialization is done by the core not by the backend)
+     * 
+     * @param string $id cache id
+     * @param boolean $testCacheValidity        if set to false, the cache validity won't be tested
+     * @return string cached datas (or false)
+     */
+    public function fetch($id, $testCacheValidity = true);
+
+    /**
+     * Test if a cache is available or not (for the given id)
+     *
+     * @param string $id cache id
+     * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record
+     */
+    public function contains($id);
+
+    /**
+     * Save some string datas into a cache record
+     *
+     * Note : $data is always saved as a string
+     *
+     * @param string $data      data to cache
+     * @param string $id        cache id
+     * @param int $lifeTime     if != false, set a specific lifetime for this cache record (null => infinite lifeTime)
+     * @return boolean true if no problem
+     */
+    public function save($data, $id, $lifeTime = false);
+
+    /**
+     * Remove a cache record
+     * 
+     * @param string $id cache id
+     * @return boolean true if no problem
+     */
+    public function delete($id);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Memcache.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Memcache.php
new file mode 100644
index 0000000000000000000000000000000000000000..0af6922c65469487ee594605d2a0fff6279bc2f0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Cache/Memcache.php
@@ -0,0 +1,132 @@
+<?php
+/*
+ *  $Id: Memcache.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Cache_Driver');
+/**
+ * Doctrine_Cache_Memcache
+ *
+ * @package     Doctrine
+ * @subpackage  Doctrine_Cache
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Cache_Memcache extends Doctrine_Cache_Driver
+{
+    /**
+     * @var Memcache $_memcache     memcache object
+     */
+    protected $_memcache = null;
+    /**
+     * constructor
+     * 
+     * @param array $options        associative array of cache driver options
+     */
+    public function __construct($options = array())
+    {      
+        if ( ! extension_loaded('memcache')) {
+            throw new Doctrine_Cache_Exception('In order to use Memcache driver, the memcache extension must be loaded.');
+        }
+        parent::__construct($options);
+
+        if (isset($options['servers'])) {
+            $value= $options['servers'];
+            if (isset($value['host'])) {
+                // in this case, $value seems to be a simple associative array (one server only)
+                $value = array(0 => $value); // let's transform it into a classical array of associative arrays
+            }
+            $this->setOption('servers', $value);
+        }
+        
+        $this->_memcache = new Memcache;
+
+        foreach ($this->_options['servers'] as $server) {
+            if ( ! array_key_exists('persistent', $server)) {
+                $server['persistent'] = true;
+            }
+            if ( ! array_key_exists('port', $server)) {
+                $server['port'] = 11211;
+            }
+            $this->_memcache->addServer($server['host'], $server['port'], $server['persistent']);
+        }
+    }
+    /**
+     * Test if a cache is available for the given id and (if yes) return it (false else)
+     *
+     * Note : return value is always "string" (unserialization is done by the core not by the backend)
+     * 
+     * @param string $id cache id
+     * @param boolean $testCacheValidity        if set to false, the cache validity won't be tested
+     * @return string cached datas (or false)
+     */
+    public function fetch($id, $testCacheValidity = true) 
+    {
+        $tmp = $this->_memcache->get($id);
+
+        if (is_array($tmp)) {
+            return $tmp[0];
+        }
+
+        return false;
+    }
+    /**
+     * Test if a cache is available or not (for the given id)
+     *
+     * @param string $id cache id
+     * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record
+     */
+    public function contains($id) 
+    {
+        return (bool) $this->_memcache->get($id);
+    }
+    /**
+     * Save some string datas into a cache record
+     *
+     * Note : $data is always saved as a string
+     *
+     * @param string $data      data to cache
+     * @param string $id        cache id
+     * @param int $lifeTime     if != false, set a specific lifetime for this cache record (null => infinite lifeTime)
+     * @return boolean true if no problem
+     */
+    public function save($id, $data, $lifeTime = false)
+    {
+        if ($this->_options['compression']) {
+            $flag = MEMCACHE_COMPRESSED;
+        } else {
+            $flag = 0;
+        }
+
+        $result = $this->_memcache->set($id, $data, $flag, $lifeTime);
+    }
+    /**
+     * Remove a cache record
+     * 
+     * @param string $id cache id
+     * @return boolean true if no problem
+     */
+    public function delete($id) 
+    {
+        return $this->_memcache->delete($id);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection.php
new file mode 100644
index 0000000000000000000000000000000000000000..ceb91abfbc68470ed518c2176e0248af075416d0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection.php
@@ -0,0 +1,680 @@
+<?php
+/*
+ *  $Id: Collection.php 2282 2007-08-28 16:45:22Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Access');
+/**
+ * Doctrine_Collection
+ * Collection of Doctrine_Record objects.
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2282 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection extends Doctrine_Access implements Countable, IteratorAggregate, Serializable
+{
+    /**
+     * @var array $data                     an array containing the records of this collection
+     */
+    protected $data = array();
+    /**
+     * @var Doctrine_Table $table           each collection has only records of specified table
+     */
+    protected $_table;
+    /**
+     * @var array $_snapshot                a snapshot of the fetched data
+     */
+    protected $_snapshot = array();
+    /**
+     * @var Doctrine_Record $reference      collection can belong to a record
+     */
+    protected $reference;
+    /**
+     * @var string $referenceField         the reference field of the collection
+     */
+    protected $referenceField;
+    /**
+     * @var Doctrine_Relation               the record this collection is related to, if any
+     */
+    protected $relation;
+    /**
+     * @var string $keyColumn               the name of the column that is used for collection key mapping
+     */
+    protected $keyColumn;
+    /**
+     * @var Doctrine_Null $null             used for extremely fast null value testing
+     */
+    protected static $null;
+
+
+    /**
+     * constructor
+     *
+     * @param Doctrine_Table|string $table
+     */
+    public function __construct($table)
+    {
+        if ( ! ($table instanceof Doctrine_Table)) {
+            $table = Doctrine_Manager::getInstance()
+                        ->getTable($table);
+        }
+        $this->_table = $table;
+
+        $name = $table->getAttribute(Doctrine::ATTR_COLL_KEY);
+        if ($name !== null) {
+            $this->keyColumn = $name;
+        }
+    }
+    /**
+     * initNullObject
+     * initializes the null object for this collection
+     *
+     * @return void
+     */
+    public static function initNullObject(Doctrine_Null $null)
+    {
+        self::$null = $null;
+    }
+    /**
+     * getTable
+     * returns the table this collection belongs to
+     *
+     * @return Doctrine_Table
+     */
+    public function getTable()
+    {
+        return $this->_table;
+    }
+    /**
+     * setData
+     *
+     * @param array $data
+     * @return Doctrine_Collection
+     */
+    public function setData(array $data) 
+    {
+    	$this->data = $data;
+    }
+    /**
+     * this method is automatically called when this Doctrine_Collection is serialized
+     *
+     * @return array
+     */
+    public function serialize()
+    {
+        $vars = get_object_vars($this);
+
+        unset($vars['reference']);
+        unset($vars['reference_field']);
+        unset($vars['relation']);
+        unset($vars['expandable']);
+        unset($vars['expanded']);
+        unset($vars['generator']);
+
+        $vars['_table'] = $vars['_table']->getComponentName();
+
+        return serialize($vars);
+    }
+    /**
+     * unseralize
+     * this method is automatically called everytime a Doctrine_Collection object is unserialized
+     *
+     * @return void
+     */
+    public function unserialize($serialized)
+    {
+        $manager    = Doctrine_Manager::getInstance();
+        $connection    = $manager->getCurrentConnection();
+
+        $array = unserialize($serialized);
+
+        foreach ($array as $name => $values) {
+            $this->$name = $values;
+        }
+
+        $this->_table        = $connection->getTable($this->_table);
+
+
+        $name = $this->_table->getAttribute(Doctrine::ATTR_COLL_KEY);
+        if ($name !== null) {
+            $this->keyColumn = $name;
+        }
+    }
+    /**
+     * setKeyColumn
+     * sets the key column for this collection
+     *
+     * @param string $column
+     * @return Doctrine_Collection
+     */
+    public function setKeyColumn($column)
+    {
+        $this->keyColumn = $column;
+        
+        return $this;
+    }
+    /**
+     * getKeyColumn
+     * returns the name of the key column
+     *
+     * @return string
+     */
+    public function getKeyColumn()
+    {
+        return $this->column;
+    }
+    /**
+     * getData
+     * returns all the records as an array
+     *
+     * @return array
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+    /**
+     * getFirst
+     * returns the first record in the collection
+     *
+     * @return mixed
+     */
+    public function getFirst()
+    {
+        return reset($this->data);
+    }
+    /**
+     * getLast
+     * returns the last record in the collection
+     *
+     * @return mixed
+     */
+    public function getLast()
+    {
+        return end($this->data);
+    }
+    /**
+     * setReference
+     * sets a reference pointer
+     *
+     * @return void
+     */
+    public function setReference(Doctrine_Record $record, Doctrine_Relation $relation)
+    {
+        $this->reference       = $record;
+        $this->relation        = $relation;
+
+        if ($relation instanceof Doctrine_Relation_ForeignKey
+           || $relation instanceof Doctrine_Relation_LocalKey
+        ) {
+
+            $this->referenceField = $relation->getForeign();
+
+            $value = $record->get($relation->getLocal());
+
+            foreach ($this->data as $record) {
+                if ($value !== null) {
+                    $record->set($this->referenceField, $value, false);
+                } else {
+                    $record->set($this->referenceField, $this->reference, false);
+                }
+            }
+        } elseif ($relation instanceof Doctrine_Relation_Association) {
+
+        }
+    }
+    /**
+     * getReference
+     *
+     * @return mixed
+     */
+    public function getReference()
+    {
+        return $this->reference;
+    }
+    /**
+     * remove
+     * removes a specified collection element
+     *
+     * @param mixed $key
+     * @return boolean
+     */
+    public function remove($key)
+    {
+        $removed = $this->data[$key];
+
+        unset($this->data[$key]);
+        return $removed;
+    }
+    /**
+     * contains
+     * whether or not this collection contains a specified element
+     *
+     * @param mixed $key                    the key of the element
+     * @return boolean
+     */
+    public function contains($key)
+    {
+        return isset($this->data[$key]);
+    }
+    public function search(Doctrine_Record $record)
+    {
+        return array_search($record, $this->data, true);
+    }
+    /**
+     * get
+     * returns a record for given key
+     *
+     * There are two special cases:
+     *
+     * 1. if null is given as a key a new record is created and attached
+     * at the end of the collection
+     *
+     * 2. if given key does not exist, then a new record is create and attached
+     * to the given key
+     *
+     * Collection also maps referential information to newly created records
+     *
+     * @param mixed $key                    the key of the element
+     * @return Doctrine_Record              return a specified record
+     */
+    public function get($key)
+    {
+    	if ($key === null || ! isset($this->data[$key])) {
+    	    $record = $this->_table->create();
+
+            if (isset($this->referenceField)) {
+                $value = $this->reference->get($this->relation->getLocal());
+
+                if ($value !== null) {
+                    $record->set($this->referenceField, $value, false);
+                } else {
+                    $record->set($this->referenceField, $this->reference, false);
+                }
+            }
+
+            $this->data[] = $record;
+
+            return $record;
+    	}
+
+        return $this->data[$key];
+    }
+
+    /**
+     * @return array                an array containing all primary keys
+     */
+    public function getPrimaryKeys()
+    {
+        $list = array();
+        $name = $this->_table->getIdentifier();
+
+        foreach ($this->data as $record) {
+            if (is_array($record) && isset($record[$name])) {
+                $list[] = $record[$name];
+            } else {
+                $list[] = $record->getIncremented();
+            }
+        }
+        return $list;
+    }
+    /**
+     * returns all keys
+     * @return array
+     */
+    public function getKeys()
+    {
+        return array_keys($this->data);
+    }
+    /**
+     * count
+     * this class implements interface countable
+     * returns the number of records in this collection
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        return count($this->data);
+    }
+    /**
+     * set
+     * @param integer $key
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function set($key, Doctrine_Record $record)
+    {
+        if (isset($this->referenceField)) {
+            $record->set($this->referenceField, $this->reference, false);
+        }
+
+        $this->data[$key] = $record;
+    }
+    /**
+     * adds a record to collection
+     * @param Doctrine_Record $record              record to be added
+     * @param string $key                          optional key for the record
+     * @return boolean
+     */
+    public function add(Doctrine_Record $record, $key = null)
+    {
+        if (isset($this->referenceField)) {
+            $value = $this->reference->get($this->relation->getLocal());
+
+            if ($value !== null) {
+                $record->set($this->referenceField, $value, false);
+            } else {
+                $record->set($this->referenceField, $this->reference, false);
+            }
+        }
+        /**
+         * for some weird reason in_array cannot be used here (php bug ?)
+         *
+         * if used it results in fatal error : [ nesting level too deep ]
+         */
+        foreach ($this->data as $val) {
+            if ($val === $record) {
+                return false;
+            }
+        }
+
+        if (isset($key)) {
+            if (isset($this->data[$key])) {
+                return false;
+            }
+            $this->data[$key] = $record;
+            return true;
+        }
+
+        if (isset($this->keyColumn)) {
+            $value = $record->get($this->keyColumn);
+            if ($value === null) {
+                throw new Doctrine_Collection_Exception("Couldn't create collection index. Record field '".$this->keyColumn."' was null.");
+            }
+            $this->data[$value] = $record;
+        } else {
+            $this->data[] = $record;
+        }
+        return true;
+    }
+    /**
+     * loadRelated
+     *
+     * @param mixed $name
+     * @return boolean
+     */
+    public function loadRelated($name = null)
+    {
+        $list = array();
+        $query   = new Doctrine_Query($this->_table->getConnection());
+
+        if ( ! isset($name)) {
+            foreach ($this->data as $record) {
+                $value = $record->getIncremented();
+                if ($value !== null) {
+                    $list[] = $value;
+                }
+            }
+            $query->from($this->_table->getComponentName() . '(' . implode(", ",$this->_table->getPrimaryKeys()) . ')');
+            $query->where($this->_table->getComponentName() . '.id IN (' . substr(str_repeat("?, ", count($list)),0,-2) . ')');
+
+            return $query;
+        }
+
+        $rel     = $this->_table->getRelation($name);
+
+        if ($rel instanceof Doctrine_Relation_LocalKey || $rel instanceof Doctrine_Relation_ForeignKey) {
+            foreach ($this->data as $record) {
+                $list[] = $record[$rel->getLocal()];
+            }
+        } else {
+            foreach ($this->data as $record) {
+                $value = $record->getIncremented();
+                if ($value !== null) {
+                    $list[] = $value;
+                }
+            }
+        }
+
+        $dql     = $rel->getRelationDql(count($list), 'collection');
+
+        $coll    = $query->query($dql, $list);
+
+        $this->populateRelated($name, $coll);
+    }
+    /**
+     * populateRelated
+     *
+     * @param string $name
+     * @param Doctrine_Collection $coll
+     * @return void
+     */
+    public function populateRelated($name, Doctrine_Collection $coll)
+    {
+        $rel     = $this->_table->getRelation($name);
+        $table   = $rel->getTable();
+        $foreign = $rel->getForeign();
+        $local   = $rel->getLocal();
+
+        if ($rel instanceof Doctrine_Relation_LocalKey) {
+            foreach ($this->data as $key => $record) {
+                foreach ($coll as $k => $related) {
+                    if ($related[$foreign] == $record[$local]) {
+                        $this->data[$key]->setRelated($name, $related);
+                    }
+                }
+            }
+        } elseif ($rel instanceof Doctrine_Relation_ForeignKey) {
+            foreach ($this->data as $key => $record) {
+                if ( ! $record->exists()) {
+                    continue;
+                }
+                $sub = new Doctrine_Collection($table);
+
+                foreach ($coll as $k => $related) {
+                    if ($related[$foreign] == $record[$local]) {
+                        $sub->add($related);
+                        $coll->remove($k);
+                    }
+                }
+
+                $this->data[$key]->setRelated($name, $sub);
+            }
+        } elseif ($rel instanceof Doctrine_Relation_Association) {
+            $identifier = $this->_table->getIdentifier();
+            $asf        = $rel->getAssociationFactory();
+            $name       = $table->getComponentName();
+
+            foreach ($this->data as $key => $record) {
+                if ( ! $record->exists()) {
+                    continue;
+                }
+                $sub = new Doctrine_Collection($table);
+                foreach ($coll as $k => $related) {
+                    if ($related->get($local) == $record[$identifier]) {
+                        $sub->add($related->get($name));
+                    }
+                }
+                $this->data[$key]->setRelated($name, $sub);
+
+            }
+        }
+    }
+    /**
+     * getNormalIterator
+     * returns normal iterator - an iterator that will not expand this collection
+     *
+     * @return Doctrine_Iterator_Normal
+     */
+    public function getNormalIterator()
+    {
+        return new Doctrine_Collection_Iterator_Normal($this);
+    }
+    /**
+     * takeSnapshot
+     * takes a snapshot from this collection
+     *
+     * snapshots are used for diff processing, for example
+     * when a fetched collection has three elements, then two of those
+     * are being removed the diff would contain one element
+     *
+     * Doctrine_Collection::save() attaches the diff with the help of last
+     * snapshot.
+     *
+     * @return Doctrine_Collection
+     */
+    public function takeSnapshot()
+    {
+        $this->_snapshot = $this->data;
+        
+        return $this;
+    }
+    /**
+     * getSnapshot
+     * returns the data of the last snapshot
+     *
+     * @return array    returns the data in last snapshot
+     */
+    public function getSnapshot()
+    {
+        return $this->_snapshot;
+    }
+    /**
+     * processDiff
+     * processes the difference of the last snapshot and the current data
+     *
+     * an example:
+     * Snapshot with the objects 1, 2 and 4
+     * Current data with objects 2, 3 and 5
+     *
+     * The process would remove object 4
+     *
+     * @return Doctrine_Collection
+     */
+    public function processDiff() 
+    {
+        foreach (array_diff($this->_snapshot, $this->data) as $record) {
+            $record->delete();
+        }
+
+        return $this;
+    }
+    /**
+     * toArray
+     * Mimics the result of a $query->execute(array(), Doctrine::FETCH_ARRAY);
+     *
+     * @param boolean $deep
+     */
+    public function toArray($deep = false)
+    {
+        if ($deep) {
+            $data = array();
+            foreach ($this->data as $key => $record) {
+                $data[$key] = $record->toArray($deep);
+            }
+            return $data;
+        } else {
+            // this is preserved for backwards compatibility
+            // but could be replaced with above code
+            return $this->data;
+        }
+    }
+    public function getDeleteDiff()
+    {
+        return array_diff($this->_snapshot, $this->data);
+    }
+    public function getInsertDiff()
+    {
+        return array_diff($this->data, $this->_snapshot);
+    }
+    /**
+     * save
+     * saves all records of this collection and processes the 
+     * difference of the last snapshot and the current data
+     *
+     * @param Doctrine_Connection $conn     optional connection parameter
+     * @return Doctrine_Collection
+     */
+    public function save(Doctrine_Connection $conn = null)
+    {
+        if ($conn == null) {
+            $conn = $this->_table->getConnection();
+        }
+        $conn->beginTransaction();
+        $conn->transaction->addCollection($this);
+
+        $this->processDiff();
+
+        foreach ($this->getData() as $key => $record) {
+            $record->save($conn);
+        }
+
+        $conn->commit();
+        
+        return $this;
+    }
+    /**
+     * delete
+     * single shot delete
+     * deletes all records from this collection
+     * and uses only one database query to perform this operation
+     *
+     * @return Doctrine_Collection
+     */
+    public function delete(Doctrine_Connection $conn = null)
+    {
+        if ($conn == null) {
+            $conn = $this->_table->getConnection();
+        }
+
+        $conn->beginTransaction();
+        $conn->transaction->addCollection($this);
+
+        foreach ($this as $key => $record) {
+            $record->delete($conn);
+        }
+
+        $conn->commit();
+
+        $this->data = array();
+        
+        return $this;
+    }
+    /**
+     * getIterator
+     * @return object ArrayIterator
+     */
+    public function getIterator()
+    {
+        $data = $this->data;
+        return new ArrayIterator($data);
+    }
+    /**
+     * returns a string representation of this object
+     */
+    public function __toString()
+    {
+        return Doctrine_Lib::getCollectionAsString($this);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..4164e9d5986f6f4e756ddff83312b75a00ac86c5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Exception.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Collection_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ecf7358cc0ca8b8d0260bac646bf2e4cabe92ea
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator.php
@@ -0,0 +1,111 @@
+<?php
+/*
+ *  $Id: Iterator.php 1323 2007-05-10 23:46:09Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Collection_Iterator
+ * iterates through Doctrine_Collection
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1323 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Collection_Iterator implements Iterator
+{
+    /**
+     * @var Doctrine_Collection $collection
+     */
+    protected $collection;
+    /**
+     * @var array $keys
+     */
+    protected $keys;
+    /**
+     * @var mixed $key
+     */
+    protected $key;
+    /**
+     * @var integer $index
+     */
+    protected $index;
+    /**
+     * @var integer $count
+     */
+    protected $count;
+
+    /**
+     * constructor
+     * @var Doctrine_Collection $collection
+     */
+    public function __construct($collection)
+    {
+        $this->collection = $collection;
+        $this->keys       = $this->collection->getKeys();
+        $this->count      = $this->collection->count();
+    }
+    /**
+     * rewinds the iterator
+     *
+     * @return void
+     */
+    public function rewind()
+    {
+        $this->index = 0;
+        $i = $this->index;
+        if (isset($this->keys[$i])) {
+            $this->key   = $this->keys[$i];
+        }
+    }
+
+    /**
+     * returns the current key
+     *
+     * @return integer
+     */
+    public function key()
+    {
+        return $this->key;
+    }
+    /**
+     * returns the current record
+     *
+     * @return Doctrine_Record
+     */
+    public function current()
+    {
+        return $this->collection->get($this->key);
+    }
+    /**
+     * advances the internal pointer
+     *
+     * @return void
+     */
+    public function next()
+    {
+        $this->index++;
+        $i = $this->index;
+        if (isset($this->keys[$i])) {
+            $this->key   = $this->keys[$i];
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Expandable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Expandable.php
new file mode 100644
index 0000000000000000000000000000000000000000..5827d5d2f5db72c159457d9b8b722276a6bbad3c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Expandable.php
@@ -0,0 +1,54 @@
+<?php
+/*
+ *  $Id: Expandable.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Collection_Iterator');
+/**
+ * Doctrine_Collection_Iterator_Normal
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection_Iterator_Expandable extends Doctrine_Collection_Iterator
+{
+    public function valid()
+    {
+        if ($this->index < $this->count) {
+            return true;
+        } elseif ($this->index == $this->count) {
+            $coll  = $this->collection->expand($this->index);
+
+            if ($coll instanceof Doctrine_Collection) {
+                $count = count($coll);
+                if ($count > 0) {
+                    $this->keys   = array_merge($this->keys, $coll->getKeys());
+                    $this->count += $count;
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Normal.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Normal.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ba5b0a27b679992cb27cd50d1d4edd131207c04
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Normal.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ *  $Id: Normal.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Collection_Iterator');
+/**
+ * Doctrine_Collection_Iterator_Normal
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection_Iterator_Normal extends Doctrine_Collection_Iterator
+{
+    /**
+     * @return boolean                          whether or not the iteration will continue
+     */
+    public function valid()
+    {
+        return ($this->index < $this->count);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Offset.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Offset.php
new file mode 100644
index 0000000000000000000000000000000000000000..150d6b8e6cf5474662c22245ef8054aa04206e30
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Iterator/Offset.php
@@ -0,0 +1,37 @@
+<?php
+/*
+ *  $Id: Offset.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Collection_Iterator');
+/**
+ * Doctrine_Collection_Iterator_Normal
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection_Iterator_Offset extends Doctrine_Collection_Iterator
+{
+    public function valid()
+    { }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Offset.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Offset.php
new file mode 100644
index 0000000000000000000000000000000000000000..b49ab3983097b7ee92d727d971b5e847fc9bdfcc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Collection/Offset.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ *  $Id: Offset.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Collection_Offset');
+/**
+ * Doctrine_Collection_Offset
+ * Collection of Doctrine_Record objects.
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Collection_Offset extends Doctrine_Collection
+{
+    /**
+     * @var integer $limit
+     */
+    private $limit;
+    /**
+     * @param Doctrine_Table $table
+     */
+    public function __construct(Doctrine_Table $table)
+    {
+        parent::__construct($table);
+        $this->limit = $table->getAttribute(Doctrine::ATTR_COLL_LIMIT);
+    }
+    /**
+     * @return integer
+     */
+    public function getLimit()
+    {
+        return $this->limit;
+    }
+    /**
+     * @return Doctrine_Collection_Iterator_Expandable
+     */
+    public function getIterator()
+    {
+        return new Doctrine_Collection_Iterator_Expandable($this);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Column.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Column.php
new file mode 100644
index 0000000000000000000000000000000000000000..381d795e31ae4702dfcf8d20c613073e58525c7c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Column.php
@@ -0,0 +1,148 @@
+<?php
+/*
+ *  $Id: Column.php 1392 2007-05-19 17:29:43Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Column
+ * This class represents a database column
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1392 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Column extends Doctrine_Access implements IteratorAggregate, Countable
+{
+    /**
+     * @var array $definition
+     */
+    protected $_definition = array(
+                                'type'    => null,
+                                'length'  => 0,
+                                );
+    /**
+     * @var array $definition
+     */
+    public function __construct(array $definition = array())
+    {
+        $this->_definition = $definition;
+    }
+    /**
+     * @return array
+     */
+    public function getDefinition()
+    {
+        return $this->_definition;
+    }
+    /**
+     * contains
+     *
+     * @return boolean
+     */
+    public function contains($name) 
+    {
+        return isset($this->_definition[$name]);
+    }
+    /**
+     * get
+     *
+     * @param string $name
+     * @return mixed
+     */
+    public function get($name)
+    {
+        if ( ! isset($this->_definition[$name])) {
+            return null;
+        }
+        
+        return $this->_definition[$name];
+    }
+    /**
+     * set
+     *
+     * @param string $name
+     * @return mixed
+     */
+    public function set($name, $value)
+    {
+        $this->_definition[$name] = $value;
+    }
+    /**
+     * @param string $field
+     * @return array
+     */
+    public function getEnumValues()
+    {
+        if (isset($this->_definition['values'])) {
+            return $this->_definition['values'];
+        } else {
+            return array();
+        }
+    }
+    /**
+     * enumValue
+     *
+     * @param string $field
+     * @param integer $index
+     * @return mixed
+     */
+    public function enumValue($index)
+    {
+        if ($index instanceof Doctrine_Null) {
+            return $index;
+        }
+
+        return isset($this->_definition['values'][$index]) ? $this->_definition['values'][$index] : $index;
+    }
+    /**
+     * enumIndex
+     *
+     * @param string $field
+     * @param mixed $value
+     * @return mixed
+     */
+    public function enumIndex($field, $value)
+    {
+        $values = $this->getEnumValues($field);
+
+        return array_search($value, $values);
+    }
+    /**
+     * count
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        return count($this->_definition);
+    }
+    /**
+     * getIterator
+     *
+     * @return ArrayIterator
+     */
+    public function getIterator() 
+    {
+        return new ArrayIterator($this->_definition);
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler.php
new file mode 100644
index 0000000000000000000000000000000000000000..edfdbbc15ad03a5e828279db747300f93a421b40
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Compiler.php 1768 2007-06-19 22:55:34Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Compiler
+ * This class can be used for compiling the entire Doctrine framework into a single file
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1768 $
+ */
+class Doctrine_Compiler
+{
+    /**
+     * method for making a single file of most used doctrine runtime components
+     * including the compiled file instead of multiple files (in worst
+     * cases dozens of files) can improve performance by an order of magnitude
+     *
+     * @throws Doctrine_Compiler_Exception      if something went wrong during the compile operation
+     * @return void
+     */
+    public static function compile($target = null)
+    {
+        $path = Doctrine::getPath();
+        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY);
+
+        foreach ($it as $file) {
+            $e = explode('.', $file->getFileName());
+            
+            // we don't want to require versioning files
+            if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) {
+                require_once $file->getPathName();
+            }
+        }
+
+        $classes = array_merge(get_declared_classes(), get_declared_interfaces());
+
+        $ret     = array();
+
+        foreach ($classes as $class) {
+            $e = explode('_', $class);
+
+            if ($e[0] !== 'Doctrine') {
+                continue;
+            }
+            $refl  = new ReflectionClass($class);
+            $file  = $refl->getFileName();
+            
+            print 'Adding ' . $file . PHP_EOL;
+
+            $lines = file($file);
+
+            $start = $refl->getStartLine() - 1;
+            $end   = $refl->getEndLine();
+
+            $ret = array_merge($ret, array_slice($lines, $start, ($end - $start)));
+        }
+
+        if ($target == null) {
+            $target = $path . DIRECTORY_SEPARATOR . 'Doctrine.compiled.php';
+        }
+
+        // first write the 'compiled' data to a text file, so
+        // that we can use php_strip_whitespace (which only works on files)
+        $fp = @fopen($target, 'w');
+
+        if ($fp === false) {
+            throw new Doctrine_Compiler_Exception("Couldn't write compiled data. Failed to open $target");
+        }
+        fwrite($fp, "<?php ". implode('', $ret));
+        fclose($fp);
+
+        $stripped = php_strip_whitespace($target);
+        $fp = @fopen($target, 'w');
+        if ($fp === false) {
+            throw new Doctrine_Compiler_Exception("Couldn't write compiled data. Failed to open $file");
+        }
+        fwrite($fp, $stripped);
+        fclose($fp);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc09712a44f6c60c09733eb75cc90dbeddddfa6e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Compiler/Exception.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Compiler_Exception
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Compiler_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Configurable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Configurable.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb3c5753077944a097a65e8410e9fc149d2ca265
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Configurable.php
@@ -0,0 +1,363 @@
+<?php
+/*
+ *  $Id: Configurable.php 2153 2007-08-03 11:52:24Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Configurable
+ * the base for Doctrine_Table, Doctrine_Manager and Doctrine_Connection
+ *
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2153 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Configurable extends Doctrine_Object
+{
+    /**
+     * @var array $attributes               an array of containing all attributes
+     */
+    protected $attributes = array();
+    /**
+     * @var Doctrine_Configurable $parent   the parent of this component
+     */
+    protected $parent;
+    /**
+     * @var array $_impl                    an array containing concrete implementations for class templates
+     *                                      keys as template names and values as names of the concrete 
+     *                                      implementation classes
+     */
+    protected $_impl = array();
+    /**
+     * setAttribute
+     * sets a given attribute
+     *
+     * <code>
+     * $manager->setAttribute(Doctrine::ATTR_PORTABILITY, Doctrine::PORTABILITY_ALL);
+     *
+     * // or
+     *
+     * $manager->setAttribute('portability', Doctrine::PORTABILITY_ALL);
+     * </code>
+     *
+     * @param mixed $attribute              either a Doctrine::ATTR_* integer constant or a string
+     *                                      corresponding to a constant
+     * @param mixed $value                  the value of the attribute
+     * @see Doctrine::ATTR_* constants
+     * @throws Doctrine_Exception           if the value is invalid
+     * @return void
+     */
+    public function setAttribute($attribute,$value)
+    {
+        if (is_string($attribute)) {
+            $upper = strtoupper($attribute);
+            
+            $const = 'Doctrine::ATTR_' . $attribute;
+            if (defined($const)) {
+                $this->_state = constant($const);
+            } else {
+                throw new Doctrine_Exception('Unknown attribute ' . $attribute);
+            }
+        }
+        switch ($attribute) {
+            case Doctrine::ATTR_FETCHMODE:
+                if ($value < 0) {
+                   throw new Doctrine_Exception("Unknown fetchmode. See Doctrine::FETCH_* constants.");
+                }
+                break;
+            case Doctrine::ATTR_LISTENER:
+                $this->setEventListener($value);
+                break;
+            case Doctrine::ATTR_LOCKMODE:
+                break;
+            case Doctrine::ATTR_CREATE_TABLES:
+                    throw new Doctrine_Exception("ATTR_CREATE_TABLES has been deprecated. See exporting in the first chapter of the manual.");
+                break;
+            case Doctrine::ATTR_ACCESSORS:
+                    throw new Doctrine_Exception("Get / Set filtering is deprecated (slowed down Doctrine too much)."); 
+                break;
+            case Doctrine::ATTR_COLL_LIMIT:
+                if ($value < 1) {
+                    throw new Doctrine_Exception("Collection limit should be a value greater than or equal to 1.");
+                }
+                break;
+            case Doctrine::ATTR_COLL_KEY:
+                if ( ! ($this instanceof Doctrine_Table)) {
+                    throw new Doctrine_Exception("This attribute can only be set at table level.");
+                }
+                if ($value !== null && ! $this->hasColumn($value)) {
+                    throw new Doctrine_Exception("Couldn't set collection key attribute. No such column '$value'");
+                }
+                break;
+            case Doctrine::ATTR_CACHE:
+                if ($value !== null) {
+                    if ( ! ($value instanceof Doctrine_Cache_Interface)) {
+                        throw new Doctrine_Exception('Cache driver should implement Doctrine_Cache_Interface');
+                    }
+                }
+                break;
+            case Doctrine::ATTR_VLD:
+            case Doctrine::ATTR_AUTO_LENGTH_VLD:
+            case Doctrine::ATTR_AUTO_TYPE_VLD:
+            case Doctrine::ATTR_QUERY_LIMIT:
+            case Doctrine::ATTR_QUOTE_IDENTIFIER:
+            case Doctrine::ATTR_PORTABILITY:
+            case Doctrine::ATTR_DEFAULT_TABLE_TYPE:
+            case Doctrine::ATTR_ACCESSOR_PREFIX_GET:
+            case Doctrine::ATTR_ACCESSOR_PREFIX_SET:
+            case Doctrine::ATTR_EMULATE_DATABASE:
+            case Doctrine::ATTR_DEFAULT_SEQUENCE:
+            case Doctrine::ATTR_EXPORT:
+            case Doctrine::ATTR_DECIMAL_PLACES:
+            case Doctrine::ATTR_LOAD_REFERENCES:
+            case Doctrine::ATTR_RECORD_LISTENER:
+            case Doctrine::ATTR_THROW_EXCEPTIONS:
+
+                break;
+            case Doctrine::ATTR_SEQCOL_NAME:
+                if ( ! is_string($value)) {
+                    throw new Doctrine_Exception('Sequence column name attribute only accepts string values');
+                }
+                break;
+            case Doctrine::ATTR_FIELD_CASE:
+                if ($value != 0 && $value != CASE_LOWER && $value != CASE_UPPER)
+                    throw new Doctrine_Exception('Field case attribute should be either 0, CASE_LOWER or CASE_UPPER constant.');
+                break;
+            case Doctrine::ATTR_SEQNAME_FORMAT:
+            case Doctrine::ATTR_IDXNAME_FORMAT:
+                if ($this instanceof Doctrine_Table) {
+                    throw new Doctrine_Exception('Sequence / index name format attributes cannot be set'
+                                               . 'at table level (only at connection or global level).');
+                }
+                break;
+            default:
+                throw new Doctrine_Exception("Unknown attribute.");
+        }
+
+        $this->attributes[$attribute] = $value;
+
+    }
+    /**
+     * setImpl
+     * binds given class to given template name
+     *
+     * this method is the base of Doctrine dependency injection
+     *
+     * @param string $template      name of the class template
+     * @param string $class         name of the class to be bound
+     * @return Doctrine_Configurable    this object
+     */
+    public function setImpl($template, $class)
+    {
+        $this->_impl[$template] = $class;
+        
+        return $this;
+    }
+    /**
+     * getImpl
+     * returns the implementation for given class
+     *
+     * @return string   name of the concrete implementation
+     */
+    public function getImpl($template)
+    {
+        if ( ! isset($this->_impl[$template])) {
+            if (isset($this->parent)) {
+                return $this->parent->getImpl($template);
+            }
+            return null;
+        }
+        return $this->_impl[$template];
+    }
+    /**
+     * getCacheDriver
+     *
+     * @return Doctrine_Cache_Interface
+     */
+    public function getCacheDriver()
+    {
+        if ( ! isset($this->attributes[Doctrine::ATTR_CACHE])) {
+            throw new Doctrine_Exception('Cache driver not initialized.');
+        }
+        
+        return $this->attributes[Doctrine::ATTR_CACHE];
+    }
+    /**
+     * @param Doctrine_EventListener $listener
+     * @return void
+     */
+    public function setEventListener($listener)
+    {
+        return $this->setListener($listener);
+    }
+    /**
+     * addRecordListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return mixed        this object
+     */
+    public function addRecordListener($listener, $name = null)
+    {
+        if ( ! isset($this->attributes[Doctrine::ATTR_RECORD_LISTENER]) ||
+             ! ($this->attributes[Doctrine::ATTR_RECORD_LISTENER] instanceof Doctrine_Record_Listener_Chain)) {
+            
+            $this->attributes[Doctrine::ATTR_RECORD_LISTENER] = new Doctrine_Record_Listener_Chain();
+        }
+        $this->attributes[Doctrine::ATTR_RECORD_LISTENER]->add($listener, $name);
+
+        return $this;
+    }
+    /**
+     * getListener
+     *
+     * @return Doctrine_EventListener_Interface|Doctrine_Overloadable
+     */
+    public function getRecordListener()
+    {
+        if ( ! isset($this->attributes[Doctrine::ATTR_RECORD_LISTENER])) {
+            if (isset($this->parent)) {
+                return $this->parent->getRecordListener();
+            }
+            return null;
+        }
+        return $this->attributes[Doctrine::ATTR_RECORD_LISTENER];
+    }
+    /**
+     * setListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return Doctrine_Configurable        this object
+     */
+    public function setRecordListener($listener)
+    {
+        if ( ! ($listener instanceof Doctrine_Record_Listener_Interface)
+            && ! ($listener instanceof Doctrine_Overloadable)
+        ) {
+            throw new Doctrine_Exception("Couldn't set eventlistener. Record listeners should implement either Doctrine_Record_Listener_Interface or Doctrine_Overloadable");
+        }
+        $this->attributes[Doctrine::ATTR_RECORD_LISTENER] = $listener;
+
+        return $this;
+    }
+    /**
+     * addListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return mixed        this object
+     */
+    public function addListener($listener, $name = null)
+    {
+        if ( ! isset($this->attributes[Doctrine::ATTR_LISTENER]) ||
+             ! ($this->attributes[Doctrine::ATTR_LISTENER] instanceof Doctrine_EventListener_Chain)) {
+            
+            $this->attributes[Doctrine::ATTR_LISTENER] = new Doctrine_EventListener_Chain();
+        }
+        $this->attributes[Doctrine::ATTR_LISTENER]->add($listener, $name);
+
+        return $this;
+    }
+    /**
+     * getListener
+     *
+     * @return Doctrine_EventListener_Interface|Doctrine_Overloadable
+     */
+    public function getListener()
+    {
+        if ( ! isset($this->attributes[Doctrine::ATTR_LISTENER])) {
+            if (isset($this->parent)) {
+                return $this->parent->getListener();
+            }
+            return null;
+        }
+        return $this->attributes[Doctrine::ATTR_LISTENER];
+    }
+    /**
+     * setListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return Doctrine_Configurable        this object
+     */
+    public function setListener($listener)
+    {
+        if ( ! ($listener instanceof Doctrine_EventListener_Interface)
+            && ! ($listener instanceof Doctrine_Overloadable)
+        ) {
+            throw new Doctrine_EventListener_Exception("Couldn't set eventlistener. EventListeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
+        }
+        $this->attributes[Doctrine::ATTR_LISTENER] = $listener;
+
+        return $this;
+    }
+    /**
+     * returns the value of an attribute
+     *
+     * @param integer $attribute
+     * @return mixed
+     */
+    public function getAttribute($attribute)
+    {
+        $attribute = (int) $attribute;
+
+        if ($attribute < 0) {
+            throw new Doctrine_Exception('Unknown attribute.');
+        }
+
+        if ( ! isset($this->attributes[$attribute])) {
+            if (isset($this->parent)) {
+                return $this->parent->getAttribute($attribute);
+            }
+            return null;
+        }
+        return $this->attributes[$attribute];
+    }
+    /**
+     * getAttributes
+     * returns all attributes as an array
+     *
+     * @return array
+     */
+    public function getAttributes()
+    {
+        return $this->attributes;
+    }
+    /**
+     * sets a parent for this configurable component
+     * the parent must be configurable component itself
+     *
+     * @param Doctrine_Configurable $component
+     * @return void
+     */
+    public function setParent(Doctrine_Configurable $component)
+    {
+        $this->parent = $component;
+    }
+    /**
+     * getParent
+     * returns the parent of this component
+     *
+     * @return Doctrine_Configurable
+     */
+    public function getParent()
+    {
+        return $this->parent;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection.php
new file mode 100644
index 0000000000000000000000000000000000000000..a00975a9892bbec664bef891fa041144a9087933
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection.php
@@ -0,0 +1,1134 @@
+<?php
+/*
+ *  $Id: Connection.php 2273 2007-08-25 00:34:25Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Configurable');
+/**
+ * Doctrine_Connection
+ *
+ * A wrapper layer on top of PDO / Doctrine_Adapter
+ *
+ * Doctrine_Connection is the heart of any Doctrine based application.
+ *
+ * 1. Event listeners
+ *    An easy to use, pluggable eventlistener architecture. Aspects such as
+ *    logging, query profiling and caching can be easily implemented through
+ *    the use of these listeners
+ *
+ * 2. Lazy-connecting
+ *    Creating an instance of Doctrine_Connection does not connect
+ *    to database. Connecting to database is only invoked when actually needed
+ *    (for example when query() is being called) 
+ *
+ * 3. Convenience methods
+ *    Doctrine_Connection provides many convenience methods such as fetchAll(), fetchOne() etc.
+ *
+ * 4. Modular structure
+ *    Higher level functionality such as schema importing, exporting, sequence handling etc.
+ *    is divided into modules. For a full list of connection modules see 
+ *    Doctrine_Connection::$_modules
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2273 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (MDB2 library)
+ */
+abstract class Doctrine_Connection extends Doctrine_Configurable implements Countable, IteratorAggregate
+{
+    /**
+     * @var $dbh                                the database handler
+     */
+    protected $dbh;
+    /**
+     * @var array $tables                       an array containing all the initialized Doctrine_Table objects
+     *                                          keys representing Doctrine_Table component names and values as Doctrine_Table objects
+     */
+    protected $tables           = array();
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName;
+    /**
+     * @var boolean $isConnected                whether or not a connection has been established
+     */
+    protected $isConnected      = false;
+    /**
+     * @var array $supported                    an array containing all features this driver supports,
+     *                                          keys representing feature names and values as
+     *                                          one of the following (true, false, 'emulated')
+     */
+    protected $supported        = array();
+    /**
+     * @var array $pendingAttributes            An array of pending attributes. When setting attributes
+     *                                          no connection is needed. When connected all the pending
+     *                                          attributes are passed to the underlying adapter (usually PDO) instance.
+     */
+    protected $pendingAttributes  = array();
+    /**
+     * @var array $modules                      an array containing all modules
+     *              transaction                 Doctrine_Transaction driver, handles savepoint and transaction isolation abstraction
+     *
+     *              expression                  Doctrine_Expression driver, handles expression abstraction
+     *
+     *              dataDict                    Doctrine_DataDict driver, handles datatype abstraction
+     *
+     *              export                      Doctrine_Export driver, handles db structure modification abstraction (contains
+     *                                          methods such as alterTable, createConstraint etc.)
+     *              import                      Doctrine_Import driver, handles db schema reading
+     *
+     *              sequence                    Doctrine_Sequence driver, handles sequential id generation and retrieval
+     *
+     *              unitOfWork                  Doctrine_Connection_UnitOfWork handles many orm functionalities such as object
+     *                                          deletion and saving
+     *
+     *              formatter                   Doctrine_Formatter handles data formatting, quoting and escaping
+     *
+     * @see Doctrine_Connection::__get()
+     * @see Doctrine_DataDict
+     * @see Doctrine_Expression
+     * @see Doctrine_Export
+     * @see Doctrine_Transaction
+     * @see Doctrine_Sequence
+     * @see Doctrine_Connection_UnitOfWork
+     * @see Doctrine_Formatter
+     */
+    private $modules = array('transaction' => false,
+                             'expression'  => false,
+                             'dataDict'    => false,
+                             'export'      => false,
+                             'import'      => false,
+                             'sequence'    => false,
+                             'unitOfWork'  => false,
+                             'formatter'   => false,
+                             'util'        => false,
+                             );
+    /**
+     * @var array $properties               an array of connection properties
+     */
+    protected $properties = array('sql_comments'        => array(array('start' => '--', 'end' => "\n", 'escape' => false),
+                                                                 array('start' => '/*', 'end' => '*/', 'escape' => false)),
+                                  'identifier_quoting'  => array('start' => '"', 'end' => '"','escape' => '"'),
+                                  'string_quoting'      => array('start' => "'",
+                                                                 'end' => "'",
+                                                                 'escape' => false,
+                                                                 'escape_pattern' => false),
+                                  'wildcards'           => array('%', '_'),
+                                  'varchar_max_length'  => 255,
+                                  );
+    /**
+     * @var array $serverInfo
+     */
+    protected $serverInfo = array();
+    
+    protected $options    = array();
+    /**
+     * @var array $availableDrivers         an array containing all availible drivers
+     */
+    private static $availableDrivers    = array(
+                                        'Mysql',
+                                        'Pgsql',
+                                        'Oracle',
+                                        'Informix',
+                                        'Mssql',
+                                        'Sqlite',
+                                        'Firebird'
+                                        );
+    protected $_count;
+
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager                 the manager object
+     * @param PDO|Doctrine_Adapter_Interface $adapter   database driver
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter, $user = null, $pass = null)
+    {
+    	if (is_object($adapter)) {
+            if ( ! ($adapter instanceof PDO) && ! in_array('Doctrine_Adapter_Interface', class_implements($adapter))) {
+                throw new Doctrine_Connection_Exception('First argument should be an instance of PDO or implement Doctrine_Adapter_Interface');
+            }
+            $this->dbh = $adapter;
+
+            $this->isConnected = true;
+
+        } elseif(is_array($adapter)) {
+            $this->pendingAttributes[Doctrine::ATTR_DRIVER_NAME] = $adapter['scheme'];
+
+            $this->options['dsn']      = $adapter['dsn'];
+            $this->options['username'] = $adapter['user'];
+            $this->options['password'] = $adapter['pass'];
+        }
+
+        $this->setParent($manager);
+
+        $this->setAttribute(Doctrine::ATTR_CASE, Doctrine::CASE_NATURAL);
+        $this->setAttribute(Doctrine::ATTR_ERRMODE, Doctrine::ERRMODE_EXCEPTION);
+
+        $this->getAttribute(Doctrine::ATTR_LISTENER)->onOpen($this);
+    }
+    /**
+     * getAttribute
+     * retrieves a database connection attribute
+     *
+     * @param integer $attribute
+     * @return mixed
+     */
+    public function getAttribute($attribute)
+    {
+
+    	if ($attribute >= 100) {
+            if ( ! isset($this->attributes[$attribute])) {
+                return $this->parent->getAttribute($attribute);
+            }
+            return $this->attributes[$attribute];
+    	}
+
+        if ($this->isConnected) {
+            try {
+                return $this->dbh->getAttribute($attribute);
+            } catch(Exception $e) {
+                throw new Doctrine_Connection_Exception('Attribute ' . $attribute . ' not found.');
+            }
+        } else {
+            if ( ! isset($this->pendingAttributes[$attribute])) {
+                $this->connect();
+                $this->getAttribute($attribute);
+            }
+
+            return $this->pendingAttributes[$attribute];
+        }
+    }
+    /**
+     * returns an array of available PDO drivers
+     */
+    public static function getAvailableDrivers()
+    {
+        return PDO::getAvailableDrivers();
+    }
+    /**
+     * setAttribute
+     * sets an attribute
+     *
+     * @param integer $attribute
+     * @param mixed $value
+     * @return boolean
+     */
+    public function setAttribute($attribute, $value)
+    {
+    	if ($attribute >= 100) {
+            parent::setAttribute($attribute, $value);
+    	} else {
+            if ($this->isConnected) {
+                $this->dbh->setAttribute($attribute, $value);
+            } else {
+                $this->pendingAttributes[$attribute] = $value;
+            }
+        }
+        return $this;
+    }
+    /**
+     * getName
+     * returns the name of this driver
+     *
+     * @return string           the name of this driver
+     */
+    public function getName()
+    {
+        return $this->driverName;
+    }
+    /**
+     * __get
+     * lazy loads given module and returns it
+     *
+     * @see Doctrine_DataDict
+     * @see Doctrine_Expression
+     * @see Doctrine_Export
+     * @see Doctrine_Transaction
+     * @see Doctrine_Connection::$modules       all availible modules
+     * @param string $name                      the name of the module to get
+     * @throws Doctrine_Connection_Exception    if trying to get an unknown module
+     * @return Doctrine_Connection_Module       connection module
+     */
+    public function __get($name)
+    {
+        if (isset($this->properties[$name])) {
+            return $this->properties[$name];
+        }
+
+        if ( ! isset($this->modules[$name])) {
+            throw new Doctrine_Connection_Exception('Unknown module / property ' . $name);
+        }
+        if ($this->modules[$name] === false) {
+            switch ($name) {
+                case 'unitOfWork':
+                    $this->modules[$name] = new Doctrine_Connection_UnitOfWork($this);
+                    break;
+                case 'formatter':
+                    $this->modules[$name] = new Doctrine_Formatter($this);
+                    break;
+                default:
+                    $class = 'Doctrine_' . ucwords($name) . '_' . $this->getName();
+                    $this->modules[$name] = new $class($this);
+                }
+        }
+
+        return $this->modules[$name];
+    }
+    /**
+     * returns the manager that created this connection
+     *
+     * @return Doctrine_Manager
+     */
+    public function getManager()
+    {
+        return $this->getParent();
+    }
+    /**
+     * returns the database handler of which this connection uses
+     *
+     * @return PDO              the database handler
+     */
+    public function getDbh()
+    {
+    	$this->connect();
+    	
+        return $this->dbh;
+    }
+    /**
+     * connect
+     * connects into database
+     *
+     * @return boolean
+     */
+    public function connect()
+    {
+
+        if ($this->isConnected) {
+            return false;
+        }
+
+        $event = new Doctrine_Event($this, Doctrine_Event::CONN_CONNECT);
+
+        $this->getListener()->preConnect($event);
+
+        $e     = explode(':', $this->options['dsn']);
+        $found = false;
+        
+        if (extension_loaded('pdo')) {
+            if (in_array($e[0], PDO::getAvailableDrivers())) {
+                $this->dbh = new PDO($this->options['dsn'], $this->options['username'], $this->options['password']);
+                $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+                $found = true;
+            }
+        }
+
+        if ( ! $found) {
+            $class = 'Doctrine_Adapter_' . ucwords($e[0]);
+
+            if (class_exists($class)) {
+                $this->dbh = new $class($this->options['dsn'], $this->options['username'], $this->options['password']);
+            } else {
+                throw new Doctrine_Connection_Exception("Couldn't locate driver named " . $e[0]);      	
+            }
+        }
+
+        // attach the pending attributes to adapter
+        foreach($this->pendingAttributes as $attr => $value) {
+            // some drivers don't support setting this so we just skip it
+            if($attr == Doctrine::ATTR_DRIVER_NAME) {
+                continue;
+            }
+            $this->dbh->setAttribute($attr, $value);
+        }
+
+        $this->isConnected = true;
+
+        $this->getListener()->postConnect($event);
+        return true;
+    }
+    
+    public function incrementQueryCount() 
+    {
+        $this->_count++;
+    }
+    /**
+     * converts given driver name
+     *
+     * @param
+     */
+    public function driverName($name)
+    {
+    }
+    /**
+     * supports
+     *
+     * @param string $feature   the name of the feature
+     * @return boolean          whether or not this drivers supports given feature
+     */
+    public function supports($feature)
+    {
+        return (isset($this->supported[$feature])
+                  && ($this->supported[$feature] === 'emulated'
+                   || $this->supported[$feature]));
+    }
+    /**
+     * Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT
+     * query, except that if there is already a row in the table with the same
+     * key field values, the REPLACE query just updates its values instead of
+     * inserting a new row.
+     *
+     * The REPLACE type of query does not make part of the SQL standards. Since
+     * practically only MySQL and SQLIte implement it natively, this type of
+     * query isemulated through this method for other DBMS using standard types
+     * of queries inside a transaction to assure the atomicity of the operation.
+     *
+     * @param                   string  name of the table on which the REPLACE query will
+     *                          be executed.
+     *
+     * @param   array           an associative array that describes the fields and the
+     *                          values that will be inserted or updated in the specified table. The
+     *                          indexes of the array are the names of all the fields of the table.
+     *
+     *                          The values of the array are values to be assigned to the specified field.
+     *
+     * @param array $keys       an array containing all key fields (primary key fields
+     *                          or unique index fields) for this table
+     *
+     *                          the uniqueness of a row will be determined according to
+     *                          the provided key fields
+     *
+     *                          this method will fail if no key fields are specified
+     *
+     * @throws Doctrine_Connection_Exception        if this driver doesn't support replace
+     * @throws Doctrine_Connection_Exception        if some of the key values was null
+     * @throws Doctrine_Connection_Exception        if there were no key fields
+     * @throws PDOException                         if something fails at PDO level
+     * @return integer                              number of rows affected
+     */
+    public function replace($table, array $fields, array $keys)
+    {
+        //if ( ! $this->supports('replace'))
+        //    throw new Doctrine_Connection_Exception('replace query is not supported');
+
+        if (empty($keys)) {
+            throw new Doctrine_Connection_Exception('Not specified which fields are keys');
+        }
+        $condition = $values = array();
+
+        foreach ($fields as $name => $value) {
+            $values[$name] = $value;
+
+            if (in_array($name, $keys)) {
+                if ($value === null)
+                    throw new Doctrine_Connection_Exception('key value '.$name.' may not be null');
+
+                $condition[]       = $name . ' = ?';
+                $conditionValues[] = $value;
+            }
+        }
+
+        $query          = 'DELETE FROM ' . $this->quoteIdentifier($table) . ' WHERE ' . implode(' AND ', $condition);
+        $affectedRows   = $this->exec($query);
+
+        $this->insert($table, $values);
+
+        $affectedRows++;
+
+
+        return $affectedRows;
+    }
+    /**
+     * Inserts a table row with specified data.
+     *
+     * @param string $table     The table to insert data into.
+     * @param array $values     An associateve array containing column-value pairs.
+     * @return boolean
+     */
+    public function insert($table, array $values = array()) {
+        if (empty($values)) {
+            return false;
+        }
+
+        // column names are specified as array keys
+        $cols = array();
+        // the query VALUES will contain either expresions (eg 'NOW()') or ?
+        $a = array();
+        foreach ($values as $k => $value) {
+            $cols[] = $this->quoteIdentifier($k);
+            if ($value instanceof Doctrine_Expression) {
+                $a[] = $value->getSql();
+                unset($values[$k]);
+            } else {
+                $a[] = '?';
+            }
+        }
+
+        // build the statement
+        $query = 'INSERT INTO ' . $this->quoteIdentifier($table) 
+               . ' (' . implode(', ', $cols) . ') '
+               . 'VALUES (';
+
+        $query .= implode(', ', $a) . ')';
+        // prepare and execute the statement
+
+        $this->exec($query, array_values($values));
+
+        return true;
+    }
+    /**
+     * Set the charset on the current connection
+     *
+     * @param string    charset
+     *
+     * @return void
+     */
+    public function setCharset($charset)
+    {
+
+    }
+    /**
+     * Quote a string so it can be safely used as a table or column name
+     *
+     * Delimiting style depends on which database driver is being used.
+     *
+     * NOTE: just because you CAN use delimited identifiers doesn't mean
+     * you SHOULD use them.  In general, they end up causing way more
+     * problems than they solve.
+     *
+     * Portability is broken by using the following characters inside
+     * delimited identifiers:
+     *   + backtick (<kbd>`</kbd>) -- due to MySQL
+     *   + double quote (<kbd>"</kbd>) -- due to Oracle
+     *   + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access
+     *
+     * Delimited identifiers are known to generally work correctly under
+     * the following drivers:
+     *   + mssql
+     *   + mysql
+     *   + mysqli
+     *   + oci8
+     *   + pgsql
+     *   + sqlite
+     *
+     * InterBase doesn't seem to be able to use delimited identifiers
+     * via PHP 4.  They work fine under PHP 5.
+     *
+     * @param string $str           identifier name to be quoted
+     * @param bool $checkOption     check the 'quote_identifier' option
+     *
+     * @return string               quoted identifier string
+     */
+    public function quoteIdentifier($str, $checkOption = true)
+    {
+    	// quick fix for the identifiers that contain a dot
+        if (strpos($str, '.')) {
+            $e = explode('.', $str);
+            
+            return $this->formatter->quoteIdentifier($e[0], $checkOption) . '.' 
+                 . $this->formatter->quoteIdentifier($e[1], $checkOption);
+        }
+        return $this->formatter->quoteIdentifier($str, $checkOption);
+    }
+    /**
+     * convertBooleans
+     * some drivers need the boolean values to be converted into integers
+     * when using DQL API
+     *
+     * This method takes care of that conversion
+     *
+     * @param array $item
+     * @return void
+     */
+    public function convertBooleans($item)
+    {
+        return $this->formatter->convertBooleans($item);
+    }
+    /**
+     * quote
+     * quotes given input parameter
+     *
+     * @param mixed $input      parameter to be quoted
+     * @param string $type
+     * @return mixed
+     */
+    public function quote($input, $type = null)
+    {
+        return $this->formatter->quote($input, $type);
+    }
+    /**
+     * Set the date/time format for the current connection
+     *
+     * @param string    time format
+     *
+     * @return void
+     */
+    public function setDateFormat($format = null)
+    {
+    }
+    /**
+     * fetchAll
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @return array
+     */
+    public function fetchAll($statement, array $params = array()) 
+    {
+        return $this->execute($statement, $params)->fetchAll(Doctrine::FETCH_ASSOC);
+    }
+    /**
+     * fetchOne
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @param int $colnum               0-indexed column number to retrieve
+     * @return mixed
+     */
+    public function fetchOne($statement, array $params = array(), $colnum = 0) 
+    {
+        return $this->execute($statement, $params)->fetchColumn($colnum);
+    }
+    /**
+     * fetchRow
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @return array
+     */
+    public function fetchRow($statement, array $params = array()) 
+    {
+        return $this->execute($statement, $params)->fetch(Doctrine::FETCH_ASSOC);
+    }
+    /**
+     * fetchArray
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @return array
+     */
+    public function fetchArray($statement, array $params = array()) 
+    {
+        return $this->execute($statement, $params)->fetch(Doctrine::FETCH_NUM);
+    }
+    /**
+     * fetchColumn
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @param int $colnum               0-indexed column number to retrieve
+     * @return array
+     */
+    public function fetchColumn($statement, array $params = array(), $colnum = 0) 
+    {
+        return $this->execute($statement, $params)->fetchAll(Doctrine::FETCH_COLUMN, $colnum);
+    }
+    /**
+     * fetchAssoc
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @return array
+     */
+    public function fetchAssoc($statement, array $params = array()) 
+    {
+        return $this->execute($statement, $params)->fetchAll(Doctrine::FETCH_ASSOC);
+    }
+    /**
+     * fetchBoth
+     *
+     * @param string $statement         sql query to be executed
+     * @param array $params             prepared statement params
+     * @return array
+     */
+    public function fetchBoth($statement, array $params = array()) 
+    {
+        return $this->execute($statement, $params)->fetchAll(Doctrine::FETCH_BOTH);
+    }
+    /**
+     * query
+     * queries the database using Doctrine Query Language
+     * returns a collection of Doctrine_Record objects
+     *
+     * <code>
+     * $users = $conn->query('SELECT u.* FROM User u');
+     *
+     * $users = $conn->query('SELECT u.* FROM User u WHERE u.name LIKE ?', array('someone'));
+     * </code>
+     *
+     * @param string $query             DQL query
+     * @param array $params             query parameters
+     * @see Doctrine_Query
+     * @return Doctrine_Collection      Collection of Doctrine_Record objects
+     */
+    public function query($query, array $params = array()) 
+    {
+        $parser = new Doctrine_Query($this);
+
+        return $parser->query($query, $params);
+    }
+    /**
+     * prepare
+     *
+     * @param string $statement
+     */
+    public function prepare($statement)
+    {
+        $this->connect();
+
+        try {
+            $event = new Doctrine_Event($this, Doctrine_Event::CONN_PREPARE, $statement);
+    
+            $this->getAttribute(Doctrine::ATTR_LISTENER)->prePrepare($event);
+
+            $stmt = false;
+    
+            if ( ! $event->skipOperation) {
+                $stmt = $this->dbh->prepare($statement);
+            }
+    
+            $this->getAttribute(Doctrine::ATTR_LISTENER)->postPrepare($event);
+            
+            return new Doctrine_Connection_Statement($this, $stmt);
+        } catch(Doctrine_Adapter_Exception $e) {
+        } catch(PDOException $e) { }
+
+        $this->rethrowException($e, $this);
+    }
+    /**
+     * query
+     * queries the database using Doctrine Query Language and returns
+     * the first record found
+     *
+     * <code>
+     * $user = $conn->queryOne('SELECT u.* FROM User u WHERE u.id = ?', array(1));
+     *
+     * $user = $conn->queryOne('SELECT u.* FROM User u WHERE u.name LIKE ? AND u.password = ?',
+     *         array('someone', 'password')
+     *         );
+     * </code>
+     *
+     * @param string $query             DQL query
+     * @param array $params             query parameters
+     * @see Doctrine_Query
+     * @return Doctrine_Record|false    Doctrine_Record object on success,
+     *                                  boolean false on failure
+     */
+    public function queryOne($query, array $params = array()) 
+    {
+        $parser = new Doctrine_Query($this);
+
+        $coll = $parser->query($query, $params);
+        if ( ! $coll->contains(0)) {
+            return false;
+        }
+        return $coll[0];
+    }
+    /**
+     * queries the database with limit and offset
+     * added to the query and returns a PDOStatement object
+     *
+     * @param string $query
+     * @param integer $limit
+     * @param integer $offset
+     * @return PDOStatement
+     */
+    public function select($query, $limit = 0, $offset = 0)
+    {
+        if ($limit > 0 || $offset > 0) {
+            $query = $this->modifyLimitQuery($query, $limit, $offset);
+        }
+        return $this->dbh->query($query);
+    }
+    /**
+     * standaloneQuery
+     *
+     * @param string $query     sql query
+     * @param array $params     query parameters
+     *
+     * @return PDOStatement|Doctrine_Adapter_Statement
+     */
+    public function standaloneQuery($query, $params = array())
+    {
+        return $this->execute($query, $params);
+    }
+    /**
+     * execute
+     * @param string $query     sql query
+     * @param array $params     query parameters
+     *
+     * @return PDOStatement|Doctrine_Adapter_Statement
+     */
+    public function execute($query, array $params = array())
+    {
+    	$this->connect();
+
+        try {
+            if ( ! empty($params)) {
+                $stmt = $this->prepare($query);
+                $stmt->execute($params);
+                return $stmt;
+            } else {
+                $event = new Doctrine_Event($this, Doctrine_Event::CONN_QUERY, $query, $params);
+
+                $this->getAttribute(Doctrine::ATTR_LISTENER)->preQuery($event);
+
+                if ( ! $event->skipOperation) {
+                    $stmt = $this->dbh->query($query);
+
+                    $this->_count++;
+                }
+                $this->getAttribute(Doctrine::ATTR_LISTENER)->postQuery($event);
+
+                return $stmt;
+            }
+        } catch(Doctrine_Adapter_Exception $e) {
+        } catch(PDOException $e) { }
+
+        $this->rethrowException($e, $this);
+    }
+    /**
+     * exec
+     * @param string $query     sql query
+     * @param array $params     query parameters
+     *
+     * @return PDOStatement|Doctrine_Adapter_Statement
+     */
+    public function exec($query, array $params = array()) {
+    	$this->connect();
+
+        try {
+            if ( ! empty($params)) {
+                $stmt = $this->prepare($query);
+                $stmt->execute($params);
+
+                return $stmt->rowCount();
+            } else {
+                $event = new Doctrine_Event($this, Doctrine_Event::CONN_EXEC, $query, $params);
+
+                $this->getAttribute(Doctrine::ATTR_LISTENER)->preExec($event);
+
+                if ( ! $event->skipOperation) {
+                    $count = $this->dbh->exec($query);
+
+                    $this->_count++;
+                }
+                $this->getAttribute(Doctrine::ATTR_LISTENER)->postExec($event);
+
+                return $count;
+            }
+        } catch(Doctrine_Adapter_Exception $e) {
+        } catch(PDOException $e) { }
+
+        $this->rethrowException($e, $this);
+    }
+    /**
+     * rethrowException
+     *
+     * @throws Doctrine_Connection_Exception
+     */
+    public function rethrowException(Exception $e, $invoker)
+    {
+    	$event = new Doctrine_Event($this, Doctrine_Event::CONN_ERROR);
+
+    	$this->getListener()->preError($event);
+
+        $name = 'Doctrine_Connection_' . $this->driverName . '_Exception';
+
+        $exc  = new $name($e->getMessage(), (int) $e->getCode());
+        if ( ! is_array($e->errorInfo)) {
+            $e->errorInfo = array(null, null, null, null);
+        }
+        $exc->processErrorInfo($e->errorInfo);
+
+         if ($this->getAttribute(Doctrine::ATTR_THROW_EXCEPTIONS)) {
+            throw $exc;
+        }
+        
+        $this->getListener()->postError($event);
+    }
+    /**
+     * hasTable
+     * whether or not this connection has table $name initialized
+     *
+     * @param mixed $name
+     * @return boolean
+     */
+    public function hasTable($name)
+    {
+        return isset($this->tables[$name]);
+    }
+    /**
+     * returns a table object for given component name
+     *
+     * @param string $name              component name
+     * @return object Doctrine_Table
+     */
+    public function getTable($name, $allowExport = true)
+    {
+        if (isset($this->tables[$name])) {
+            return $this->tables[$name];
+        }
+        $class = $name . 'Table';
+
+        if (class_exists($class) && in_array('Doctrine_Table', class_parents($class))) {
+            $table = new $class($name, $this);
+        } else {
+            $table = new Doctrine_Table($name, $this);
+        }
+
+        $this->tables[$name] = $table;
+
+
+        return $table;
+    }
+    /**
+     * returns an array of all initialized tables
+     *
+     * @return array
+     */
+    public function getTables()
+    {
+        return $this->tables;
+    }
+    /**
+     * returns an iterator that iterators through all
+     * initialized table objects
+     *
+     * <code>
+     * foreach ($conn as $index => $table) {
+     *      print $table;  // get a string representation of each table object
+     * }
+     * </code>
+     *
+     * @return ArrayIterator        SPL ArrayIterator object
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->tables);
+    }
+    /**
+     * returns the count of initialized table objects
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        return $this->_count;
+    }
+    /**
+     * addTable
+     * adds a Doctrine_Table object into connection registry
+     *
+     * @param $table                a Doctrine_Table object to be added into registry
+     * @return boolean
+     */
+    public function addTable(Doctrine_Table $table)
+    {
+        $name = $table->getComponentName();
+
+        if (isset($this->tables[$name])) {
+            return false;
+        }
+        $this->tables[$name] = $table;
+        return true;
+    }
+    /**
+     * create
+     * creates a record
+     *
+     * create                       creates a record
+     * @param string $name          component name
+     * @return Doctrine_Record      Doctrine_Record object
+     */
+    public function create($name)
+    {
+        return $this->getTable($name)->create();
+    }
+    /**
+     * flush
+     * saves all the records from all tables
+     * this operation is isolated using a transaction
+     *
+     * @throws PDOException         if something went wrong at database level
+     * @return void
+     */
+    public function flush()
+    {
+        $this->beginTransaction();
+        $this->unitOfWork->saveAll();
+        $this->commit();
+    }
+    /**
+     * clear
+     * clears all repositories
+     *
+     * @return void
+     */
+    public function clear()
+    {
+        foreach ($this->tables as $k => $table) {
+            $table->getRepository()->evictAll();
+            $table->clear();
+        }
+    }
+    /**
+     * evictTables
+     * evicts all tables
+     *
+     * @return void
+     */
+    public function evictTables()
+    {
+        $this->tables = array();
+        $this->exported = array();
+    }
+    /**
+     * close
+     * closes the connection
+     *
+     * @return void
+     */
+    public function close()
+    {
+    	$event = new Doctrine_Event($this, Doctrine_Event::CONN_CLOSE);
+
+        $this->getAttribute(Doctrine::ATTR_LISTENER)->preClose($event);
+
+        $this->clear();
+        
+        $this->dbh = null;
+        $this->isConnected = false;
+
+        $this->getAttribute(Doctrine::ATTR_LISTENER)->postClose($event);
+    }
+    /**
+     * get the current transaction nesting level
+     *
+     * @return integer
+     */
+    public function getTransactionLevel()
+    {
+        return $this->transaction->getTransactionLevel();
+    }
+    /**
+     * errorCode
+     * Fetch the SQLSTATE associated with the last operation on the database handle
+     *
+     * @return integer
+     */
+    public function errorCode()
+    {
+    	$this->connect();
+
+        return $this->dbh->errorCode();
+    }
+    /**
+     * errorInfo
+     * Fetch extended error information associated with the last operation on the database handle
+     *
+     * @return array
+     */
+    public function errorInfo()
+    {
+    	$this->connect();
+
+        return $this->dbh->errorInfo();
+    }
+    /**
+     * lastInsertId
+     *
+     * Returns the ID of the last inserted row, or the last value from a sequence object,
+     * depending on the underlying driver.
+     *
+     * Note: This method may not return a meaningful or consistent result across different drivers, 
+     * because the underlying database may not even support the notion of auto-increment fields or sequences.
+     *
+     * @param string $table     name of the table into which a new row was inserted
+     * @param string $field     name of the field into which a new row was inserted
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        return $this->sequence->lastInsertId($table, $field);
+    }
+    /**
+     * beginTransaction
+     * Start a transaction or set a savepoint.
+     *
+     * if trying to set a savepoint and there is no active transaction
+     * a new transaction is being started
+     *
+     * Listeners: onPreTransactionBegin, onTransactionBegin
+     *
+     * @param string $savepoint                 name of a savepoint to set
+     * @throws Doctrine_Transaction_Exception   if the transaction fails at database level
+     * @return integer                          current transaction nesting level
+     */
+    public function beginTransaction($savepoint = null)
+    {
+        $this->transaction->beginTransaction($savepoint);
+    }
+    /**
+     * commit
+     * Commit the database changes done during a transaction that is in
+     * progress or release a savepoint. This function may only be called when
+     * auto-committing is disabled, otherwise it will fail.
+     *
+     * Listeners: onPreTransactionCommit, onTransactionCommit
+     *
+     * @param string $savepoint                 name of a savepoint to release
+     * @throws Doctrine_Transaction_Exception   if the transaction fails at PDO level
+     * @throws Doctrine_Validator_Exception     if the transaction fails due to record validations
+     * @return boolean                          false if commit couldn't be performed, true otherwise
+     */
+    public function commit($savepoint = null)
+    {
+        $this->transaction->commit($savepoint);
+    }
+    /**
+     * rollback
+     * Cancel any database changes done during a transaction or since a specific
+     * savepoint that is in progress. This function may only be called when
+     * auto-committing is disabled, otherwise it will fail. Therefore, a new
+     * transaction is implicitly started after canceling the pending changes.
+     *
+     * this method can be listened with onPreTransactionRollback and onTransactionRollback
+     * eventlistener methods
+     *
+     * @param string $savepoint                 name of a savepoint to rollback to   
+     * @throws Doctrine_Transaction_Exception   if the rollback operation fails at database level
+     * @return boolean                          false if rollback couldn't be performed, true otherwise
+     */
+    public function rollback($savepoint = null)
+    {
+        $this->transaction->rollback($savepoint);
+    }
+    /**
+     * returns a string representation of this object
+     * @return string
+     */
+    public function __toString()
+    {
+        return Doctrine_Lib::getConnectionAsString($this);
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Common.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Common.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ba844cd6ea8fa043bff19b8f6db95b5fbe82879
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Common.php
@@ -0,0 +1,57 @@
+<?php
+/*
+ *  $Id: Common.php 1794 2007-06-24 20:11:41Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * standard connection, the parent of pgsql, mysql and sqlite
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1794 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Common extends Doctrine_Connection
+{
+    /**
+     * Adds an driver-specific LIMIT clause to the query
+     *
+     * @param string $query
+     * @param mixed $limit
+     * @param mixed $offset
+     */
+    public function modifyLimitQuery($query, $limit = false,$offset = false,$isManip=false)
+    {
+    	$limit = (int) $limit;
+    	$offset = (int) $offset;
+    	
+        if ($limit && $offset) {
+            $query .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+        } elseif ($limit && ! $offset) {
+            $query .= ' LIMIT ' . $limit;
+        } elseif ( ! $limit && $offset) {
+            $query .= ' LIMIT 999999999999 OFFSET ' . $offset;
+        }
+
+        return $query;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Db2.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Db2.php
new file mode 100644
index 0000000000000000000000000000000000000000..938c2ae1bfde3aa9ae4e96fe600d0f6a14687e76
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Db2.php
@@ -0,0 +1,64 @@
+<?php
+/*
+ *  $Id: Db2.php 1181 2007-03-20 23:22:51Z gnat $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * Doctrine_Connection_Db2
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1181 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Db2 extends Doctrine_Connection
+{
+    /**
+     * Adds an driver-specific LIMIT clause to the query
+     *
+     * @param string $query         query to modify
+     * @param integer $limit        limit the number of rows
+     * @param integer $offset       start reading from given offset
+     * @return string               the modified query
+     */
+    public function modifyLimitQuery($query, $limit, $offset)
+    {
+        if ($limit <= 0)
+            return $query;
+
+        if ($offset == 0) {
+            return $query . ' FETCH FIRST '. $limit .' ROWS ONLY';
+        } else {
+            $sqlPieces = explode('from', $query);
+            $select = $sqlPieces[0];
+            $table = $sqlPieces[1];
+
+            $col = explode('select', $select);
+
+            $sql = 'WITH OFFSET AS(' . $select . ', ROW_NUMBER() ' .
+               'OVER(ORDER BY ' . $col[1] . ') AS dctrn_rownum FROM ' . $table . ')' .
+               $select . 'FROM OFFSET WHERE dctrn_rownum BETWEEN ' . $offset .
+                   'AND ' . ($offset + $limit - 1);
+            return $sql;
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..b71582118f2b43ac53242a647ec5a4da194404d4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Exception.php
@@ -0,0 +1,113 @@
+<?php
+/*
+ *  $Id: Exception.php 1345 2007-05-14 13:00:14Z meus $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1345 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Exception extends Doctrine_Exception
+{
+    /**
+     * @var array $errorMessages        an array containing messages for portable error codes
+     */
+    static protected $errorMessages = array(
+                Doctrine::ERR                    => 'unknown error',
+                Doctrine::ERR_ALREADY_EXISTS     => 'already exists',
+                Doctrine::ERR_CANNOT_CREATE      => 'can not create',
+                Doctrine::ERR_CANNOT_ALTER       => 'can not alter',
+                Doctrine::ERR_CANNOT_REPLACE     => 'can not replace',
+                Doctrine::ERR_CANNOT_DELETE      => 'can not delete',
+                Doctrine::ERR_CANNOT_DROP        => 'can not drop',
+                Doctrine::ERR_CONSTRAINT         => 'constraint violation',
+                Doctrine::ERR_CONSTRAINT_NOT_NULL=> 'null value violates not-null constraint',
+                Doctrine::ERR_DIVZERO            => 'division by zero',
+                Doctrine::ERR_INVALID            => 'invalid',
+                Doctrine::ERR_INVALID_DATE       => 'invalid date or time',
+                Doctrine::ERR_INVALID_NUMBER     => 'invalid number',
+                Doctrine::ERR_MISMATCH           => 'mismatch',
+                Doctrine::ERR_NODBSELECTED       => 'no database selected',
+                Doctrine::ERR_NOSUCHFIELD        => 'no such field',
+                Doctrine::ERR_NOSUCHTABLE        => 'no such table',
+                Doctrine::ERR_NOT_CAPABLE        => 'Doctrine backend not capable',
+                Doctrine::ERR_NOT_FOUND          => 'not found',
+                Doctrine::ERR_NOT_LOCKED         => 'not locked',
+                Doctrine::ERR_SYNTAX             => 'syntax error',
+                Doctrine::ERR_UNSUPPORTED        => 'not supported',
+                Doctrine::ERR_VALUE_COUNT_ON_ROW => 'value count on row',
+                Doctrine::ERR_INVALID_DSN        => 'invalid DSN',
+                Doctrine::ERR_CONNECT_FAILED     => 'connect failed',
+                Doctrine::ERR_NEED_MORE_DATA     => 'insufficient data supplied',
+                Doctrine::ERR_EXTENSION_NOT_FOUND=> 'extension not found',
+                Doctrine::ERR_NOSUCHDB           => 'no such database',
+                Doctrine::ERR_ACCESS_VIOLATION   => 'insufficient permissions',
+                Doctrine::ERR_LOADMODULE         => 'error while including on demand module',
+                Doctrine::ERR_TRUNCATED          => 'truncated',
+                Doctrine::ERR_DEADLOCK           => 'deadlock detected',
+                );
+    /**
+     * @see Doctrine::ERR_* constants
+     * @since 1.0
+     * @var integer $portableCode           portable error code
+     */
+    protected $portableCode;
+    /**
+     * getPortableCode
+     * returns portable error code
+     *
+     * @return integer      portable error code
+     */
+    public function getPortableCode()
+    {
+        return $this->portableCode;
+    }
+    /**
+     * getPortableMessage
+     * returns portable error message
+     *
+     * @return string       portable error message
+     */
+    public function getPortableMessage()
+    {
+        return self::errorMessage($this->portableCode);
+    }
+    /**
+     * Return a textual error message for a Doctrine error code
+     *
+     * @param   int|array   integer error code,
+     *                           null to get the current error code-message map,
+     *                           or an array with a new error code-message map
+     *
+     * @return  string  error message, or false if the error code was
+     *                  not recognized
+     */
+    public function errorMessage($value = null)
+    {
+        return isset(self::$errorMessages[$value]) ?
+           self::$errorMessages[$value] : self::$errorMessages[Doctrine::ERR];
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d57d6d52b6356ed6993c7fea9a17420458378e4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird.php
@@ -0,0 +1,108 @@
+<?php
+/*
+ *  $Id: Firebird.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * Doctrine_Connection_Firebird
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Firebird extends Doctrine_Connection
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Firebird';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO $pdo                          database handle
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+
+        $this->supported = array(
+                          'sequences'             => true,
+                          'indexes'               => true,
+                          'affected_rows'         => true,
+                          'summary_functions'     => true,
+                          'order_by_text'         => true,
+                          'transactions'          => true,
+                          'savepoints'            => true,
+                          'current_id'            => true,
+                          'limit_queries'         => 'emulated',
+                          'LOBs'                  => true,
+                          'replace'               => 'emulated',
+                          'sub_selects'           => true,
+                          'auto_increment'        => true,
+                          'primary_key'           => true,
+                          'result_introspection'  => true,
+                          'prepared_statements'   => true,
+                          'identifier_quoting'    => false,
+                          'pattern_escaping'      => true
+                          );
+        // initialize all driver options
+        /**
+        $this->options['DBA_username'] = false;
+        $this->options['DBA_password'] = false;
+        $this->options['database_path'] = '';
+        $this->options['database_extension'] = '.gdb';
+        $this->options['server_version'] = '';
+        */
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * Set the charset on the current connection
+     *
+     * @param string    charset
+     *
+     * @return void
+     */
+    public function setCharset($charset)
+    {
+        $query = 'SET NAMES '.$this->dbh->quote($charset);
+        $this->exec($query);
+    }
+    /**
+     * Adds an driver-specific LIMIT clause to the query
+     *
+     * @param string $query     query to modify
+     * @param integer $limit    limit the number of rows
+     * @param integer $offset   start reading from given offset
+     * @return string modified  query
+     */
+    public function modifyLimitQuery($query, $limit, $offset)
+    {
+        if ($limit > 0) {
+            $query = preg_replace('/^([\s(])*SELECT(?!\s*FIRST\s*\d+)/i',
+                "SELECT FIRST $limit SKIP $offset", $query);
+        }
+        return $query;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..d3048c737e87bc44eab0ea33eda165793df34fa8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Firebird/Exception.php
@@ -0,0 +1,134 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Firebird_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ */
+class Doctrine_Connection_Firebird_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorCodeMap         an array that is used for determining portable
+     *                                  error code from a native database error code
+     */
+    protected static $errorCodeMap = array(
+                                    -104 => Doctrine::ERR_SYNTAX,
+                                    -150 => Doctrine::ERR_ACCESS_VIOLATION,
+                                    -151 => Doctrine::ERR_ACCESS_VIOLATION,
+                                    -155 => Doctrine::ERR_NOSUCHTABLE,
+                                    -157 => Doctrine::ERR_NOSUCHFIELD,
+                                    -158 => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                    -170 => Doctrine::ERR_MISMATCH,
+                                    -171 => Doctrine::ERR_MISMATCH,
+                                    -172 => Doctrine::ERR_INVALID,
+                                    // -204 =>  // Covers too many errors, need to use regex on msg
+                                    -205 => Doctrine::ERR_NOSUCHFIELD,
+                                    -206 => Doctrine::ERR_NOSUCHFIELD,
+                                    -208 => Doctrine::ERR_INVALID,
+                                    -219 => Doctrine::ERR_NOSUCHTABLE,
+                                    -297 => Doctrine::ERR_CONSTRAINT,
+                                    -303 => Doctrine::ERR_INVALID,
+                                    -413 => Doctrine::ERR_INVALID_NUMBER,
+                                    -530 => Doctrine::ERR_CONSTRAINT,
+                                    -551 => Doctrine::ERR_ACCESS_VIOLATION,
+                                    -552 => Doctrine::ERR_ACCESS_VIOLATION,
+                                    // -607 =>  // Covers too many errors, need to use regex on msg
+                                    -625 => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                    -803 => Doctrine::ERR_CONSTRAINT,
+                                    -804 => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                    -904 => Doctrine::ERR_CONNECT_FAILED,
+                                    -922 => Doctrine::ERR_NOSUCHDB,
+                                    -923 => Doctrine::ERR_CONNECT_FAILED,
+                                    -924 => Doctrine::ERR_CONNECT_FAILED
+                                    );
+    /**
+     * @var array $errorRegexps         an array that is used for determining portable
+     *                                  error code from a native database error message
+     */
+    protected static $errorRegexps = array(
+                                    '/generator .* is not defined/'
+                                        => Doctrine::ERR_SYNTAX,  // for compat. w ibase_errcode()
+                                    '/table.*(not exist|not found|unknown)/i'
+                                        => Doctrine::ERR_NOSUCHTABLE,
+                                    '/table .* already exists/i'
+                                        => Doctrine::ERR_ALREADY_EXISTS,
+                                    '/unsuccessful metadata update .* failed attempt to store duplicate value/i'
+                                        => Doctrine::ERR_ALREADY_EXISTS,
+                                    '/unsuccessful metadata update .* not found/i'
+                                        => Doctrine::ERR_NOT_FOUND,
+                                    '/validation error for column .* value "\*\*\* null/i'
+                                        => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                    '/violation of [\w ]+ constraint/i'
+                                        => Doctrine::ERR_CONSTRAINT,
+                                    '/conversion error from string/i'
+                                        => Doctrine::ERR_INVALID_NUMBER,
+                                    '/no permission for/i'
+                                        => Doctrine::ERR_ACCESS_VIOLATION,
+                                    '/arithmetic exception, numeric overflow, or string truncation/i'
+                                        => Doctrine::ERR_INVALID,
+                                    '/table unknown/i'
+                                        => Doctrine::ERR_NOSUCHTABLE,
+                                    );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to errorInfo array and returns the modified array
+     *
+     * the portable error code is added at the end of array
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @return array
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+            /**
+            // todo: are the following lines needed?
+            // memo for the interbase php module hackers: we need something similar
+            // to mysql_errno() to retrieve error codes instead of this ugly hack
+            if (preg_match('/^([^0-9\-]+)([0-9\-]+)\s+(.*)$/', $native_msg, $m)) {
+                $native_code = (int)$m[2];
+            } else {
+                $native_code = null;
+            }
+            */
+
+        foreach (self::$errorRegexps as $regexp => $code) {
+            if (preg_match($regexp, $errorInfo[2])) {
+                $errorInfo[3] = $code;
+                break;
+            }
+        }
+        if (isset(self::$errorCodeMap[$errorInfo[1]])) {
+            $errorInfo[3] = self::$errorCodeMap[$errorInfo[1]];
+        }
+        return $errorInfo;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb4a4bb25f8975b179a50c2156e1c796ce3482ff
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix.php
@@ -0,0 +1,51 @@
+<?php
+/*
+ *  $Id: Informix.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * Doctrine_Connection_Mysql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Informix extends Doctrine_Connection
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Informix';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO $pdo                          database handle
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+        // initialize all driver options
+
+        parent::__construct($manager, $adapter);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..af1cab20f0cee647bdf34d9dc5de1441dfe39c21
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Informix/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Informix_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Informix_Exception extends Doctrine_Connection_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mock.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mock.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a4890a989d3ffc4ef118339c136de841a553d0e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mock.php
@@ -0,0 +1,50 @@
+<?php
+/*
+ *  $Id: Mock.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Common');
+/**
+ * Doctrine_Connection_Mysql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Mock extends Doctrine_Connection_Common
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Mock';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO|Doctrine_Adapter $adapter     database handler
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Module.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Module.php
new file mode 100644
index 0000000000000000000000000000000000000000..775a0e904e8b32341e97606c9309d1bedbf7eed0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Module.php
@@ -0,0 +1,78 @@
+<?php
+/*
+ *  $Id: Module.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Connection_Module
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Module
+{
+    /**
+     * @var Doctrine_Connection $conn       Doctrine_Connection object, every connection
+     *                                      module holds an instance of Doctrine_Connection
+     */
+    protected $conn;
+    /**
+     * @var string $moduleName              the name of this module
+     */
+    protected $moduleName;
+    /**
+     * @param Doctrine_Connection $conn     Doctrine_Connection object, every connection
+     *                                      module holds an instance of Doctrine_Connection
+     */
+    public function __construct($conn = null)
+    {
+        if ( ! ($conn instanceof Doctrine_Connection)) {
+            $conn = Doctrine_Manager::getInstance()->getCurrentConnection();
+        }
+        $this->conn = $conn;
+
+        $e = explode('_', get_class($this));
+
+        $this->moduleName = $e[1];
+    }
+    /**
+     * getConnection
+     * returns the connection object this module uses
+     *
+     * @return Doctrine_Connection
+     */
+    public function getConnection()
+    {
+        return $this->conn;
+    }
+    /**
+     * getModuleName
+     * returns the name of this module
+     *
+     * @return string       the name of this module
+     */
+    public function getModuleName()
+    {
+        return $this->moduleName;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..fa8caf6fb5c39938bcd4e46a558b4e812525d719
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql.php
@@ -0,0 +1,189 @@
+<?php
+/*
+ *  $Id: Mssql.php 1178 2007-03-18 20:00:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * Doctrine_Connection_Mssql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1178 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Mssql extends Doctrine_Connection
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Mssql';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO $pdo                          database handle
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+        // initialize all driver options
+        $this->supported = array(
+                          'sequences'             => 'emulated',
+                          'indexes'               => true,
+                          'affected_rows'         => true,
+                          'transactions'          => true,
+                          'summary_functions'     => true,
+                          'order_by_text'         => true,
+                          'current_id'            => 'emulated',
+                          'limit_queries'         => 'emulated',
+                          'LOBs'                  => true,
+                          'replace'               => 'emulated',
+                          'sub_selects'           => true,
+                          'auto_increment'        => true,
+                          'primary_key'           => true,
+                          'result_introspection'  => true,
+                          'prepared_statements'   => 'emulated',
+                          );
+
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * quoteIdentifier
+     * Quote a string so it can be safely used as a table / column name
+     *
+     * Quoting style depends on which database driver is being used.
+     *
+     * @param string $identifier    identifier name to be quoted
+     * @param bool   $checkOption   check the 'quote_identifier' option
+     *
+     * @return string  quoted identifier string
+     */
+    public function quoteIdentifier($identifier, $checkOption = false)
+    {
+        if ($checkOption && ! $this->getAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER)) {
+            return $identifier;
+        }
+        return '[' . str_replace(']', ']]', $identifier) . ']';
+    }
+    /**
+     * Adds an adapter-specific LIMIT clause to the SELECT statement.
+     * [ borrowed from Zend Framework ]
+     *
+     * @param string $query
+     * @param mixed $limit
+     * @param mixed $offset
+     * @link http://lists.bestpractical.com/pipermail/rt-devel/2005-June/007339.html
+     * @return string
+     */
+    public function modifyLimitQuery($query, $limit, $offset, $isManip = false)
+    {
+        if ($limit > 0) {
+            $count = intval($limit);
+
+            $offset = intval($offset);
+            if ($offset < 0) {
+                throw new Doctrine_Connection_Exception("LIMIT argument offset=$offset is not valid");
+            }
+    
+            $orderby = stristr($query, 'ORDER BY');
+            if ($orderby !== false) {
+                $sort = (stripos($orderby, 'desc') !== false) ? 'desc' : 'asc';
+                $order = str_ireplace('ORDER BY', '', $orderby);
+                $order = trim(preg_replace('/ASC|DESC/i', '', $order));
+            }
+    
+            $query = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $query);
+    
+            $query = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $query . ') AS inner_tbl';
+            if ($orderby !== false) {
+                $query .= ' ORDER BY ' . $order . ' ';
+                $query .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
+            }
+            $query .= ') AS outer_tbl';
+            if ($orderby !== false) {
+                $query .= ' ORDER BY ' . $order . ' ' . $sort;
+            }
+    
+            return $query;
+
+        }
+
+        return $query;
+    }
+    /**
+     * return version information about the server
+     *
+     * @param bool   $native  determines if the raw version string should be returned
+     * @return mixed array/string with version information or MDB2 error object
+     */
+    public function getServerVersion($native = false)
+    {
+        if ($this->serverInfo) {
+            $serverInfo = $this->serverInfo;
+        } else {
+            $query      = 'SELECT @@VERSION';
+            $serverInfo = $this->fetchOne($query);
+        }
+        // cache server_info
+        $this->serverInfo = $serverInfo;
+        if ( ! $native) {
+            if (preg_match('/([0-9]+)\.([0-9]+)\.([0-9]+)/', $serverInfo, $tmp)) {
+                $serverInfo = array(
+                    'major' => $tmp[1],
+                    'minor' => $tmp[2],
+                    'patch' => $tmp[3],
+                    'extra' => null,
+                    'native' => $serverInfo,
+                );
+            } else {
+                $serverInfo = array(
+                    'major' => null,
+                    'minor' => null,
+                    'patch' => null,
+                    'extra' => null,
+                    'native' => $serverInfo,
+                );
+            }
+        }
+        return $serverInfo;
+    }
+    /**
+     * Checks if there's a sequence that exists.
+     *
+     * @param  string $seq_name     The sequence name to verify.
+     * @return boolean              The value if the table exists or not
+     */
+    public function checkSequence($seqName)
+    {
+        $query = 'SELECT * FROM ' . $seqName;
+        try {
+            $this->exec($query);
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                return false;
+            }
+
+            throw $e;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..920b4bc48324b55c8076c5935a2af86b34c6b53d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mssql/Exception.php
@@ -0,0 +1,74 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Mssql_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ */
+class Doctrine_Connection_Mssql_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorCodeMap         an array that is used for determining portable
+     *                                  error code from a native database error code
+     */
+    protected static $errorCodeMap = array(
+                                      110   => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                      155   => Doctrine::ERR_NOSUCHFIELD,
+                                      170   => Doctrine::ERR_SYNTAX,
+                                      207   => Doctrine::ERR_NOSUCHFIELD,
+                                      208   => Doctrine::ERR_NOSUCHTABLE,
+                                      245   => Doctrine::ERR_INVALID_NUMBER,
+                                      515   => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                      547   => Doctrine::ERR_CONSTRAINT,
+                                      1913  => Doctrine::ERR_ALREADY_EXISTS,
+                                      2627  => Doctrine::ERR_CONSTRAINT,
+                                      2714  => Doctrine::ERR_ALREADY_EXISTS,
+                                      3701  => Doctrine::ERR_NOSUCHTABLE,
+                                      8134  => Doctrine::ERR_DIVZERO,
+                                      );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to $portableCode field
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @return boolean              whether or not the error info processing was successfull
+     *                              (the process is successfull if portable error code was found)
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+        $code = $errorInfo[1];
+        if (isset(self::$errorCodeMap[$code])) {
+            $this->portableCode = self::$errorCodeMap[$code];
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..974614dcf0a958d9f96be1efda9d9270084ffe24
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql.php
@@ -0,0 +1,207 @@
+<?php
+/*
+ *  $Id: Mysql.php 1773 2007-06-19 23:33:04Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Common');
+/**
+ * Doctrine_Connection_Mysql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1773 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Mysql extends Doctrine_Connection_Common
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Mysql';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO|Doctrine_Adapter $adapter     database handler
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+        $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
+        $this->setAttribute(Doctrine::ATTR_DEFAULT_TABLE_TYPE, 'INNODB');
+
+        $this->supported = array(
+                          'sequences'            => 'emulated',
+                          'indexes'              => true,
+                          'affected_rows'        => true,
+                          'transactions'         => true,
+                          'savepoints'           => false,
+                          'summary_functions'    => true,
+                          'order_by_text'        => true,
+                          'current_id'           => 'emulated',
+                          'limit_queries'        => true,
+                          'LOBs'                 => true,
+                          'replace'              => true,
+                          'sub_selects'          => true,
+                          'auto_increment'       => true,
+                          'primary_key'          => true,
+                          'result_introspection' => true,
+                          'prepared_statements'  => 'emulated',
+                          'identifier_quoting'   => true,
+                          'pattern_escaping'     => true
+                          );
+
+        $this->properties['string_quoting'] = array('start' => "'",
+                                                    'end' => "'",
+                                                    'escape' => '\\',
+                                                    'escape_pattern' => '\\');
+
+        $this->properties['identifier_quoting'] = array('start' => '`',
+                                                        'end' => '`',
+                                                        'escape' => '`');
+
+        $this->properties['sql_comments'] = array(
+                                            array('start' => '-- ', 'end' => "\n", 'escape' => false),
+                                            array('start' => '#', 'end' => "\n", 'escape' => false),
+                                            array('start' => '/*', 'end' => '*/', 'escape' => false),
+                                            );
+
+        $this->properties['varchar_max_length'] = 255;
+
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * Set the charset on the current connection
+     *
+     * @param string    charset
+     *
+     * @return void
+     */
+    public function setCharset($charset)
+    {
+        $query = 'SET NAMES '.$this->dbh->quote($charset);
+        $this->exec($query);
+    }
+    /**
+     * Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT
+     * query, except that if there is already a row in the table with the same
+     * key field values, the REPLACE query just updates its values instead of
+     * inserting a new row.
+     *
+     * The REPLACE type of query does not make part of the SQL standards. Since
+     * practically only MySQL implements it natively, this type of query is
+     * emulated through this method for other DBMS using standard types of
+     * queries inside a transaction to assure the atomicity of the operation.
+     *
+     * @access public
+     *
+     * @param string $table name of the table on which the REPLACE query will
+     *  be executed.
+     * @param array $fields associative array that describes the fields and the
+     *  values that will be inserted or updated in the specified table. The
+     *  indexes of the array are the names of all the fields of the table. The
+     *  values of the array are also associative arrays that describe the
+     *  values and other properties of the table fields.
+     *
+     *  Here follows a list of field properties that need to be specified:
+     *
+     *    value:
+     *          Value to be assigned to the specified field. This value may be
+     *          of specified in database independent type format as this
+     *          function can perform the necessary datatype conversions.
+     *
+     *    Default:
+     *          this property is required unless the Null property
+     *          is set to 1.
+     *
+     *    type
+     *          Name of the type of the field. Currently, all types Metabase
+     *          are supported except for clob and blob.
+     *
+     *    Default: no type conversion
+     *
+     *    null
+     *          Boolean property that indicates that the value for this field
+     *          should be set to null.
+     *
+     *          The default value for fields missing in INSERT queries may be
+     *          specified the definition of a table. Often, the default value
+     *          is already null, but since the REPLACE may be emulated using
+     *          an UPDATE query, make sure that all fields of the table are
+     *          listed in this function argument array.
+     *
+     *    Default: 0
+     *
+     *    key
+     *          Boolean property that indicates that this field should be
+     *          handled as a primary key or at least as part of the compound
+     *          unique index of the table that will determine the row that will
+     *          updated if it exists or inserted a new row otherwise.
+     *
+     *          This function will fail if no key field is specified or if the
+     *          value of a key field is set to null because fields that are
+     *          part of unique index they may not be null.
+     *
+     *    Default: 0
+     *
+     * @return integer      the number of affected rows
+     */
+    public function replace($table, array $fields, array $keys)
+    {
+        $count = count($fields);
+        $query = $values = '';
+        $keys = $colnum = 0;
+
+        for (reset($fields); $colnum < $count; next($fields), $colnum++) {
+            $name = key($fields);
+
+            if ($colnum > 0) {
+                $query .= ',';
+                $values.= ',';
+            }
+
+            $query .= $name;
+
+            if (isset($fields[$name]['null']) && $fields[$name]['null']) {
+                $value = 'NULL';
+            } else {
+                $type = isset($fields[$name]['type']) ? $fields[$name]['type'] : null;
+                $value = $this->quote($fields[$name]['value'], $type);
+            }
+
+            $values .= $value;
+
+            if (isset($fields[$name]['key']) && $fields[$name]['key']) {
+                if ($value === 'NULL') {
+                    throw new Doctrine_Connection_Mysql_Exception('key value '.$name.' may not be NULL');
+                }
+                $keys++;
+            }
+        }
+
+        if ($keys == 0) {
+            throw new Doctrine_Connection_Mysql_Exception('not specified which fields are keys');
+        }
+        $query = 'REPLACE INTO ' . $table . ' (' . $query . ') VALUES (' . $values . ')';
+
+        return $this->exec($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..b581801f8d4feb1edc4297b507686c7549aec947
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Mysql/Exception.php
@@ -0,0 +1,84 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Mysql_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ */
+class Doctrine_Connection_Mysql_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorCodeMap         an array that is used for determining portable
+     *                                  error code from a native database error code
+     */
+    protected static $errorCodeMap = array(
+                                      1004 => Doctrine::ERR_CANNOT_CREATE,
+                                      1005 => Doctrine::ERR_CANNOT_CREATE,
+                                      1006 => Doctrine::ERR_CANNOT_CREATE,
+                                      1007 => Doctrine::ERR_ALREADY_EXISTS,
+                                      1008 => Doctrine::ERR_CANNOT_DROP,
+                                      1022 => Doctrine::ERR_ALREADY_EXISTS,
+                                      1044 => Doctrine::ERR_ACCESS_VIOLATION,
+                                      1046 => Doctrine::ERR_NODBSELECTED,
+                                      1048 => Doctrine::ERR_CONSTRAINT,
+                                      1049 => Doctrine::ERR_NOSUCHDB,
+                                      1050 => Doctrine::ERR_ALREADY_EXISTS,
+                                      1051 => Doctrine::ERR_NOSUCHTABLE,
+                                      1054 => Doctrine::ERR_NOSUCHFIELD,
+                                      1061 => Doctrine::ERR_ALREADY_EXISTS,
+                                      1062 => Doctrine::ERR_ALREADY_EXISTS,
+                                      1064 => Doctrine::ERR_SYNTAX,
+                                      1091 => Doctrine::ERR_NOT_FOUND,
+                                      1100 => Doctrine::ERR_NOT_LOCKED,
+                                      1136 => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                      1142 => Doctrine::ERR_ACCESS_VIOLATION,
+                                      1146 => Doctrine::ERR_NOSUCHTABLE,
+                                      1216 => Doctrine::ERR_CONSTRAINT,
+                                      1217 => Doctrine::ERR_CONSTRAINT,
+                                      );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to $portableCode field
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @return boolean              whether or not the error info processing was successfull
+     *                              (the process is successfull if portable error code was found)
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+        $code = $errorInfo[1];
+        if (isset(self::$errorCodeMap[$code])) {
+            $this->portableCode = self::$errorCodeMap[$code];
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..bcbb36899a0dc46d60137b67f94471f4cc730905
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle.php
@@ -0,0 +1,116 @@
+<?php
+/*
+ *  $Id: Oracle.php 1798 2007-06-24 21:05:12Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection');
+/**
+ * Doctrine_Connection_Oracle
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1798 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Oracle extends Doctrine_Connection
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Oracle';
+
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+        $this->supported = array(
+                          'sequences'            => true,
+                          'indexes'              => true,
+                          'summary_functions'    => true,
+                          'order_by_text'        => true,
+                          'current_id'           => true,
+                          'affected_rows'        => true,
+                          'transactions'         => true,
+                          'savepoints'           => true,
+                          'limit_queries'        => true,
+                          'LOBs'                 => true,
+                          'replace'              => 'emulated',
+                          'sub_selects'          => true,
+                          'auto_increment'       => false, // implementation is broken
+                          'primary_key'          => true,
+                          'result_introspection' => true,
+                          'prepared_statements'  => true,
+                          'identifier_quoting'   => true,
+                          'pattern_escaping'     => true,
+                          );
+        /**
+        $this->options['DBA_username'] = false;
+        $this->options['DBA_password'] = false;
+        $this->options['database_name_prefix'] = false;
+        $this->options['emulate_database'] = true;
+        $this->options['default_tablespace'] = false;
+        $this->options['default_text_field_length'] = 2000;
+        $this->options['result_prefetching'] = false;
+        */
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * Sets up the date/time format
+     *
+     */
+    public function setDateFormat($format = 'YYYY-MM-DD HH24:MI:SS')
+    {
+      $this->exec('ALTER SESSION SET NLS_DATE_FORMAT = "' . $format . '"');
+    }
+    /**
+     * Adds an driver-specific LIMIT clause to the query
+     *
+     * @param string $query         query to modify
+     * @param integer $limit        limit the number of rows
+     * @param integer $offset       start reading from given offset
+     * @return string               the modified query
+     */
+    public function modifyLimitQuery($query, $limit, $offset)
+    {
+        /**
+        $e      = explode("select ",strtolower($query));
+        $e2     = explode(" from ",$e[1]);
+        $fields = $e2[0];
+        */
+        $limit = (int) $limit;
+        $offset = (int) $offset;
+        if (preg_match('/^\s*SELECT/i', $query)) {
+            if ( ! preg_match('/\sFROM\s/i', $query)) {
+                $query .= " FROM dual";
+            }
+            if ($limit > 0) {
+                // taken from http://svn.ez.no/svn/ezcomponents/packages/Database
+                $max = $offset + $limit;
+                if ($offset > 0) {
+                    $min = $offset + 1;
+                    $query = 'SELECT * FROM (SELECT a.*, ROWNUM dctrn_rownum FROM (' . $query
+                           . ') a WHERE ROWNUM <= ' . $max . ') WHERE dctrn_rownum >= ' . $min;
+                } else {
+                    $query = 'SELECT a.* FROM (' . $query .') a WHERE ROWNUM <= ' . $max;
+                }
+            }
+        }
+        return $query;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..71f3029ef5eb780d6ba86f31d60044cc3e100b26
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Oracle/Exception.php
@@ -0,0 +1,79 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Oracle_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ */
+class Doctrine_Connection_Oracle_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorCodeMap         an array that is used for determining portable
+     *                                  error code from a native database error code
+     */
+    protected static $errorCodeMap = array(
+                                      1    => Doctrine::ERR_CONSTRAINT,
+                                      900  => Doctrine::ERR_SYNTAX,
+                                      904  => Doctrine::ERR_NOSUCHFIELD,
+                                      913  => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                      921  => Doctrine::ERR_SYNTAX,
+                                      923  => Doctrine::ERR_SYNTAX,
+                                      942  => Doctrine::ERR_NOSUCHTABLE,
+                                      955  => Doctrine::ERR_ALREADY_EXISTS,
+                                      1400 => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                      1401 => Doctrine::ERR_INVALID,
+                                      1407 => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                      1418 => Doctrine::ERR_NOT_FOUND,
+                                      1476 => Doctrine::ERR_DIVZERO,
+                                      1722 => Doctrine::ERR_INVALID_NUMBER,
+                                      2289 => Doctrine::ERR_NOSUCHTABLE,
+                                      2291 => Doctrine::ERR_CONSTRAINT,
+                                      2292 => Doctrine::ERR_CONSTRAINT,
+                                      2449 => Doctrine::ERR_CONSTRAINT,
+                                      );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to $portableCode field
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @return boolean              whether or not the error info processing was successfull
+     *                              (the process is successfull if portable error code was found)
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+        $code = $errorInfo[1];
+        if (isset(self::$errorCodeMap[$code])) {
+            $this->portableCode = self::$errorCodeMap[$code];
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..46d29dfbcde096a0006e670136abf72958852708
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql.php
@@ -0,0 +1,190 @@
+<?php
+/*
+ *  $Id: Pgsql.php 2113 2007-07-31 05:50:41Z lukenukem $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload("Doctrine_Connection_Common");
+/**
+ * Doctrine_Connection_Pgsql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 2113 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Pgsql extends Doctrine_Connection_Common
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Pgsql';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO $pdo                          database handle
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+        // initialize all driver options
+        $this->supported = array(
+                          'sequences'               => true,
+                          'indexes'                 => true,
+                          'affected_rows'           => true,
+                          'summary_functions'       => true,
+                          'order_by_text'           => true,
+                          'transactions'            => true,
+                          'savepoints'              => true,
+                          'current_id'              => true,
+                          'limit_queries'           => true,
+                          'LOBs'                    => true,
+                          'replace'                 => 'emulated',
+                          'sub_selects'             => true,
+                          'auto_increment'          => 'emulated',
+                          'primary_key'             => true,
+                          'result_introspection'    => true,
+                          'prepared_statements'     => true,
+                          'identifier_quoting'      => true,
+                          'pattern_escaping'        => true,
+                          );
+
+        $this->properties['string_quoting'] = array('start' => "'",
+                                                    'end' => "'",
+                                                    'escape' => "'",
+                                                    'escape_pattern' => '\\');
+
+        $this->properties['identifier_quoting'] = array('start' => '"',
+                                                        'end' => '"',
+                                                        'escape' => '"');
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * Set the charset on the current connection
+     *
+     * @param string    charset
+     *
+     * @return void
+     */
+    public function setCharset($charset)
+    {
+        $query = 'SET NAMES '.$this->dbh->quote($charset);
+        $this->exec($query);
+    }
+    /**
+     * convertBoolean
+     * some drivers need the boolean values to be converted into integers
+     * when using DQL API
+     *
+     * This method takes care of that conversion
+     *
+     * @param array $item
+     * @return void
+     */
+    public function convertBooleans($item)
+    {
+    	if (is_array($item)) {
+            foreach ($item as $key => $value) {
+                if (is_bool($value)) {
+                    $item[$key] = ($value) ? 'true' : 'false';
+                }
+            }
+    	} else {
+    	   if (is_bool($item)) {
+    	       $item = ($item) ? 'true' : 'false';
+    	   }
+    	}
+        return $item;
+    }
+    /**
+     * Changes a query string for various DBMS specific reasons
+     *
+     * @param string $query         query to modify
+     * @param integer $limit        limit the number of rows
+     * @param integer $offset       start reading from given offset
+     * @param boolean $isManip      if the query is a DML query
+     * @return string               modified query
+     */
+    public function modifyLimitQuery($query, $limit = false, $offset = false, $isManip = false)
+    {
+        if ($limit > 0) {
+            $query = rtrim($query);
+
+            if (substr($query, -1) == ';') {
+                $query = substr($query, 0, -1);
+            }
+
+            if ($isManip) {
+                $manip = preg_replace('/^(DELETE FROM|UPDATE).*$/', '\\1', $query);
+                $from  = $match[2];
+                $where = $match[3];
+                $query = $manip . ' ' . $from . ' WHERE ctid=(SELECT ctid FROM '
+                       . $from . ' ' . $where . ' LIMIT ' . $limit . ')';
+
+            } else {
+                if ( ! empty($limit)) {
+                  $query .= ' LIMIT ' . $limit;
+                }
+                if ( ! empty($offset)) {
+                  $query .= ' OFFSET ' . $offset;
+                }
+            }
+        }
+        return $query;
+    }
+    /**
+     * return version information about the server
+     *
+     * @param string $native    determines if the raw version string should be returned
+     * @return array|string     an array or string with version information
+     */
+    public function getServerVersion($native = false)
+    {
+        $query = 'SHOW SERVER_VERSION';
+
+        $serverInfo = $this->fetchOne($query);
+
+        if ( ! $native) {
+            $tmp = explode('.', $serverInfo, 3);
+
+            if (empty($tmp[2]) && isset($tmp[1])
+                && preg_match('/(\d+)(.*)/', $tmp[1], $tmp2)
+            ) {
+                $serverInfo = array(
+                    'major' => $tmp[0],
+                    'minor' => $tmp2[1],
+                    'patch' => null,
+                    'extra' => $tmp2[2],
+                    'native' => $serverInfo,
+                );
+            } else {
+                $serverInfo = array(
+                    'major' => isset($tmp[0]) ? $tmp[0] : null,
+                    'minor' => isset($tmp[1]) ? $tmp[1] : null,
+                    'patch' => isset($tmp[2]) ? $tmp[2] : null,
+                    'extra' => null,
+                    'native' => $serverInfo,
+                );
+            }
+        }
+        return $serverInfo;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..4039ea7cc1b58265439cfc6410d1669813c16460
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Pgsql/Exception.php
@@ -0,0 +1,107 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Pgsql_Exception
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Paul Cooper <pgc@ucecom.com> (PEAR MDB2 Pgsql driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Connection_Pgsql_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorRegexps         an array that is used for determining portable
+     *                                  error code from a native database error message
+     */
+    protected static $errorRegexps = array(
+                                    '/parser: parse error at or near/i'
+                                        => Doctrine::ERR_SYNTAX,
+                                    '/syntax error at/'
+                                        => Doctrine::ERR_SYNTAX,
+                                    '/column reference .* is ambiguous/i'
+                                        => Doctrine::ERR_SYNTAX,
+                                    '/column .* (of relation .*)?does not exist/i'
+                                        => Doctrine::ERR_NOSUCHFIELD,
+                                    '/attribute .* not found|relation .* does not have attribute/i'
+                                        => Doctrine::ERR_NOSUCHFIELD,
+                                    '/column .* specified in USING clause does not exist in (left|right) table/i'
+                                        => Doctrine::ERR_NOSUCHFIELD,
+                                    '/(relation|sequence|table).*does not exist|class .* not found/i'
+                                        => Doctrine::ERR_NOSUCHTABLE,
+                                    '/index .* does not exist/'
+                                        => Doctrine::ERR_NOT_FOUND,
+                                    '/relation .* already exists/i'
+                                        => Doctrine::ERR_ALREADY_EXISTS,
+                                    '/(divide|division) by zero$/i'
+                                        => Doctrine::ERR_DIVZERO,
+                                    '/pg_atoi: error in .*: can\'t parse /i'
+                                        => Doctrine::ERR_INVALID_NUMBER,
+                                    '/invalid input syntax for( type)? (integer|numeric)/i'
+                                        => Doctrine::ERR_INVALID_NUMBER,
+                                    '/value .* is out of range for type \w*int/i'
+                                        => Doctrine::ERR_INVALID_NUMBER,
+                                    '/integer out of range/i'
+                                        => Doctrine::ERR_INVALID_NUMBER,
+                                    '/value too long for type character/i'
+                                        => Doctrine::ERR_INVALID,
+                                    '/permission denied/'
+                                        => Doctrine::ERR_ACCESS_VIOLATION,
+                                    '/violates [\w ]+ constraint/'
+                                        => Doctrine::ERR_CONSTRAINT,
+                                    '/referential integrity violation/'
+                                        => Doctrine::ERR_CONSTRAINT,
+                                    '/violates not-null constraint/'
+                                        => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                                    '/more expressions than target columns/i'
+                                        => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                                );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to $portableCode field
+     *
+     * the portable error code is added at the end of array
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @see Doctrine::ERR_* constants
+     * @see Doctrine_Connection::$portableCode
+     * @return boolean              whether or not the error info processing was successfull
+     *                              (the process is successfull if portable error code was found)
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+        foreach (self::$errorRegexps as $regexp => $code) {
+            if (preg_match($regexp, $errorInfo[2])) {
+                $this->portableCode = $code;
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e147df1a9b3d9fcb48c5944e99d08b8a6c2ae21
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler.php
@@ -0,0 +1,174 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Overloadable');
+/**
+ * Doctrine_Connection_Profiler
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Connection_Profiler implements Doctrine_Overloadable, IteratorAggregate, Countable
+{
+    /**
+     * @param array $listeners      an array containing all availible listeners
+     */
+    private $listeners  = array('query',
+                                'prepare',
+                                'commit',
+                                'rollback',
+                                'connect',
+                                'begintransaction',
+                                'exec',
+                                'execute',
+                                );
+    /**
+     * @param array $events         an array containing all listened events
+     */
+    private $events     = array();
+    /**
+     * constructor
+     */
+    public function __construct() {
+
+    }
+    /**
+     * setFilterQueryType
+     *
+     * @param integer $filter
+     * @return boolean
+     */
+    public function setFilterQueryType() {
+                                         	
+    }                                     	
+    /**
+     * method overloader
+     * this method is used for invoking different listeners, for the full
+     * list of availible listeners, see Doctrine_EventListener
+     *
+     * @param string $m     the name of the method
+     * @param array $a      method arguments
+     * @see Doctrine_EventListener
+     * @return boolean
+     */
+    public function __call($m, $a)
+    {
+        // first argument should be an instance of Doctrine_Event
+        if ( ! ($a[0] instanceof Doctrine_Event)) {
+            throw new Doctrine_Connection_Profiler_Exception("Couldn't listen event. Event should be an instance of Doctrine_Event.");
+        }
+
+
+        if (substr($m, 0, 3) === 'pre') {
+            // pre-event listener found
+            $a[0]->start();
+
+            if( ! in_array($a[0], $this->events, true)) {
+                $this->events[] = $a[0];
+            }
+        } else {
+            // after-event listener found
+            $a[0]->end();
+        }
+        /**
+         * If filtering by query type is enabled, only keep the query if
+         * it was one of the allowed types.
+         */
+         /**
+        if ( ! is_null($this->filterTypes)) {
+            if ( ! ($a[0]->getQueryType() & $this->_filterTypes)) {
+
+            }
+        }
+        */
+
+    }
+    /**
+     * get
+     *
+     * @param mixed $key
+     * @return Doctrine_Event
+     */
+    public function get($key) 
+    {
+        if (isset($this->events[$key])) {
+            return $this->events[$key];
+        }
+        return null;
+    }
+    /**
+     * getAll
+     * returns all profiled events as an array
+     *
+     * @return array        all events in an array
+     */
+    public function getAll() 
+    {
+    	return $this->events;
+    }
+    /**
+     * getIterator
+     * returns an iterator that iterates through the logged events
+     *
+     * @return ArrayIterator
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->events);
+    }
+    /**
+     * count
+     * 
+     * @return integer
+     */
+    public function count() 
+    {
+        return count($this->events);
+    }
+    /**
+     * pop the last event from the event stack
+     *
+     * @return Doctrine_Event
+     */
+    public function pop() 
+    {
+        return array_pop($this->events);
+    }
+    /**
+     * Get the Doctrine_Event object for the last query that was run, regardless if it has
+     * ended or not. If the event has not ended, it's end time will be Null.
+     *
+     * @return Doctrine_Event
+     */
+    public function lastEvent()
+    {
+        if (empty($this->events)) {
+            return false;
+        }
+
+        end($this->events);
+        return current($this->events);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..873814ab0e818bbe1b414b0d3952284b79765693
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Profiler/Exception.php
@@ -0,0 +1,35 @@
+<?php
+/*
+ *  $Id: Exception.php 1345 2007-05-14 13:00:14Z meus $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Profiler_Exception');
+/**
+ * Doctrine_Connection_Profiler_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1345 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_Profiler_Exception extends Doctrine_Exception
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..6489a4840ca2a5ae7db2e88336619a66e7a528c3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite.php
@@ -0,0 +1,108 @@
+<?php
+/*
+ *  $Id: Sqlite.php 2271 2007-08-25 00:14:14Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload("Doctrine_Connection_Common");
+/**
+ * Doctrine_Connection_Sqlite
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 2271 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Connection_Sqlite extends Doctrine_Connection_Common
+{
+    /**
+     * @var string $driverName                  the name of this connection driver
+     */
+    protected $driverName = 'Sqlite';
+    /**
+     * the constructor
+     *
+     * @param Doctrine_Manager $manager
+     * @param PDO $pdo                          database handle
+     */
+    public function __construct(Doctrine_Manager $manager, $adapter)
+    {
+
+        $this->supported = array(
+                          'sequences'            => 'emulated',
+                          'indexes'              => true,
+                          'affected_rows'        => true,
+                          'summary_functions'    => true,
+                          'order_by_text'        => true,
+                          'current_id'           => 'emulated',
+                          'limit_queries'        => true,
+                          'LOBs'                 => true,
+                          'replace'              => true,
+                          'transactions'         => true,
+                          'savepoints'           => false,
+                          'sub_selects'          => true,
+                          'auto_increment'       => true,
+                          'primary_key'          => true,
+                          'result_introspection' => false, // not implemented
+                          'prepared_statements'  => 'emulated',
+                          'identifier_quoting'   => true,
+                          'pattern_escaping'     => false,
+                          );
+        /**
+        $this->options['base_transaction_name'] = '___php_Doctrine_sqlite_auto_commit_off';
+        $this->options['fixed_float'] = 0;
+        $this->options['database_path'] = '';
+        $this->options['database_extension'] = '';
+        $this->options['server_version'] = '';
+        */
+        parent::__construct($manager, $adapter);
+    }
+    /**
+     * initializes database functions missing in sqlite
+     *
+     * @see Doctrine_Expression
+     * @return void
+     */
+    public function connect() 
+    {
+        parent::connect();
+
+        $this->dbh->sqliteCreateFunction('mod',    array('Doctrine_Expression_Sqlite', 'modImpl'), 2);
+        $this->dbh->sqliteCreateFunction('concat', array('Doctrine_Expression_Sqlite', 'concatImpl'));
+        $this->dbh->sqliteCreateFunction('md5', 'md5', 1);
+        $this->dbh->sqliteCreateFunction('sha1', 'sha1', 1);
+        $this->dbh->sqliteCreateFunction('locate', 'strpos', 2);
+        $this->dbh->sqliteCreateFunction('rtrim', 'rtrim', 1);
+        $this->dbh->sqliteCreateFunction('ltrim', 'ltrim', 1);
+        $this->dbh->sqliteCreateFunction('trim', 'trim', 1);
+        $this->dbh->sqliteCreateFunction('now', 'time', 0);
+    }
+    /**
+     * getDatabaseFile
+     *
+     * @param string $name      the name of the database
+     * @return string
+     */
+    public function getDatabaseFile($name)
+    {
+        return $name . '.db';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0fe5957ff95678d9d1881216bedc6a70a4c13b7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Sqlite/Exception.php
@@ -0,0 +1,77 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Exception');
+/**
+ * Doctrine_Connection_Sqlite_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ */
+class Doctrine_Connection_Sqlite_Exception extends Doctrine_Connection_Exception
+{
+    /**
+     * @var array $errorRegexps         an array that is used for determining portable
+     *                                  error code from a native database error message
+     */
+    protected static $errorRegexps = array(
+                              '/^no such table:/'                    => Doctrine::ERR_NOSUCHTABLE,
+                              '/^no such index:/'                    => Doctrine::ERR_NOT_FOUND,
+                              '/^(table|index) .* already exists$/'  => Doctrine::ERR_ALREADY_EXISTS,
+                              '/PRIMARY KEY must be unique/i'        => Doctrine::ERR_CONSTRAINT,
+                              '/is not unique/'                      => Doctrine::ERR_CONSTRAINT,
+                              '/columns .* are not unique/i'         => Doctrine::ERR_CONSTRAINT,
+                              '/uniqueness constraint failed/'       => Doctrine::ERR_CONSTRAINT,
+                              '/may not be NULL/'                    => Doctrine::ERR_CONSTRAINT_NOT_NULL,
+                              '/^no such column:/'                   => Doctrine::ERR_NOSUCHFIELD,
+                              '/column not present in both tables/i' => Doctrine::ERR_NOSUCHFIELD,
+                              '/^near ".*": syntax error$/'          => Doctrine::ERR_SYNTAX,
+                              '/[0-9]+ values for [0-9]+ columns/i'  => Doctrine::ERR_VALUE_COUNT_ON_ROW,
+                              );
+    /**
+     * This method checks if native error code/message can be
+     * converted into a portable code and then adds this
+     * portable error code to $portableCode field
+     *
+     * @param array $errorInfo      error info array
+     * @since 1.0
+     * @see Doctrine::ERR_* constants
+     * @see Doctrine_Connection::$portableCode
+     * @return boolean              whether or not the error info processing was successfull
+     *                              (the process is successfull if portable error code was found)
+     */
+    public function processErrorInfo(array $errorInfo)
+    {
+        foreach (self::$errorRegexps as $regexp => $code) {
+            if (preg_match($regexp, $errorInfo[2])) {
+
+                $this->portableCode = $code;
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Statement.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Statement.php
new file mode 100644
index 0000000000000000000000000000000000000000..4528d980a55ac56cea7b74da5c013d78e23fa01f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/Statement.php
@@ -0,0 +1,438 @@
+<?php
+/*
+ *  $Id: Statement.php 1532 2007-05-31 17:45:07Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Adapter_Statement_Interface');
+/**
+ * Doctrine_Connection_Statement
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1532 $
+ */
+class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interface
+{
+    /**
+     * @var Doctrine_Connection $conn       Doctrine_Connection object, every connection
+     *                                      statement holds an instance of Doctrine_Connection
+     */
+    protected $_conn;
+    /**
+     * @var mixed $_stmt                    PDOStatement object, boolean false or Doctrine_Adapter_Statement object
+     */
+    protected $_stmt;
+    /**
+     * constructor
+     *
+     * @param Doctrine_Connection $conn     Doctrine_Connection object, every connection
+     *                                      statement holds an instance of Doctrine_Connection
+     * @param mixed $stmt
+     */
+    public function __construct(Doctrine_Connection $conn, $stmt)
+    {
+        $this->_conn = $conn;
+        $this->_stmt = $stmt;
+
+        if ($stmt === false) {
+            throw new Doctrine_Exception('Unknown statement object given.');
+        }
+    }
+    /**
+     * getConnection
+     * returns the connection object this statement uses
+     *
+     * @return Doctrine_Connection
+     */
+    public function getConnection()
+    {
+        return $this->_conn;
+    }
+    public function getStatement()
+    {
+        return $this->_stmt;
+    }
+    public function getQuery()
+    {
+        return $this->_stmt->queryString;
+    }
+    /**
+     * bindColumn
+     * Bind a column to a PHP variable
+     *
+     * @param mixed $column         Number of the column (1-indexed) or name of the column in the result set.
+     *                              If using the column name, be aware that the name should match
+     *                              the case of the column, as returned by the driver.
+     *
+     * @param string $param         Name of the PHP variable to which the column will be bound.
+     * @param integer $type         Data type of the parameter, specified by the Doctrine::PARAM_* constants.
+     * @return boolean              Returns TRUE on success or FALSE on failure
+     */
+    public function bindColumn($column, $param, $type = null)
+    {
+        if($type === null) {
+            return $this->_stmt->bindColumn($column, $param);
+        } else {
+            return $this->_stmt->bindColumn($column, $param, $type);
+        }
+    }
+    /**
+     * bindValue
+     * Binds a value to a corresponding named or question mark
+     * placeholder in the SQL statement that was use to prepare the statement.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $value          The value to bind to the parameter.
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindValue($param, $value, $type = null)
+    {
+        if($type === null) {
+            return $this->_stmt->bindValue($param, $value);
+        } else {
+            return $this->_stmt->bindValue($param, $value, $type);
+        }
+    }
+    /**
+     * bindParam
+     * Binds a PHP variable to a corresponding named or question mark placeholder in the
+     * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+     * the variable is bound as a reference and will only be evaluated at the time
+     * that Doctrine_Adapter_Statement_Interface->execute() is called.
+     *
+     * Most parameters are input parameters, that is, parameters that are
+     * used in a read-only fashion to build up the query. Some drivers support the invocation
+     * of stored procedures that return data as output parameters, and some also as input/output
+     * parameters that both send in data and are updated to receive it.
+     *
+     * @param mixed $param          Parameter identifier. For a prepared statement using named placeholders,
+     *                              this will be a parameter name of the form :name. For a prepared statement
+     *                              using question mark placeholders, this will be the 1-indexed position of the parameter
+     *
+     * @param mixed $variable       Name of the PHP variable to bind to the SQL statement parameter.
+     *
+     * @param integer $type         Explicit data type for the parameter using the Doctrine::PARAM_* constants. To return
+     *                              an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+     *                              Doctrine::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+     *
+     * @param integer $length       Length of the data type. To indicate that a parameter is an OUT parameter
+     *                              from a stored procedure, you must explicitly set the length.
+     * @param mixed $driverOptions
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function bindParam($column, $variable, $type = null, $length = null, $driverOptions = array())
+    {
+        if($type === null) {
+            return $this->_stmt->bindParam($column, $variable);
+        } else {
+            return $this->_stmt->bindParam($column, $variable, $type, $length, $driverOptions);
+        }
+    }
+    /**
+     * closeCursor
+     * Closes the cursor, enabling the statement to be executed again.
+     *
+     * @return boolean              Returns TRUE on success or FALSE on failure.
+     */
+    public function closeCursor()
+    {
+        return $this->_stmt->closeCursor();
+    }
+    /**
+     * columnCount
+     * Returns the number of columns in the result set
+     *
+     * @return integer              Returns the number of columns in the result set represented
+     *                              by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+     *                              this method should return 0.
+     */
+    public function columnCount()
+    {
+        return $this->_stmt->columnCount();
+    }
+    /**
+     * errorCode
+     * Fetch the SQLSTATE associated with the last operation on the statement handle
+     *
+     * @see Doctrine_Adapter_Interface::errorCode()
+     * @return string       error code string
+     */
+    public function errorCode()
+    {
+        return $this->_stmt->errorCode();
+    }
+    /**
+     * errorInfo
+     * Fetch extended error information associated with the last operation on the statement handle
+     *
+     * @see Doctrine_Adapter_Interface::errorInfo()
+     * @return array        error info array
+     */
+    public function errorInfo()
+    {
+        return $this->_stmt->errorInfo();
+    }
+    /**
+     * execute
+     * Executes a prepared statement
+     *
+     * If the prepared statement included parameter markers, you must either:
+     * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+     * bound variables pass their value as input and receive the output value,
+     * if any, of their associated parameter markers or pass an array of input-only
+     * parameter values
+     *
+     *
+     * @param array $params             An array of values with as many elements as there are
+     *                                  bound parameters in the SQL statement being executed.
+     * @return boolean                  Returns TRUE on success or FALSE on failure.
+     */
+    public function execute($params = null)
+    {
+        try {
+            $event = new Doctrine_Event($this, Doctrine_Event::STMT_EXECUTE, $this->getQuery(), $params);
+            $this->_conn->getListener()->preStmtExecute($event);
+
+            $result = true;
+            if ( ! $event->skipOperation) {
+                $result = $this->_stmt->execute($params);
+                $this->_conn->incrementQueryCount();
+            }
+
+            $this->_conn->getListener()->postStmtExecute($event);
+
+            return $result;
+        } catch (PDOException $e) {
+        } catch (Doctrine_Adapter_Exception $e) {
+        }
+
+        $this->_conn->rethrowException($e, $this);
+
+        return false;
+    }
+    /**
+     * fetch
+     *
+     * @see Doctrine::FETCH_* constants
+     * @param integer $fetchStyle           Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $cursorOrientation    For a PDOStatement object representing a scrollable cursor,
+     *                                      this value determines which row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_ORI_* constants, defaulting to
+     *                                      Doctrine::FETCH_ORI_NEXT. To request a scrollable cursor for your
+     *                                      Doctrine_Adapter_Statement_Interface object,
+     *                                      you must set the Doctrine::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
+     *                                      prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+     *
+     * @param integer $cursorOffset         For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+     *                                      $cursorOrientation parameter is set to Doctrine::FETCH_ORI_ABS, this value specifies
+     *                                      the absolute number of the row in the result set that shall be fetched.
+     *
+     *                                      For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for
+     *                                      which the $cursorOrientation parameter is set to Doctrine::FETCH_ORI_REL, this value
+     *                                      specifies the row to fetch relative to the cursor position before
+     *                                      Doctrine_Adapter_Statement_Interface->fetch() was called.
+     *
+     * @return mixed
+     */
+    public function fetch($fetchMode = Doctrine::FETCH_BOTH,
+                          $cursorOrientation = Doctrine::FETCH_ORI_NEXT,
+                          $cursorOffset = null)
+    {
+        $event = new Doctrine_Event($this, Doctrine_Event::STMT_FETCH, $this->getQuery());
+
+        $event->fetchMode = $fetchMode;
+        $event->cursorOrientation = $cursorOrientation;
+        $event->cursorOffset = $cursorOffset;
+
+        $data = $this->_conn->getListener()->preFetch($event);
+
+        if ( ! $event->skipOperation) {
+            $data = $this->_stmt->fetch($fetchMode, $cursorOrientation, $cursorOffset);
+        }
+
+        $this->_conn->getListener()->postFetch($event);
+
+        return $data;
+    }
+    /**
+     * fetchAll
+     * Returns an array containing all of the result set rows
+     *
+     * @param integer $fetchMode            Controls how the next row will be returned to the caller.
+     *                                      This value must be one of the Doctrine::FETCH_* constants,
+     *                                      defaulting to Doctrine::FETCH_BOTH
+     *
+     * @param integer $columnIndex          Returns the indicated 0-indexed column when the value of $fetchStyle is
+     *                                      Doctrine::FETCH_COLUMN. Defaults to 0.
+     *
+     * @return array
+     */
+    public function fetchAll($fetchMode = Doctrine::FETCH_BOTH,
+                             $columnIndex = null)
+    {
+        $event = new Doctrine_Event($this, Doctrine_Event::STMT_FETCHALL, $this->getQuery());
+        $event->fetchMode = $fetchMode;
+        $event->columnIndex = $columnIndex;
+
+        $this->_conn->getListener()->preFetchAll($event);
+
+        if ( ! $event->skipOperation) {
+            if ($columnIndex !== null) {
+                $data = $this->_stmt->fetchAll($fetchMode, $columnIndex);
+            } else {
+                $data = $this->_stmt->fetchAll($fetchMode);
+            }
+
+            $event->data = $data;
+        }
+
+        $this->_conn->getListener()->postFetchAll($event);
+
+        return $data;
+    }
+    /**
+     * fetchColumn
+     * Returns a single column from the next row of a
+     * result set or FALSE if there are no more rows.
+     *
+     * @param integer $columnIndex          0-indexed number of the column you wish to retrieve from the row. If no
+     *                                      value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn()
+     *                                      fetches the first column.
+     *
+     * @return string                       returns a single column in the next row of a result set.
+     */
+    public function fetchColumn($columnIndex = 0)
+    {
+        return $this->_stmt->fetchColumn($columnIndex);
+    }
+    /**
+     * fetchObject
+     * Fetches the next row and returns it as an object.
+     *
+     * Fetches the next row and returns it as an object. This function is an alternative to
+     * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine::FETCH_CLASS or Doctrine::FETCH_OBJ style.
+     *
+     * @param string $className             Name of the created class, defaults to stdClass.
+     * @param array $args                   Elements of this array are passed to the constructor.
+     *
+     * @return mixed                        an instance of the required class with property names that correspond
+     *                                      to the column names or FALSE in case of an error.
+     */
+    public function fetchObject($className = 'stdClass', $args = array())
+    {
+        return $this->_stmt->fetchObject($className, $args);
+    }
+    /**
+     * getAttribute
+     * Retrieve a statement attribute
+     *
+     * @param integer $attribute
+     * @see Doctrine::ATTR_* constants
+     * @return mixed                        the attribute value
+     */
+    public function getAttribute($attribute)
+    {
+        return $this->_stmt->getAttribute($attribute);
+    }
+    /**
+     * getColumnMeta
+     * Returns metadata for a column in a result set
+     *
+     * @param integer $column               The 0-indexed column in the result set.
+     *
+     * @return array                        Associative meta data array with the following structure:
+     *
+     *          native_type                 The PHP native type used to represent the column value.
+     *          driver:decl_                type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+     *          flags                       Any flags set for this column.
+     *          name                        The name of this column as returned by the database.
+     *          len                         The length of this column. Normally -1 for types other than floating point decimals.
+     *          precision                   The numeric precision of this column. Normally 0 for types other than floating point decimals.
+     *          pdo_type                    The type of this column as represented by the PDO::PARAM_* constants.
+     */
+    public function getColumnMeta($column)
+    {
+        return $this->_stmt->getColumnMeta($column);
+    }
+    /**
+     * nextRowset
+     * Advances to the next rowset in a multi-rowset statement handle
+     *
+     * Some database servers support stored procedures that return more than one rowset
+     * (also known as a result set). The nextRowset() method enables you to access the second
+     * and subsequent rowsets associated with a PDOStatement object. Each rowset can have a
+     * different set of columns from the preceding rowset.
+     *
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function nextRowset()
+    {
+        return $this->_stmt->nextRowset();
+    }
+    /**
+     * rowCount
+     * rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement
+     * executed by the corresponding object.
+     *
+     * If the last SQL statement executed by the associated Statement object was a SELECT statement,
+     * some databases may return the number of rows returned by that statement. However,
+     * this behaviour is not guaranteed for all databases and should not be
+     * relied on for portable applications.
+     *
+     * @return integer                      Returns the number of rows.
+     */
+    public function rowCount()
+    {
+        return $this->_stmt->rowCount();
+    }
+    /**
+     * setAttribute
+     * Set a statement attribute
+     *
+     * @param integer $attribute
+     * @param mixed $value                  the value of given attribute
+     * @return boolean                      Returns TRUE on success or FALSE on failure.
+     */
+    public function setAttribute($attribute, $value)
+    {
+        return $this->_stmt->setAttribute($attribute, $value);
+    }
+    /**
+     * setFetchMode
+     * Set the default fetch mode for this statement
+     *
+     * @param integer $mode                 The fetch mode must be one of the Doctrine::FETCH_* constants.
+     * @return boolean                      Returns 1 on success or FALSE on failure.
+     */
+    public function setFetchMode($mode, $arg1 = null, $arg2 = null)
+    {
+        return $this->_stmt->setFetchMode($mode, $arg1, $arg2);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/UnitOfWork.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/UnitOfWork.php
new file mode 100644
index 0000000000000000000000000000000000000000..469bea6b1e7121548c3f18259b6e9164e3528e83
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Connection/UnitOfWork.php
@@ -0,0 +1,541 @@
+<?php
+/*
+ *  $Id: UnitOfWork.php 2197 2007-08-10 20:35:25Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Connection_UnitOfWork
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2197 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module
+{
+    /**
+     * buildFlushTree
+     * builds a flush tree that is used in transactions
+     *
+     * The returned array has all the initialized components in
+     * 'correct' order. Basically this means that the records of those
+     * components can be saved safely in the order specified by the returned array.
+     *
+     * @param array $tables     an array of Doctrine_Table objects or component names
+     * @return array            an array of component names in flushing order
+     */
+    public function buildFlushTree(array $tables)
+    {
+        $tree = array();
+        foreach ($tables as $k => $table) {
+
+            if ( ! ($table instanceof Doctrine_Table)) {
+                $table = $this->conn->getTable($table, false);
+            }
+            $nm     = $table->getComponentName();
+
+            $index  = array_search($nm, $tree);
+
+            if ($index === false) {
+                $tree[] = $nm;
+                $index  = max(array_keys($tree));
+            }
+
+            $rels = $table->getRelations();
+
+            // group relations
+
+            foreach ($rels as $key => $rel) {
+                if ($rel instanceof Doctrine_Relation_ForeignKey) {
+                    unset($rels[$key]);
+                    array_unshift($rels, $rel);
+                }
+            }
+
+            foreach ($rels as $rel) {
+                $name   = $rel->getTable()->getComponentName();
+                $index2 = array_search($name,$tree);
+                $type   = $rel->getType();
+
+                // skip self-referenced relations
+                if ($name === $nm) {
+                    continue;
+                }
+
+                if ($rel instanceof Doctrine_Relation_ForeignKey) {
+                    if ($index2 !== false) {
+                        if ($index2 >= $index)
+                            continue;
+
+                        unset($tree[$index]);
+                        array_splice($tree,$index2,0,$nm);
+                        $index = $index2;
+                    } else {
+                        $tree[] = $name;
+                    }
+
+                } elseif ($rel instanceof Doctrine_Relation_LocalKey) {
+                    if ($index2 !== false) {
+                        if ($index2 <= $index)
+                            continue;
+
+                        unset($tree[$index2]);
+                        array_splice($tree,$index,0,$name);
+                    } else {
+                        array_unshift($tree,$name);
+                        $index++;
+                    }
+                } elseif ($rel instanceof Doctrine_Relation_Association) {
+                    $t = $rel->getAssociationFactory();
+                    $n = $t->getComponentName();
+
+                    if ($index2 !== false)
+                        unset($tree[$index2]);
+
+                    array_splice($tree, $index, 0, $name);
+                    $index++;
+
+                    $index3 = array_search($n, $tree);
+
+                    if ($index3 !== false) {
+                        if ($index3 >= $index)
+                            continue;
+
+                        unset($tree[$index]);
+                        array_splice($tree, $index3, 0, $n);
+                        $index = $index2;
+                    } else {
+                        $tree[] = $n;
+                    }
+                }
+            }
+        }
+        return array_values($tree);
+    }
+    /**
+     * saves the given record
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function saveGraph(Doctrine_Record $record)
+    {
+    	$conn = $this->getConnection();
+
+        $state = $record->state();
+        if ($state === Doctrine_Record::STATE_LOCKED) {
+            return false;
+        }
+
+        $record->state(Doctrine_Record::STATE_LOCKED);
+
+        $conn->beginTransaction();
+
+        $saveLater = $this->saveRelated($record);
+
+        $record->state($state);
+
+        if ($record->isValid()) {
+            $event = new Doctrine_Event($record, Doctrine_Event::RECORD_SAVE);
+
+            $record->preSave($event);
+    
+            $record->getTable()->getRecordListener()->preSave($event);
+
+            if ( ! $event->skipOperation) {
+                switch ($state) {
+                    case Doctrine_Record::STATE_TDIRTY:
+                        $this->insert($record);
+                        break;
+                    case Doctrine_Record::STATE_DIRTY:
+                    case Doctrine_Record::STATE_PROXY:
+                        $this->update($record);
+                        break;
+                    case Doctrine_Record::STATE_CLEAN:
+                    case Doctrine_Record::STATE_TCLEAN:
+
+                        break;
+                }
+            }
+
+            $record->getTable()->getRecordListener()->postSave($event);
+            
+            $record->postSave($event);
+        } else {
+            $conn->transaction->addInvalid($record);
+        }
+        
+        $state = $record->state();
+
+        $record->state(Doctrine_Record::STATE_LOCKED);
+
+        foreach ($saveLater as $fk) {
+            $alias = $fk->getAlias();
+
+            if ($record->hasReference($alias)) {
+                $obj = $record->$alias;
+                $obj->save($conn);
+            }
+        }
+
+        // save the MANY-TO-MANY associations
+        $this->saveAssociations($record);
+
+        $record->state($state);
+
+        $conn->commit();
+
+        return true;
+    }
+    /**
+     * saves the given record
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function save(Doctrine_Record $record)
+    {
+        $event = new Doctrine_Event($record, Doctrine_Event::RECORD_SAVE);
+
+        $record->preSave($event);
+
+        $record->getTable()->getRecordListener()->preSave($event);
+
+        if ( ! $event->skipOperation) {
+            switch ($record->state()) {
+                case Doctrine_Record::STATE_TDIRTY:
+                    $this->insert($record);
+                    break;
+                case Doctrine_Record::STATE_DIRTY:
+                case Doctrine_Record::STATE_PROXY:
+                    $this->update($record);
+                    break;
+                case Doctrine_Record::STATE_CLEAN:
+                case Doctrine_Record::STATE_TCLEAN:
+                    // do nothing
+                    break;
+            }
+        }
+
+        $record->getTable()->getRecordListener()->postSave($event);
+        
+        $record->postSave($event);
+    }
+    /**
+     * deletes given record and all the related composites
+     * this operation is isolated by a transaction
+     *
+     * this event can be listened by the onPreDelete and onDelete listeners
+     *
+     * @return boolean      true on success, false on failure
+     */
+    public function delete(Doctrine_Record $record)
+    {
+        if ( ! $record->exists()) {
+            return false;
+        }
+        $this->conn->beginTransaction();
+
+        $event = new Doctrine_Event($record, Doctrine_Event::RECORD_DELETE);
+
+        $record->preDelete($event);
+        
+        $record->getTable()->getRecordListener()->preDelete($event);
+
+        $record->state(Doctrine_Record::STATE_LOCKED);
+
+        $this->deleteComposites($record);
+        
+        $record->state(Doctrine_Record::STATE_TDIRTY);
+
+        if ( ! $event->skipOperation) {
+            $this->conn->transaction->addDelete($record);
+
+            $record->state(Doctrine_Record::STATE_TCLEAN);
+        }
+        
+        $record->getTable()->getRecordListener()->postDelete($event);
+
+        $record->postDelete($event);
+
+        $this->conn->commit();
+
+        return true;
+    }
+
+    /**
+     * saveRelated
+     * saves all related records to $record
+     *
+     * @throws PDOException         if something went wrong at database level
+     * @param Doctrine_Record $record
+     */
+    public function saveRelated(Doctrine_Record $record)
+    {
+        $saveLater = array();
+        foreach ($record->getReferences() as $k => $v) {
+            $rel = $record->getTable()->getRelation($k);
+
+            $local = $rel->getLocal();
+            $foreign = $rel->getForeign();
+
+            if ($rel instanceof Doctrine_Relation_ForeignKey) {
+                $saveLater[$k] = $rel;
+            } elseif ($rel instanceof Doctrine_Relation_LocalKey) {
+                // ONE-TO-ONE relationship
+                $obj = $record->get($rel->getAlias());
+
+                // Protection against infinite function recursion before attempting to save
+                if ($obj instanceof Doctrine_Record &&
+                    $obj->isModified()) {
+                    $obj->save($this->conn);
+                }
+            }
+        }
+
+        return $saveLater;
+    }
+    /**
+     * saveAssociations
+     *
+     * this method takes a diff of one-to-many / many-to-many original and
+     * current collections and applies the changes
+     *
+     * for example if original many-to-many related collection has records with
+     * primary keys 1,2 and 3 and the new collection has records with primary keys
+     * 3, 4 and 5, this method would first destroy the associations to 1 and 2 and then
+     * save new associations to 4 and 5
+     *
+     * @throws PDOException         if something went wrong at database level
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function saveAssociations(Doctrine_Record $record)
+    {
+        foreach ($record->getReferences() as $k => $v) {
+            $rel = $record->getTable()->getRelation($k);
+            
+            if ($rel instanceof Doctrine_Relation_Association) {   
+                $v->save($this->conn);
+
+                $assocTable = $rel->getAssociationTable();
+                foreach ($v->getDeleteDiff() as $r) {
+                    $query = 'DELETE FROM ' . $assocTable->getTableName()
+                           . ' WHERE ' . $rel->getForeign() . ' = ?'
+                           . ' AND ' . $rel->getLocal() . ' = ?';
+
+                    $this->conn->execute($query, array($r->getIncremented(), $record->getIncremented()));
+                }
+
+                foreach ($v->getInsertDiff() as $r) {
+                    $assocRecord = $assocTable->create();
+                    $assocRecord->set($rel->getForeign(), $r);
+                    $assocRecord->set($rel->getLocal(), $record);
+
+                    $this->saveGraph($assocRecord);
+                }
+            }
+        }
+    }
+    /**
+     * deletes all related composites
+     * this method is always called internally when a record is deleted
+     *
+     * @throws PDOException         if something went wrong at database level
+     * @return void
+     */
+    public function deleteComposites(Doctrine_Record $record)
+    {
+        foreach ($record->getTable()->getRelations() as $fk) {
+            switch ($fk->getType()) {
+                case Doctrine_Relation::ONE_COMPOSITE:
+                case Doctrine_Relation::MANY_COMPOSITE:
+                    $obj = $record->get($fk->getAlias());
+                    if ( $obj instanceof Doctrine_Record && 
+                           $obj->state() != Doctrine_Record::STATE_LOCKED)  {
+                            
+                            $obj->delete($this->conn);
+                           	
+                    }
+                    break;
+            }
+        }
+    }
+    /**
+     * saveAll
+     * persists all the pending records from all tables
+     *
+     * @throws PDOException         if something went wrong at database level
+     * @return void
+     */
+    public function saveAll()
+    {
+        // get the flush tree
+        $tree = $this->buildFlushTree($this->conn->getTables());
+
+        // save all records
+        foreach ($tree as $name) {
+            $table = $this->conn->getTable($name);
+
+            foreach ($table->getRepository() as $record) {
+                $this->save($record);
+            }
+        }
+
+        // save all associations
+        foreach ($tree as $name) {
+            $table = $this->conn->getTable($name);
+
+            foreach ($table->getRepository() as $record) {
+                $this->saveAssociations($record);
+            }
+        }
+    }
+    /**
+     * update
+     * updates the given record
+     *
+     * @param Doctrine_Record $record   record to be updated
+     * @return boolean                  whether or not the update was successful
+     */
+    public function update(Doctrine_Record $record)
+    {
+        $event = new Doctrine_Event($record, Doctrine_Event::RECORD_UPDATE);
+
+        $record->preUpdate($event);
+
+        $record->getTable()->getRecordListener()->preUpdate($event);
+
+        if ( ! $event->skipOperation) {
+            $array = $record->getPrepared();
+
+            if (empty($array)) {
+                return false;
+            }
+            $set = array();
+            foreach ($array as $name => $value) {
+                if ($value instanceof Doctrine_Expression) {
+                    $set[] = $value->getSql();
+                    unset($array[$name]);
+                } else {
+
+                    $set[] = $name . ' = ?';
+    
+                    if ($value instanceof Doctrine_Record) {
+                        if ( ! $value->exists()) {
+                            $record->save($this->conn);
+                        }
+                        $array[$name] = $value->getIncremented();
+                        $record->set($name, $value->getIncremented());
+                    }
+                }
+            }
+
+            $params = array_values($array);
+            $id     = $record->identifier();
+    
+            if ( ! is_array($id)) {
+                $id = array($id);
+            }
+            $id     = array_values($id);
+            $params = array_merge($params, $id);
+    
+            $sql  = 'UPDATE ' . $this->conn->quoteIdentifier($record->getTable()->getTableName())
+                  . ' SET ' . implode(', ', $set)
+                  . ' WHERE ' . implode(' = ? AND ', $record->getTable()->getPrimaryKeys())
+                  . ' = ?';
+    
+            $stmt = $this->conn->prepare($sql);
+            $stmt->execute($params);
+    
+            $record->assignIdentifier(true);
+        }
+        
+        $record->getTable()->getRecordListener()->postUpdate($event);
+
+        $record->postUpdate($event);
+
+        return true;
+    }
+    /**
+     * inserts a record into database
+     *
+     * @param Doctrine_Record $record   record to be inserted
+     * @return boolean
+     */
+    public function insert(Doctrine_Record $record)
+    {
+         // listen the onPreInsert event
+        $event = new Doctrine_Event($record, Doctrine_Event::RECORD_INSERT);
+
+        $record->preInsert($event);
+        
+        $record->getTable()->getRecordListener()->preInsert($event);
+
+        if ( ! $event->skipOperation) {
+            $array = $record->getPrepared();
+    
+            if (empty($array)) {
+                return false;
+            }
+            $table     = $record->getTable();
+            $keys      = $table->getPrimaryKeys();
+    
+            $seq       = $record->getTable()->sequenceName;
+    
+            if ( ! empty($seq)) {
+                $id             = $this->conn->sequence->nextId($seq);
+                $name           = $record->getTable()->getIdentifier();
+                $array[$name]   = $id;
+    
+                $record->assignIdentifier($id);
+            }
+    
+            $this->conn->insert($table->getTableName(), $array);
+    
+            if (empty($seq) && count($keys) == 1 && $keys[0] == $table->getIdentifier() &&
+                $table->getIdentifierType() != Doctrine::IDENTIFIER_NATURAL) {
+    
+                if (strtolower($this->conn->getName()) == 'pgsql') {
+                    $seq = $table->getTableName() . '_' . $keys[0];
+                }
+    
+                $id = $this->conn->sequence->lastInsertId($seq);
+    
+                if ( ! $id) {
+                    $id = $table->getMaxIdentifier();
+                }
+    
+                $record->assignIdentifier($id);
+            } else {
+                $record->assignIdentifier(true);
+            }
+        }
+        $record->getTable()->addRecord($record);
+
+        $record->getTable()->getRecordListener()->postInsert($event);
+
+        $record->postInsert($event);
+
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bcb605ed85d51ea1a30b89175dc50223042912a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict.php
@@ -0,0 +1,94 @@
+<?php
+/*
+ *  $Id: DataDict.php 1098 2007-02-15 11:36:43Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_DataDict
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1098 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ */
+class Doctrine_DataDict extends Doctrine_Connection_Module
+{
+    /**
+     * Obtain an array of changes that may need to applied
+     *
+     * @param array $current new definition
+     * @param array  $previous old definition
+     * @return array  containing all changes that will need to be applied
+     */
+    public function compareDefinition($current, $previous)
+    {
+        $type = !empty($current['type']) ? $current['type'] : null;
+
+        if (!method_exists($this, "_compare{$type}Definition")) {
+            throw new Doctrine_DataDict_Exception('type "'.$current['type'].'" is not yet supported');
+        }
+
+        if (empty($previous['type']) || $previous['type'] != $type) {
+            return $current;
+        }
+
+        $change = $this->{"_compare{$type}Definition"}($current, $previous);
+
+        if ($previous['type'] != $type) {
+            $change['type'] = true;
+        }
+
+        $previous_notnull = !empty($previous['notnull']) ? $previous['notnull'] : false;
+        $notnull = !empty($current['notnull']) ? $current['notnull'] : false;
+        if ($previous_notnull != $notnull) {
+            $change['notnull'] = true;
+        }
+
+        $previous_default = array_key_exists('default', $previous) ? $previous['default'] :
+            ($previous_notnull ? '' : null);
+        $default = array_key_exists('default', $current) ? $current['default'] :
+            ($notnull ? '' : null);
+        if ($previous_default !== $default) {
+            $change['default'] = true;
+        }
+
+        return $change;
+    }
+    /**
+     * parseBoolean
+     * parses a literal boolean value and returns 
+     * proper sql equivalent
+     *
+     * @param string $value     boolean value to be parsed
+     * @return string           parsed boolean value
+     */
+    public function parseBoolean($value)
+    {
+        // parse booleans
+        if ($value == 'true') {
+            $value = 1;
+        } elseif ($value == 'false') {
+            $value = 0;
+        }
+        return $value;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b568e4ed09026b60ad5b447110e0b7322bbd2fe
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_DataDict_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_DataDict_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..434bada03c5fa71b10aa6c056d21818918429418
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Firebird.php
@@ -0,0 +1,216 @@
+<?php
+/*
+ *  $Id: Firebird.php 1731 2007-06-18 18:30:19Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1731 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Firebird extends Doctrine_DataDict
+{
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration($field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'varchar':
+            case 'string':
+            case 'array':
+            case 'object':
+            case 'char':
+            case 'text':
+            case 'gzip':
+                $length = !empty($field['length'])
+                    ? $field['length'] : 16777215; // TODO: $this->conn->options['default_text_field_length'];
+
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? 'CHAR('.$length.')' : 'VARCHAR('.$length.')';
+            case 'clob':
+                return 'BLOB SUB_TYPE 1';
+            case 'blob':
+                return 'BLOB SUB_TYPE 0';
+            case 'integer':
+            case 'enum':
+            case 'int':
+                return 'INT';
+            case 'boolean':
+                return 'SMALLINT';
+            case 'date':
+                return 'DATE';
+            case 'time':
+                return 'TIME';
+            case 'timestamp':
+                return 'TIMESTAMP';
+            case 'float':
+                return 'DOUBLE PRECISION';
+            case 'decimal':
+                $length = !empty($field['length']) ? $field['length'] : 18;
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'DECIMAL('.$length.','.$scale.')';
+        }
+
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to a Doctrine datatype and length
+     *
+     * @param array  $field native field description
+     * @return array containing the various possible types, length, sign, fixed
+     */
+    public function getPortableDeclaration($field)
+    {
+        $length  = (isset($field['length']) && $field['length'] > 0) ? $field['length'] : null;
+
+        $type = array();
+        $unsigned = $fixed = null;
+        $dbType = strtolower($field['type']);
+        $field['field_sub_type'] = !empty($field['field_sub_type'])
+            ? strtolower($field['field_sub_type']) : null;
+
+        if ( ! isset($field['name'])) {
+            $field['name'] = '';
+        }
+
+        switch ($dbType) {
+            case 'smallint':
+            case 'integer':
+            case 'int64':
+                //these may be 'numeric' or 'decimal'
+                if (isset($field['field_sub_type'])) {
+                    $field['type'] = $field['field_sub_type'];
+                    return $this->getPortableDeclaration($field);
+                }
+            case 'bigint':
+            case 'quad':
+                $type[] = 'integer';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                }
+                break;
+            case 'varchar':
+                $fixed = false;
+            case 'char':
+            case 'cstring':
+                $type[] = 'string';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+                break;
+            case 'date':
+                $type[] = 'date';
+                $length = null;
+                break;
+            case 'timestamp':
+                $type[] = 'timestamp';
+                $length = null;
+                break;
+            case 'time':
+                $type[] = 'time';
+                $length = null;
+                break;
+            case 'float':
+            case 'double':
+            case 'double precision':
+            case 'd_float':
+                $type[] = 'float';
+                break;
+            case 'decimal':
+            case 'numeric':
+                $type[] = 'decimal';
+                break;
+            case 'blob':
+                $type[] = ($field['field_sub_type'] == 'text') ? 'clob' : 'blob';
+                $length = null;
+                break;
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: '.$dbType);
+        }
+
+        return array('type'     => $type,
+                     'length'   => $length,
+                     'unsigned' => $unsigned,
+                     'fixed'    => $fixed);
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $charset   name of the charset
+     * @return string  DBMS specific SQL code portion needed to set the CHARACTER SET
+     *                 of a field declaration.
+     */
+    public function getCharsetFieldDeclaration($charset)
+    {
+        return 'CHARACTER SET ' . $charset;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the COLLATION
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $collation   name of the collation
+     * @return string  DBMS specific SQL code portion needed to set the COLLATION
+     *                 of a field declaration.
+     */
+    public function getCollationFieldDeclaration($collation)
+    {
+        return 'COLLATE ' . $collation;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..f584a1ab6a6fbce2bfe0f671254b75dcc2398ac4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Informix.php
@@ -0,0 +1,110 @@
+<?php
+/*
+ *  $Id: Informix.php 1273 2007-04-18 11:11:07Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1273 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Informix extends Doctrine_DataDict
+{
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration($field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'char':
+            case 'varchar':
+            case 'array':
+            case 'object':
+            case 'string':
+                if (empty($field['length']) && array_key_exists('default', $field)) {
+                    $field['length'] = $this->conn->varchar_max_length;
+                }
+
+                $length = (! empty($field['length'])) ? $field['length'] : false;
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR(255)')
+                    : ($length ? 'VARCHAR('.$length.')' : 'NVARCHAR');
+            case 'clob':
+                return 'TEXT';
+            case 'blob':
+                return 'BLOB';
+            case 'integer':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 1) {
+                        return 'SMALLINT';
+                    } elseif ($length == 2) {
+                        return 'SMALLINT';
+                    } elseif ($length == 3 || $length == 4) {
+                        return 'INTEGER';
+                    } elseif ($length > 4) {
+                        return 'DECIMAL(20)';
+                    }
+                }
+                return 'INT';
+            case 'boolean':
+                return 'SMALLINT';
+            case 'date':
+                return 'DATE';
+            case 'time':
+                return 'DATETIME YEAR TO SECOND';
+            case 'timestamp':
+                return 'DATETIME';
+            case 'float':
+                return 'FLOAT';
+            case 'decimal':
+                return 'DECIMAL';
+        }
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..74a115ade4e4f9f4ba12511357077c85e4aaa0d1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mssql.php
@@ -0,0 +1,189 @@
+<?php
+/*
+ *  $Id: Mssql.php 1730 2007-06-18 18:27:11Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @author      Frank M. Kromann <frank@kromann.info> (PEAR MDB2 Mssql driver)
+ * @author      David Coallier <davidc@php.net> (PEAR MDB2 Mssql driver)
+ * @version     $Revision: 1730 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Mssql extends Doctrine_DataDict
+{
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *
+     * @return      string      DBMS specific SQL code portion that should be used to
+     *                          declare the specified field.
+     */
+    public function getNativeDeclaration($field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'array':
+            case 'object':
+            case 'text':
+            case 'char':
+            case 'varchar':
+            case 'string':
+            case 'gzip':
+                $length = !empty($field['length'])
+                    ? $field['length'] : false;
+
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR('.$this->conn->options['default_text_field_length'].')')
+                    : ($length ? 'VARCHAR('.$length.')' : 'TEXT');
+            case 'clob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 8000) {
+                        return 'VARCHAR('.$length.')';
+                    }
+                 }
+                 return 'TEXT';
+            case 'blob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 8000) {
+                        return "VARBINARY($length)";
+                    }
+                }
+                return 'IMAGE';
+            case 'integer':
+            case 'enum':
+            case 'int':
+                return 'INT';
+            case 'boolean':
+                return 'BIT';
+            case 'date':
+                return 'CHAR(' . strlen('YYYY-MM-DD') . ')';
+            case 'time':
+                return 'CHAR(' . strlen('HH:MM:SS') . ')';
+            case 'timestamp':
+                return 'CHAR(' . strlen('YYYY-MM-DD HH:MM:SS') . ')';
+            case 'float':
+                return 'FLOAT';
+            case 'decimal':
+                $length = !empty($field['length']) ? $field['length'] : 18;
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'DECIMAL('.$length.','.$scale.')';
+        }
+
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to a MDB2 datatype and length
+     *
+     * @param   array           $field native field description
+     * @return  array           containing the various possible types, length, sign, fixed
+     */
+    public function getPortableDeclaration($field)
+    {
+        $db_type = preg_replace('/\d/','', strtolower($field['type']) );
+        $length  = (isset($field['length']) && $field['length'] > 0) ? $field['length'] : null;
+
+        $type = array();
+        // todo: unsigned handling seems to be missing
+        $unsigned = $fixed = null;
+
+        if ( ! isset($field['name']))
+            $field['name'] = '';
+
+        switch ($db_type) {
+            case 'bit':
+                $type[0] = 'boolean';
+            break;
+            case 'int':
+                $type[0] = 'integer';
+                if ($length == 1) {
+                    $type[] = 'boolean';
+                }
+            break;
+            case 'datetime':
+                $type[0] = 'timestamp';
+            break;
+            case 'float':
+            case 'real':
+            case 'numeric':
+                $type[0] = 'float';
+            break;
+            case 'decimal':
+            case 'money':
+                $type[0] = 'decimal';
+            break;
+            case 'text':
+            case 'varchar':
+                $fixed = false;
+            case 'char':
+                $type[0] = 'string';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^[is|has]/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                } elseif (strstr($db_type, 'text')) {
+                    $type[] = 'clob';
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+            break;
+            case 'image':
+            case 'varbinary':
+                $type[] = 'blob';
+                $length = null;
+            break;
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: '.$db_type);
+        }
+
+        return array('type'     => $type,
+                     'length'   => $length,
+                     'unsigned' => $unsigned,
+                     'fixed'    => $fixed);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ae54dd99fa26b20d1ecf01f49787faa9809b584
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Mysql.php
@@ -0,0 +1,455 @@
+<?php
+/*
+ *  $Id: Mysql.php 1730 2007-06-18 18:27:11Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1730 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Mysql extends Doctrine_DataDict
+{
+    protected $keywords = array(
+                          'ADD', 'ALL', 'ALTER',
+                          'ANALYZE', 'AND', 'AS',
+                          'ASC', 'ASENSITIVE', 'BEFORE',
+                          'BETWEEN', 'BIGINT', 'BINARY',
+                          'BLOB', 'BOTH', 'BY',
+                          'CALL', 'CASCADE', 'CASE',
+                          'CHANGE', 'CHAR', 'CHARACTER',
+                          'CHECK', 'COLLATE', 'COLUMN',
+                          'CONDITION', 'CONNECTION', 'CONSTRAINT',
+                          'CONTINUE', 'CONVERT', 'CREATE',
+                          'CROSS', 'CURRENT_DATE', 'CURRENT_TIME',
+                          'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR',
+                          'DATABASE', 'DATABASES', 'DAY_HOUR',
+                          'DAY_MICROSECOND', 'DAY_MINUTE', 'DAY_SECOND',
+                          'DEC', 'DECIMAL', 'DECLARE',
+                          'DEFAULT', 'DELAYED', 'DELETE',
+                          'DESC', 'DESCRIBE', 'DETERMINISTIC',
+                          'DISTINCT', 'DISTINCTROW', 'DIV',
+                          'DOUBLE', 'DROP', 'DUAL',
+                          'EACH', 'ELSE', 'ELSEIF',
+                          'ENCLOSED', 'ESCAPED', 'EXISTS',
+                          'EXIT', 'EXPLAIN', 'FALSE',
+                          'FETCH', 'FLOAT', 'FLOAT4',
+                          'FLOAT8', 'FOR', 'FORCE',
+                          'FOREIGN', 'FROM', 'FULLTEXT',
+                          'GRANT', 'GROUP', 'HAVING',
+                          'HIGH_PRIORITY', 'HOUR_MICROSECOND', 'HOUR_MINUTE',
+                          'HOUR_SECOND', 'IF', 'IGNORE',
+                          'IN', 'INDEX', 'INFILE',
+                          'INNER', 'INOUT', 'INSENSITIVE',
+                          'INSERT', 'INT', 'INT1',
+                          'INT2', 'INT3', 'INT4',
+                          'INT8', 'INTEGER', 'INTERVAL',
+                          'INTO', 'IS', 'ITERATE',
+                          'JOIN', 'KEY', 'KEYS',
+                          'KILL', 'LEADING', 'LEAVE',
+                          'LEFT', 'LIKE', 'LIMIT',
+                          'LINES', 'LOAD', 'LOCALTIME',
+                          'LOCALTIMESTAMP', 'LOCK', 'LONG',
+                          'LONGBLOB', 'LONGTEXT', 'LOOP',
+                          'LOW_PRIORITY', 'MATCH', 'MEDIUMBLOB',
+                          'MEDIUMINT', 'MEDIUMTEXT', 'MIDDLEINT',
+                          'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'MOD',
+                          'MODIFIES', 'NATURAL', 'NOT',
+                          'NO_WRITE_TO_BINLOG', 'NULL', 'NUMERIC',
+                          'ON', 'OPTIMIZE', 'OPTION',
+                          'OPTIONALLY', 'OR', 'ORDER',
+                          'OUT', 'OUTER', 'OUTFILE',
+                          'PRECISION', 'PRIMARY', 'PROCEDURE',
+                          'PURGE', 'RAID0', 'READ',
+                          'READS', 'REAL', 'REFERENCES',
+                          'REGEXP', 'RELEASE', 'RENAME',
+                          'REPEAT', 'REPLACE', 'REQUIRE',
+                          'RESTRICT', 'RETURN', 'REVOKE',
+                          'RIGHT', 'RLIKE', 'SCHEMA',
+                          'SCHEMAS', 'SECOND_MICROSECOND', 'SELECT',
+                          'SENSITIVE', 'SEPARATOR', 'SET',
+                          'SHOW', 'SMALLINT', 'SONAME',
+                          'SPATIAL', 'SPECIFIC', 'SQL',
+                          'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING',
+                          'SQL_BIG_RESULT', 'SQL_CALC_FOUND_ROWS', 'SQL_SMALL_RESULT',
+                          'SSL', 'STARTING', 'STRAIGHT_JOIN',
+                          'TABLE', 'TERMINATED', 'THEN',
+                          'TINYBLOB', 'TINYINT', 'TINYTEXT',
+                          'TO', 'TRAILING', 'TRIGGER',
+                          'TRUE', 'UNDO', 'UNION',
+                          'UNIQUE', 'UNLOCK', 'UNSIGNED',
+                          'UPDATE', 'USAGE', 'USE',
+                          'USING', 'UTC_DATE', 'UTC_TIME',
+                          'UTC_TIMESTAMP', 'VALUES', 'VARBINARY',
+                          'VARCHAR', 'VARCHARACTER', 'VARYING',
+                          'WHEN', 'WHERE', 'WHILE',
+                          'WITH', 'WRITE', 'X509',
+                          'XOR', 'YEAR_MONTH', 'ZEROFILL'
+                          );
+
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration($field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+
+        switch ($field['type']) {
+            case 'char':
+                $length = (! empty($field['length'])) ? $field['length'] : false;
+
+                return $length ? 'CHAR('.$length.')' : 'CHAR(255)';
+            case 'varchar':
+            case 'array':
+            case 'object':
+            case 'string':
+            case 'gzip':
+                if ( ! isset($field['length'])) {
+                    if (array_key_exists('default', $field)) {
+                        $field['length'] = $this->conn->varchar_max_length;
+                    } else {
+                        $field['length'] = false;
+                    }
+                }
+
+                $length = ($field['length'] <= $this->conn->varchar_max_length) ? $field['length'] : false;
+                $fixed  = (isset($field['fixed'])) ? $field['fixed'] : false;
+
+                return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
+                    : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT');
+            case 'clob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 255) {
+                        return 'TINYTEXT';
+                    } elseif ($length <= 65532) {
+                        return 'TEXT';
+                    } elseif ($length <= 16777215) {
+                        return 'MEDIUMTEXT';
+                    }
+                }
+                return 'LONGTEXT';
+            case 'blob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 255) {
+                        return 'TINYBLOB';
+                    } elseif ($length <= 65532) {
+                        return 'BLOB';
+                    } elseif ($length <= 16777215) {
+                        return 'MEDIUMBLOB';
+                    }
+                }
+                return 'LONGBLOB';
+            case 'integer':
+            case 'int':
+            case 'enum':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 1) {
+                        return 'TINYINT';
+                    } elseif ($length == 2) {
+                        return 'SMALLINT';
+                    } elseif ($length == 3) {
+                        return 'MEDIUMINT';
+                    } elseif ($length == 4) {
+                        return 'INT';
+                    } elseif ($length > 4) {
+                        return 'BIGINT';
+                    }
+                }
+                return 'INT';
+            case 'boolean':
+                return 'TINYINT(1)';
+            case 'date':
+                return 'DATE';
+            case 'time':
+                return 'TIME';
+            case 'timestamp':
+                return 'DATETIME';
+            case 'float':
+            case 'double':
+                return 'DOUBLE';
+            case 'decimal':
+                $length = !empty($field['length']) ? $field['length'] : 18;
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'DECIMAL('.$length.','.$scale.')';
+        }
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to a MDB2 datatype and length
+     *
+     * @param array  $field native field description
+     * @return array containing the various possible types, length, sign, fixed
+     */
+    public function getPortableDeclaration(array $field)
+    {
+        $dbType = strtolower($field['type']);
+        $dbType = strtok($dbType, '(), ');
+        if ($dbType == 'national') {
+            $dbType = strtok('(), ');
+        }
+        if (isset($field['length'])) {
+            $length = $field['length'];
+            $decimal = '';
+        } else {
+            $length = strtok('(), ');
+            $decimal = strtok('(), ');
+        }
+        $type = array();
+        $unsigned = $fixed = null;
+
+        if ( ! isset($field['name'])) {
+            $field['name'] = '';
+        }
+
+        $values = null;
+
+        switch ($dbType) {
+            case 'tinyint':
+                $type[] = 'integer';
+                $type[] = 'boolean';
+                if (preg_match('/^(is|has)/', $field['name'])) {
+                    $type = array_reverse($type);
+                }
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 1;
+            break;
+            case 'smallint':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 2;
+            break;
+            case 'mediumint':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 3;
+            break;
+            case 'int':
+            case 'integer':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 4;
+            break;
+            case 'bigint':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 8;
+            break;
+            case 'tinytext':
+            case 'mediumtext':
+            case 'longtext':
+            case 'text':
+            case 'text':
+            case 'varchar':
+                $fixed = false;
+            case 'string':
+            case 'char':
+                $type[] = 'string';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                } elseif (strstr($dbType, 'text')) {
+                    $type[] = 'clob';
+                    if ($decimal == 'binary') {
+                        $type[] = 'blob';
+                    }
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+            break;
+            case 'enum':
+                $type[] = 'enum';
+                preg_match_all('/\'.+\'/U', $field['type'], $matches);
+                $length = 0;
+                $fixed = false;
+                if (is_array($matches)) {
+                    foreach ($matches[0] as $value) {
+                        $length = max($length, strlen($value)-2);
+                    }
+                    if ($length == '1' && count($matches[0]) == 2) {
+                        $type[] = 'boolean';
+                        if (preg_match('/^(is|has)/', $field['name'])) {
+                            $type = array_reverse($type);
+                        }
+                    } else {
+                        $values = $matches[0];
+                    }
+                }
+                $type[] = 'integer';
+            case 'set':
+                $fixed = false;
+                $type[] = 'text';
+                $type[] = 'integer';
+            break;
+            case 'date':
+                $type[] = 'date';
+                $length = null;
+            break;
+            case 'datetime':
+            case 'timestamp':
+                $type[] = 'timestamp';
+                $length = null;
+            break;
+            case 'time':
+                $type[] = 'time';
+                $length = null;
+            break;
+            case 'float':
+            case 'double':
+            case 'real':
+                $type[] = 'float';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+            break;
+            case 'unknown':
+            case 'decimal':
+            case 'numeric':
+                $type[] = 'decimal';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+            break;
+            case 'tinyblob':
+            case 'mediumblob':
+            case 'longblob':
+            case 'blob':
+                $type[] = 'blob';
+                $length = null;
+            break;
+            case 'year':
+                $type[] = 'integer';
+                $type[] = 'date';
+                $length = null;
+            break;
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: ' . $dbType);
+        }
+
+        $length = ((int) $length == 0) ? null : (int) $length;
+
+        if ($values === null) {
+            return array('type' => $type, 'length' => $length, 'unsigned' => $unsigned, 'fixed' => $fixed);
+        } else {
+            return array('type' => $type, 'length' => $length, 'unsigned' => $unsigned, 'fixed' => $fixed, 'values' => $values);
+        }
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $charset   name of the charset
+     * @return string  DBMS specific SQL code portion needed to set the CHARACTER SET
+     *                 of a field declaration.
+     */
+    public function getCharsetFieldDeclaration($charset)
+    {
+        return 'CHARACTER SET ' . $charset;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the COLLATION
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $collation   name of the collation
+     * @return string  DBMS specific SQL code portion needed to set the COLLATION
+     *                 of a field declaration.
+     */
+    public function getCollationFieldDeclaration($collation)
+    {
+        return 'COLLATE ' . $collation;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an integer type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param string  $name   name the field to be declared.
+     * @param string  $field  associative array with the name of the properties
+     *                        of the field being declared as array indexes.
+     *                        Currently, the types of supported field
+     *                        properties are as follows:
+     *
+     *                       unsigned
+     *                        Boolean flag that indicates whether the field
+     *                        should be declared as unsigned integer if
+     *                        possible.
+     *
+     *                       default
+     *                        Integer value to be used as default for this
+     *                        field.
+     *
+     *                       notnull
+     *                        Boolean flag that indicates whether this field is
+     *                        constrained to not be set to null.
+     * @return string  DBMS specific SQL code portion that should be used to
+     *                 declare the specified field.
+     */
+    public function getIntegerDeclaration($name, $field)
+    {
+        $default = $autoinc = '';
+        if (!empty($field['autoincrement'])) {
+            $autoinc = ' AUTO_INCREMENT';
+        } elseif (array_key_exists('default', $field)) {
+            if ($field['default'] === '') {
+                $field['default'] = empty($field['notnull']) ? null : 0;
+            }
+            $default = ' DEFAULT '.$this->conn->quote($field['default']);
+        }
+        /**
+        elseif (empty($field['notnull'])) {
+            $default = ' DEFAULT NULL';
+        }
+        */
+
+        $notnull  = (isset($field['notnull'])  && $field['notnull'])  ? ' NOT NULL' : '';
+        $unsigned = (isset($field['unsigned']) && $field['unsigned']) ? ' UNSIGNED' : '';
+
+        $name = $this->conn->quoteIdentifier($name, true);
+
+        return $name . ' ' . $this->getNativeDeclaration($field) . $unsigned . $default . $notnull . $autoinc;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2360244083a649f7b3e947fef259d30b2556b9a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Oracle.php
@@ -0,0 +1,195 @@
+<?php
+/*
+ *  $Id: Oracle.php 1334 2007-05-11 19:20:38Z lsmith $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @version     $Revision: 1334 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Oracle extends Doctrine_DataDict
+{
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration(array $field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'string':
+            case 'array':
+            case 'object':
+            case 'gzip':
+            case 'char':
+            case 'varchar':
+                $length = !empty($field['length'])
+                    ? $field['length'] : 16777215; // TODO: $this->conn->options['default_text_field_length'];
+
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? 'CHAR('.$length.')' : 'VARCHAR2('.$length.')';
+            case 'clob':
+                return 'CLOB';
+            case 'blob':
+                return 'BLOB';
+            case 'integer':
+            case 'enum':
+            case 'int':
+                if (!empty($field['length'])) {
+                    return 'NUMBER('.$field['length'].')';
+                }
+                return 'INT';
+            case 'boolean':
+                return 'NUMBER(1)';
+            case 'date':
+            case 'time':
+            case 'timestamp':
+                return 'DATE';
+            case 'float':
+            case 'double':
+                return 'NUMBER';
+            case 'decimal':
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'NUMBER(*,'.$scale.')';
+            default:
+        }
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to a doctrine datatype and length
+     *
+     * @param array  $field native field description
+     * @return array containing the various possible types, length, sign, fixed
+     * @throws Doctrine_DataDict_Oracle_Exception
+     */
+    public function getPortableDeclaration(array $field)
+    {
+        $dbType = strtolower($field['type']);
+        $type = array();
+        $length = $unsigned = $fixed = null;
+        if (!empty($field['length'])) {
+            $length = $field['length'];
+        }
+
+        if ( ! isset($field['name'])) {
+            $field['name'] = '';
+        }
+
+        switch ($dbType) {
+            case 'integer':
+            case 'pls_integer':
+            case 'binary_integer':
+                $type[] = 'integer';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                }
+                break;
+            case 'varchar':
+            case 'varchar2':
+            case 'nvarchar2':
+                $fixed = false;
+            case 'char':
+            case 'nchar':
+                $type[] = 'string';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+                break;
+            case 'date':
+            case 'timestamp':
+                $type[] = 'timestamp';
+                $length = null;
+                break;
+            case 'float':
+                $type[] = 'float';
+                break;
+            case 'number':
+                if (!empty($field['scale'])) {
+                    $type[] = 'decimal';
+                } else {
+                    $type[] = 'integer';
+                    if ($length == '1') {
+                        $type[] = 'boolean';
+                        if (preg_match('/^(is|has)/', $field['name'])) {
+                            $type = array_reverse($type);
+                        }
+                    }
+                }
+                break;
+            case 'long':
+                $type[] = 'string';
+            case 'clob':
+            case 'nclob':
+                $type[] = 'clob';
+                break;
+            case 'blob':
+            case 'raw':
+            case 'long raw':
+            case 'bfile':
+                $type[] = 'blob';
+                $length = null;
+            break;
+            case 'rowid':
+            case 'urowid':
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: ' . $dbType);
+        }
+
+        return array('type'     => $type,
+                     'length'   => $length,
+                     'unsigned' => $unsigned,
+                     'fixed'    => $fixed);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6f2135bde046b750918aecf93f4f037b50de90a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Pgsql.php
@@ -0,0 +1,621 @@
+<?php
+/*
+ *  $Id: Pgsql.php 2033 2007-07-21 15:17:17Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Paul Cooper <pgc@ucecom.com>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 2033 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Pgsql extends Doctrine_DataDict
+{
+    /**
+     * @param array $reservedKeyWords     an array of reserved keywords by pgsql
+     */
+    protected static $reservedKeyWords = array(
+                                        'abort',
+                                        'absolute',
+                                        'access',
+                                        'action',
+                                        'add',
+                                        'after',
+                                        'aggregate',
+                                        'all',
+                                        'alter',
+                                        'analyse',
+                                        'analyze',
+                                        'and',
+                                        'any',
+                                        'as',
+                                        'asc',
+                                        'assertion',
+                                        'assignment',
+                                        'at',
+                                        'authorization',
+                                        'backward',
+                                        'before',
+                                        'begin',
+                                        'between',
+                                        'bigint',
+                                        'binary',
+                                        'bit',
+                                        'boolean',
+                                        'both',
+                                        'by',
+                                        'cache',
+                                        'called',
+                                        'cascade',
+                                        'case',
+                                        'cast',
+                                        'chain',
+                                        'char',
+                                        'character',
+                                        'characteristics',
+                                        'check',
+                                        'checkpoint',
+                                        'class',
+                                        'close',
+                                        'cluster',
+                                        'coalesce',
+                                        'collate',
+                                        'column',
+                                        'comment',
+                                        'commit',
+                                        'committed',
+                                        'constraint',
+                                        'constraints',
+                                        'conversion',
+                                        'convert',
+                                        'copy',
+                                        'create',
+                                        'createdb',
+                                        'createuser',
+                                        'cross',
+                                        'current_date',
+                                        'current_time',
+                                        'current_timestamp',
+                                        'current_user',
+                                        'cursor',
+                                        'cycle',
+                                        'database',
+                                        'day',
+                                        'deallocate',
+                                        'dec',
+                                        'decimal',
+                                        'declare',
+                                        'default',
+                                        'deferrable',
+                                        'deferred',
+                                        'definer',
+                                        'delete',
+                                        'delimiter',
+                                        'delimiters',
+                                        'desc',
+                                        'distinct',
+                                        'do',
+                                        'domain',
+                                        'double',
+                                        'drop',
+                                        'each',
+                                        'else',
+                                        'encoding',
+                                        'encrypted',
+                                        'end',
+                                        'escape',
+                                        'except',
+                                        'exclusive',
+                                        'execute',
+                                        'exists',
+                                        'explain',
+                                        'external',
+                                        'extract',
+                                        'false',
+                                        'fetch',
+                                        'float',
+                                        'for',
+                                        'force',
+                                        'foreign',
+                                        'forward',
+                                        'freeze',
+                                        'from',
+                                        'full',
+                                        'function',
+                                        'get',
+                                        'global',
+                                        'grant',
+                                        'group',
+                                        'handler',
+                                        'having',
+                                        'hour',
+                                        'ilike',
+                                        'immediate',
+                                        'immutable',
+                                        'implicit',
+                                        'in',
+                                        'increment',
+                                        'index',
+                                        'inherits',
+                                        'initially',
+                                        'inner',
+                                        'inout',
+                                        'input',
+                                        'insensitive',
+                                        'insert',
+                                        'instead',
+                                        'int',
+                                        'integer',
+                                        'intersect',
+                                        'interval',
+                                        'into',
+                                        'invoker',
+                                        'is',
+                                        'isnull',
+                                        'isolation',
+                                        'join',
+                                        'key',
+                                        'lancompiler',
+                                        'language',
+                                        'leading',
+                                        'left',
+                                        'level',
+                                        'like',
+                                        'limit',
+                                        'listen',
+                                        'load',
+                                        'local',
+                                        'localtime',
+                                        'localtimestamp',
+                                        'location',
+                                        'lock',
+                                        'match',
+                                        'maxvalue',
+                                        'minute',
+                                        'minvalue',
+                                        'mode',
+                                        'month',
+                                        'move',
+                                        'names',
+                                        'national',
+                                        'natural',
+                                        'nchar',
+                                        'new',
+                                        'next',
+                                        'no',
+                                        'nocreatedb',
+                                        'nocreateuser',
+                                        'none',
+                                        'not',
+                                        'nothing',
+                                        'notify',
+                                        'notnull',
+                                        'null',
+                                        'nullif',
+                                        'numeric',
+                                        'of',
+                                        'off',
+                                        'offset',
+                                        'oids',
+                                        'old',
+                                        'on',
+                                        'only',
+                                        'operator',
+                                        'option',
+                                        'or',
+                                        'order',
+                                        'out',
+                                        'outer',
+                                        'overlaps',
+                                        'overlay',
+                                        'owner',
+                                        'partial',
+                                        'password',
+                                        'path',
+                                        'pendant',
+                                        'placing',
+                                        'position',
+                                        'precision',
+                                        'prepare',
+                                        'primary',
+                                        'prior',
+                                        'privileges',
+                                        'procedural',
+                                        'procedure',
+                                        'read',
+                                        'real',
+                                        'recheck',
+                                        'references',
+                                        'reindex',
+                                        'relative',
+                                        'rename',
+                                        'replace',
+                                        'reset',
+                                        'restrict',
+                                        'returns',
+                                        'revoke',
+                                        'right',
+                                        'rollback',
+                                        'row',
+                                        'rule',
+                                        'schema',
+                                        'scroll',
+                                        'second',
+                                        'security',
+                                        'select',
+                                        'sequence',
+                                        'serializable',
+                                        'session',
+                                        'session_user',
+                                        'set',
+                                        'setof',
+                                        'share',
+                                        'show',
+                                        'similar',
+                                        'simple',
+                                        'smallint',
+                                        'some',
+                                        'stable',
+                                        'start',
+                                        'statement',
+                                        'statistics',
+                                        'stdin',
+                                        'stdout',
+                                        'storage',
+                                        'strict',
+                                        'substring',
+                                        'sysid',
+                                        'table',
+                                        'temp',
+                                        'template',
+                                        'temporary',
+                                        'then',
+                                        'time',
+                                        'timestamp',
+                                        'to',
+                                        'toast',
+                                        'trailing',
+                                        'transaction',
+                                        'treat',
+                                        'trigger',
+                                        'trim',
+                                        'true',
+                                        'truncate',
+                                        'trusted',
+                                        'type',
+                                        'unencrypted',
+                                        'union',
+                                        'unique',
+                                        'unknown',
+                                        'unlisten',
+                                        'until',
+                                        'update',
+                                        'usage',
+                                        'user',
+                                        'using',
+                                        'vacuum',
+                                        'valid',
+                                        'validator',
+                                        'values',
+                                        'varchar',
+                                        'varying',
+                                        'verbose',
+                                        'version',
+                                        'view',
+                                        'volatile',
+                                        'when',
+                                        'where',
+                                        'with',
+                                        'without',
+                                        'work',
+                                        'write',
+                                        'year',
+                                        'zone'
+                                        );
+
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration(array $field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'char':
+            case 'string':
+            case 'array':
+            case 'object':
+            case 'varchar':   
+            case 'gzip':
+                $length = (isset($field['length']) && $field['length']) ? $field['length'] : null;
+                        // TODO:  $this->conn->options['default_text_field_length'];
+
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR('.$this->conn->options['default_text_field_length'].')')
+                    : ($length ? 'VARCHAR('.$length.')' : 'TEXT');
+
+            case 'clob':
+                return 'TEXT';
+            case 'blob':
+                return 'BYTEA';
+            case 'enum':
+            case 'integer':
+            case 'int':
+                if (!empty($field['autoincrement'])) {
+                    if (!empty($field['length'])) {
+                        $length = $field['length'];
+                        if ($length > 4) {
+                            return 'BIGSERIAL';
+                        }
+                    }
+                    return 'SERIAL';
+                }
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 2) {
+                        return 'SMALLINT';
+                    } elseif ($length == 3 || $length == 4) {
+                        return 'INT';
+                    } elseif ($length > 4) {
+                        return 'BIGINT';
+                    }
+                }
+                return 'INT';
+            case 'boolean':
+                return 'BOOLEAN';
+            case 'date':
+                return 'DATE';
+            case 'time':
+                return 'TIME without time zone';
+            case 'timestamp':
+                return 'TIMESTAMP without time zone';
+            case 'float':
+            case 'double':
+                return 'FLOAT8';
+            case 'decimal':
+                $length = !empty($field['length']) ? $field['length'] : 18;
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'NUMERIC('.$length.','.$scale.')';
+        }
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to a portable Doctrine datatype and length
+     *
+     * @param array  $field native field description
+     *
+     * @return array containing the various possible types, length, sign, fixed
+     */
+    public function getPortableDeclaration(array $field)
+    {
+
+        $length = (isset($field['length'])) ? $field['length'] : null;
+        if ($length == '-1' && isset($field['atttypmod'])) {
+            $length = $field['atttypmod'] - 4;
+        }
+        if ((int)$length <= 0) {
+            $length = null;
+        }
+        $type = array();
+        $unsigned = $fixed = null;
+
+        if ( ! isset($field['name'])) {
+            $field['name'] = '';
+        }
+
+        $dbType = strtolower($field['type']);
+
+        switch ($dbType) {
+            case 'smallint':
+            case 'int2':
+                $type[] = 'integer';
+                $unsigned = false;
+                $length = 2;
+                if ($length == '2') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                }
+                break;
+            case 'int':
+            case 'int4':
+            case 'integer':
+            case 'serial':
+            case 'serial4':
+                $type[] = 'integer';
+                $unsigned = false;
+                $length = 4;
+                break;
+            case 'bigint':
+            case 'int8':
+            case 'bigserial':
+            case 'serial8':
+                $type[] = 'integer';
+                $unsigned = false;
+                $length = 8;
+                break;
+            case 'bool':
+            case 'boolean':
+                $type[] = 'boolean';
+                $length = 1;
+                break;
+            case 'text':
+            case 'varchar':
+                $fixed = false;
+            case 'unknown':
+            case 'char':
+            case 'bpchar':
+                $type[] = 'string';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                } elseif (strstr($dbType, 'text')) {
+                    $type[] = 'clob';
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+                break;
+            case 'date':
+                $type[] = 'date';
+                $length = null;
+                break;
+            case 'datetime':
+            case 'timestamp':
+                $type[] = 'timestamp';
+                $length = null;
+                break;
+            case 'time':
+                $type[] = 'time';
+                $length = null;
+                break;
+            case 'float':
+            case 'double':
+            case 'real':
+                $type[] = 'float';
+                break;
+            case 'decimal':
+            case 'money':
+            case 'numeric':
+                $type[] = 'decimal';
+                break;
+            case 'tinyblob':
+            case 'mediumblob':
+            case 'longblob':
+            case 'blob':
+            case 'bytea':
+                $type[] = 'blob';
+                $length = null;
+                break;
+            case 'oid':
+                $type[] = 'blob';
+                $type[] = 'clob';
+                $length = null;
+                break;
+            case 'year':
+                $type[] = 'integer';
+                $type[] = 'date';
+                $length = null;
+                break;
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: '.$dbType);
+        }
+
+        return array('type'     => $type,
+                     'length'   => $length,
+                     'unsigned' => $unsigned,
+                     'fixed'    => $fixed);
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an integer type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param string $name name the field to be declared.
+     * @param array $field associative array with the name of the properties
+     *       of the field being declared as array indexes. Currently, the types
+     *       of supported field properties are as follows:
+     *
+     *       unsigned
+     *           Boolean flag that indicates whether the field should be
+     *           declared as unsigned integer if possible.
+     *
+     *       default
+     *           Integer value to be used as default for this field.
+     *
+     *       notnull
+     *           Boolean flag that indicates whether this field is constrained
+     *           to not be set to null.
+     * @return string DBMS specific SQL code portion that should be used to
+     *       declare the specified field.
+     */
+    public function getIntegerDeclaration($name, $field)
+    {
+        /**
+        if (!empty($field['unsigned'])) {
+            $this->conn->warnings[] = "unsigned integer field \"$name\" is being declared as signed integer";
+        }
+        */
+
+        if ( ! empty($field['autoincrement'])) {
+            $name = $this->conn->quoteIdentifier($name, true);
+            return $name . ' ' . $this->getNativeDeclaration($field);
+        }
+
+        $default = '';
+        if (array_key_exists('default', $field)) {
+            if ($field['default'] === '') {
+                $field['default'] = empty($field['notnull']) ? null : 0;
+            }
+            $default = ' DEFAULT '.$this->conn->quote($field['default'], $field['type']);
+        }
+        /**
+        TODO: is this needed ?
+        elseif (empty($field['notnull'])) {
+            $default = ' DEFAULT NULL';
+        }
+        */
+
+        $notnull = empty($field['notnull']) ? '' : ' NOT NULL';
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $name . ' ' . $this->getNativeDeclaration($field) . $default . $notnull;
+    }
+    /**
+     * parseBoolean
+     * parses a literal boolean value and returns
+     * proper sql equivalent
+     *
+     * @param string $value     boolean value to be parsed
+     * @return string           parsed boolean value
+     */
+    public function parseBoolean($value)
+    {
+        return $value;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..b27af3af7365a5938500a140bc03854519f6b9fb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataDict/Sqlite.php
@@ -0,0 +1,299 @@
+<?php
+/*
+ *  $Id: Sqlite.php 2196 2007-08-10 20:29:07Z meus $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_DataDict');
+/**
+ * @package     Doctrine
+ * @subpackage  Doctrine_DataDict
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 2196 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_DataDict_Sqlite extends Doctrine_DataDict
+{
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an text type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param array $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     * @author Lukas Smith (PEAR MDB2 library)
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getNativeDeclaration(array $field)
+    {
+    	if ( ! isset($field['type'])) {
+            throw new Doctrine_DataDict_Exception('Missing column type.');
+    	}
+        switch ($field['type']) {
+            case 'text':
+            case 'object':
+            case 'array':
+            case 'string':
+            case 'char':
+            case 'gzip':
+            case 'varchar':
+                $length = (isset($field['length']) && $field['length']) ? $field['length'] : null;
+
+                $fixed  = ((isset($field['fixed']) && $field['fixed']) || $field['type'] == 'char') ? true : false;
+
+                return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR('.$this->conn->getAttribute(Doctrine::ATTR_DEFAULT_TEXTFLD_LENGTH).')')
+                    : ($length ? 'VARCHAR('.$length.')' : 'TEXT');
+            case 'clob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 255) {
+                        return 'TINYTEXT';
+                    } elseif ($length <= 65535) {
+                        return 'TEXT';
+                    } elseif ($length <= 16777215) {
+                        return 'MEDIUMTEXT';
+                    }
+                }
+                return 'LONGTEXT';
+            case 'blob':
+                if (!empty($field['length'])) {
+                    $length = $field['length'];
+                    if ($length <= 255) {
+                        return 'TINYBLOB';
+                    } elseif ($length <= 65535) {
+                        return 'BLOB';
+                    } elseif ($length <= 16777215) {
+                        return 'MEDIUMBLOB';
+                    }
+                }
+                return 'LONGBLOB';
+            case 'enum':
+            case 'integer':
+            case 'boolean':
+            case 'int':
+                return 'INTEGER';
+            case 'date':
+                return 'DATE';
+            case 'time':
+                return 'TIME';
+            case 'timestamp':
+                return 'DATETIME';
+            case 'float':
+            case 'double':
+                return 'DOUBLE';//($this->conn->options['fixed_float'] ? '('.
+                    //($this->conn->options['fixed_float']+2).','.$this->conn->options['fixed_float'].')' : '');
+            case 'decimal':
+                $length = !empty($field['length']) ? $field['length'] : 18;
+                $scale = !empty($field['scale']) ? $field['scale'] : $this->conn->getAttribute(Doctrine::ATTR_DECIMAL_PLACES);
+                return 'DECIMAL('.$length.','.$scale.')';
+        }
+        throw new Doctrine_DataDict_Exception('Unknown field type \'' . $field['type'] .  '\'.');
+    }
+    /**
+     * Maps a native array description of a field to Doctrine datatype and length
+     *
+     * @param array  $field native field description
+     * @return array containing the various possible types, length, sign, fixed
+     */
+    public function getPortableDeclaration(array $field)
+    {
+        $dbType = strtolower($field['type']);
+        $length = (isset($field['length'])) ? $field['length'] : null;
+        $unsigned = (isset($field['unsigned'])) ? $field['unsigned'] : null;
+        $fixed = null;
+        $type = array();
+
+        if ( ! isset($field['name'])) {
+            $field['name'] = '';
+        }
+
+        switch ($dbType) {
+            case 'boolean':
+                $type[] = 'boolean';
+                break;
+            case 'tinyint':
+                $type[] = 'integer';
+                $type[] = 'boolean';
+                if (preg_match('/^(is|has)/', $field['name'])) {
+                    $type = array_reverse($type);
+                }
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 1;
+                break;
+            case 'smallint':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 2;
+                break;
+            case 'mediumint':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 3;
+                break;
+            case 'int':
+            case 'integer':
+            case 'serial':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 4;
+                break;
+            case 'bigint':
+            case 'bigserial':
+                $type[] = 'integer';
+                $unsigned = preg_match('/ unsigned/i', $field['type']);
+                $length = 8;
+                break;
+            case 'clob':
+            case 'tinytext':
+            case 'mediumtext':
+            case 'longtext':
+            case 'text':
+            case 'varchar':
+            case 'varchar2':
+                $fixed = false;
+            case 'char':
+                $type[] = 'text';
+                if ($length == '1') {
+                    $type[] = 'boolean';
+                    if (preg_match('/^(is|has)/', $field['name'])) {
+                        $type = array_reverse($type);
+                    }
+                } elseif (strstr($dbType, 'text')) {
+                    $type[] = 'clob';
+                }
+                if ($fixed !== false) {
+                    $fixed = true;
+                }
+                break;
+            case 'date':
+                $type[] = 'date';
+                $length = null;
+                break;
+            case 'datetime':
+            case 'timestamp':
+                $type[] = 'timestamp';
+                $length = null;
+                break;
+            case 'time':
+                $type[] = 'time';
+                $length = null;
+                break;
+            case 'float':
+            case 'double':
+            case 'real':
+                $type[] = 'float';
+                $length = null;
+                break;
+            case 'decimal':
+            case 'numeric':
+                $type[] = 'decimal';
+                $length = null;
+                break;
+            case 'tinyblob':
+            case 'mediumblob':
+            case 'longblob':
+            case 'blob':
+                $type[] = 'blob';
+                $length = null;
+                break;
+            case 'year':
+                $type[] = 'integer';
+                $type[] = 'date';
+                $length = null;
+                break;
+            default:
+                throw new Doctrine_DataDict_Exception('unknown database attribute type: '.$dbType);
+        }
+
+        return array('type'     => $type,
+                     'length'   => $length,
+                     'unsigned' => $unsigned,
+                     'fixed'    => $fixed);
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare an integer type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param string  $name   name the field to be declared.
+     * @param array  $field   associative array with the name of the properties
+     *                        of the field being declared as array indexes.
+     *                        Currently, the types of supported field
+     *                        properties are as follows:
+     *
+     *                       unsigned
+     *                        Boolean flag that indicates whether the field
+     *                        should be declared as unsigned integer if
+     *                        possible.
+     *
+     *                       default
+     *                        Integer value to be used as default for this
+     *                        field.
+     *
+     *                       notnull
+     *                        Boolean flag that indicates whether this field is
+     *                        constrained to not be set to null.
+     * @return string  DBMS specific SQL code portion that should be used to
+     *                 declare the specified field.
+     * @access protected
+     */
+    public function getIntegerDeclaration($name, array $field)
+    {
+        $default = $autoinc = '';
+        $type    = $this->getNativeDeclaration($field);
+
+        $autoincrement = isset($field['autoincrement']) && $field['autoincrement'];
+
+        if ($autoincrement){
+            $autoinc = ' PRIMARY KEY AUTOINCREMENT';
+            $type    = 'INTEGER';
+        } elseif (array_key_exists('default', $field)) {
+            if ($field['default'] === '') {
+                $field['default'] = empty($field['notnull']) ? null : 0;
+            }
+            $default = ' DEFAULT ' . $this->conn->quote($field['default'], $field['type']);
+        }/**
+        elseif (empty($field['notnull'])) {
+            $default = ' DEFAULT NULL';
+        }
+        */
+
+        $notnull  = (isset($field['notnull']) && $field['notnull']) ? ' NOT NULL' : '';
+
+        // sqlite does not support unsigned attribute for autoinremented fields
+        $unsigned = (isset($field['unsigned']) && $field['unsigned'] && !$autoincrement) ? ' UNSIGNED' : '';
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $name . ' ' . $type . $unsigned . $default . $notnull . $autoinc;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataType.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataType.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ae0e96e266804111e4c33d39bc79abfb7061894
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/DataType.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+ 
+/**
+ * Doctrine_DataType
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1986 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_DataType
+{
+    public function __construct()
+    {
+    	
+    }
+    
+    public function getName()
+    {
+    	
+    }
+    
+    public function getDefaultLength()
+    {
+    	
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Db.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Db.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c4778745125844bea96424c059f4666570520b5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Db.php
@@ -0,0 +1,38 @@
+<?php
+/*
+ *  $Id: Db.php 1819 2007-06-25 17:48:44Z subzero2000 $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Db
+ * 
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1819 $
+ */
+class Doctrine_Db
+{
+    public function __construct()
+    {
+        throw new Doctrine_Exception('Doctrine_Db has been deprecated. The functionality has been merged into Doctrine_Connection.');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Event.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Event.php
new file mode 100644
index 0000000000000000000000000000000000000000..970fdbfabdc36062cddb89c98af8e4407c7216f7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Event.php
@@ -0,0 +1,291 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Event
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Event
+{
+    /**
+     * CONNECTION EVENT CODES
+     */
+    const CONN_QUERY         = 1;
+    const CONN_EXEC          = 2;
+    const CONN_PREPARE       = 3;
+    const CONN_CONNECT       = 4;
+    const CONN_CLOSE         = 5;
+    const CONN_ERROR         = 6;
+
+    const STMT_EXECUTE       = 10;
+    const STMT_FETCH         = 11;
+    const STMT_FETCHALL      = 12;
+
+    const TX_BEGIN           = 31;
+    const TX_COMMIT          = 32;
+    const TX_ROLLBACK        = 33;
+    const SAVEPOINT_CREATE   = 34;
+    const SAVEPOINT_ROLLBACK = 35;
+    const SAVEPOINT_COMMIT   = 36;
+
+    /*
+     * RECORD EVENT CODES
+     */
+    const RECORD_DELETE      = 21;
+    const RECORD_SAVE        = 22;
+    const RECORD_UPDATE      = 23;
+    const RECORD_INSERT      = 24;
+    const RECORD_SERIALIZE   = 25;
+    const RECORD_UNSERIALIZE = 26;
+    /**
+     * @var mixed $_invoker             the handler which invoked this event
+     */
+    protected $_invoker;
+    /**
+     * @var string $_query              the sql query associated with this event (if any)
+     */
+    protected $_query;
+    /**
+     * @var string $_params             the parameters associated with the query (if any)
+     */
+    protected $_params;
+    /**
+     * @see Doctrine_Event constants
+     * @var integer $_code              the event code
+     */
+    protected $_code;
+    /**
+     * @var integer $_startedMicrotime  the time point in which this event was started
+     */
+    protected $_startedMicrotime;
+    /**
+     * @var integer $_endedMicrotime    the time point in which this event was ended
+     */
+    protected $_endedMicrotime;
+    /**
+     * @var array $_options             an array of options
+     */
+    protected $_options = array();
+    /**
+     * constructor
+     *
+     * @param Doctrine_Connection|Doctrine_Connection_Statement|
+              Doctrine_Connection_UnitOfWork|Doctrine_Transaction $invoker   the handler which invoked this event
+     * @param integer $code                                                  the event code
+     * @param string $query                                                  the sql query associated with this event (if any)
+     */
+    public function __construct($invoker, $code, $query = null, $params = array())
+    {
+        $this->_invoker = $invoker;
+        $this->_code    = $code;
+        $this->_query   = $query;
+        $this->_params  = $params;
+    }
+    /**
+     * getQuery
+     *
+     * @return string       returns the query associated with this event (if any)
+     */
+    public function getQuery()
+    {
+        return $this->_query;
+    }
+    /**
+     * getName
+     * returns the name of this event
+     *
+     * @return string       the name of this event
+     */
+    public function getName() 
+    {
+        switch ($this->_code) {
+            case self::CONN_QUERY:
+                return 'query';
+            case self::CONN_EXEC:
+                return 'exec';
+            case self::CONN_PREPARE:
+                return 'prepare';
+            case self::CONN_CONNECT:
+                return 'connect';
+            case self::CONN_CLOSE:
+                return 'close';
+            case self::CONN_ERROR:
+                return 'error';
+
+            case self::STMT_EXECUTE:
+                return 'execute';
+            case self::STMT_FETCH:
+                return 'fetch';
+            case self::STMT_FETCHALL:
+                return 'fetch all';
+            
+            case self::TX_BEGIN:
+                return 'begin';
+            case self::TX_COMMIT:
+                return 'commit';
+            case self::TX_ROLLBACK:
+                return 'rollback';
+
+            case self::SAVEPOINT_CREATE:
+                return 'create savepoint';
+            case self::SAVEPOINT_ROLLBACK:
+                return 'rollback savepoint';
+            case self::SAVEPOINT_COMMIT:
+                return 'commit Ssavepoint';
+ 
+            case self::RECORD_DELETE:
+                return 'delete record';
+            case self::RECORD_SAVE:
+                return 'save record';
+            case self::RECORD_UPDATE:
+                return 'update record';
+            case self::RECORD_INSERT:
+                return 'insert record';
+            case self::RECORD_SERIALIZE:
+                return 'serialize record';
+            case self::RECORD_UNSERIALIZE:
+                return 'unserialize record';
+        }
+    }
+    /**
+     * getCode
+     *
+     * @return integer      returns the code associated with this event
+     */
+    public function getCode()
+    {
+        return $this->_code;
+    }
+    /**
+     * getOption
+     * returns the value of an option
+     *
+     * @param string $option    the name of the option
+     * @return mixed
+     */
+    public function __get($option)
+    {
+        if ( ! isset($this->_options[$option])) {
+            return null;
+        }
+        
+        return $this->_options[$option];
+    }
+    /**
+     * skipOperation
+     * skips the next operation
+     * an alias for __set('skipOperation', true)
+     *
+     * @return Doctrine_Event   this object
+     */
+    public function skipOperation()
+    {
+        $this->_options['skipOperation'] = true;
+    
+        return $this;
+    }
+    /**
+     * setOption
+     * sets the value of an option
+     *
+     * @param string $option    the name of the option
+     * @param mixed $value      the value of the given option
+     * @return Doctrine_Event   this object
+     */
+    public function __set($option, $value)
+    {
+        $this->_options[$option] = $value;
+
+        return $this;
+    }
+    /**
+     * start
+     * starts the internal timer of this event
+     *
+     * @return Doctrine_Event   this object
+     */
+    public function start()
+    {
+        $this->_startedMicrotime = microtime(true);
+    }
+    /**
+     * hasEnded
+     * whether or not this event has ended
+     *
+     * @return boolean
+     */
+    public function hasEnded()
+    {
+        return ($this->_endedMicrotime != null);
+    }
+    /**
+     * end
+     * ends the internal timer of this event
+     *
+     * @return Doctrine_Event   this object
+     */
+    public function end()
+    {
+        $this->_endedMicrotime = microtime(true);
+        
+        return $this;
+    }
+    /**
+     * getInvoker
+     * returns the handler that invoked this event
+     *
+     * @return Doctrine_Connection|Doctrine_Connection_Statement|
+     *         Doctrine_Connection_UnitOfWork|Doctrine_Transaction   the handler that invoked this event
+     */
+    public function getInvoker()
+    {
+        return $this->_invoker;
+    }
+    /**
+     * getParams
+     * returns the parameters of the query
+     *
+     * @return array   parameters of the query
+     */
+    public function getParams()
+    {
+        return $this->_params;
+    }
+    /**
+     * Get the elapsed time (in microseconds) that the event ran.  If the event has
+     * not yet ended, return false.
+     *
+     * @return mixed
+     */
+    public function getElapsedSecs()
+    {
+        if (is_null($this->_endedMicrotime)) {
+            return false;
+        }
+        return ($this->_endedMicrotime - $this->_startedMicrotime);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..17a5a7188c1119329cee8570bf7a5f05d81553bd
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener.php
@@ -0,0 +1,120 @@
+<?php
+/*
+ *  $Id: EventListener.php 1976 2007-07-11 22:03:47Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_EventListener_Interface');
+/**
+ * Doctrine_EventListener     all event listeners extend this base class
+ *                            the empty methods allow child classes to only implement the methods they need to implement
+ *
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1976 $
+ */
+class Doctrine_EventListener implements Doctrine_EventListener_Interface
+{
+    public function preClose(Doctrine_Event $event)
+    { }
+    public function postClose(Doctrine_Event $event)
+    { }
+
+    public function onCollectionDelete(Doctrine_Collection $collection)
+    { }
+    public function onPreCollectionDelete(Doctrine_Collection $collection)
+    { }
+
+    public function onOpen(Doctrine_Connection $connection)
+    { }
+
+    public function preTransactionCommit(Doctrine_Event $event)
+    { }
+    public function postTransactionCommit(Doctrine_Event $event)
+    { }
+
+    public function preTransactionRollback(Doctrine_Event $event)
+    { }
+    public function postTransactionRollback(Doctrine_Event $event)
+    { }
+
+    public function preTransactionBegin(Doctrine_Event $event)
+    { }
+    public function postTransactionBegin(Doctrine_Event $event)
+    { }
+
+
+    public function preSavepointCommit(Doctrine_Event $event)
+    { }
+    public function postSavepointCommit(Doctrine_Event $event)
+    { }
+
+    public function preSavepointRollback(Doctrine_Event $event)
+    { }
+    public function postSavepointRollback(Doctrine_Event $event)
+    { }
+
+    public function preSavepointCreate(Doctrine_Event $event)
+    { }
+    public function postSavepointCreate(Doctrine_Event $event)
+    { }
+
+    public function postConnect(Doctrine_Event $event)
+    { }
+    public function preConnect(Doctrine_Event $event)
+    { }
+
+    public function preQuery(Doctrine_Event $event)
+    { }
+    public function postQuery(Doctrine_Event $event)
+    { }
+
+    public function prePrepare(Doctrine_Event $event)
+    { }
+    public function postPrepare(Doctrine_Event $event)
+    { }
+
+    public function preExec(Doctrine_Event $event)
+    { }
+    public function postExec(Doctrine_Event $event)
+    { }
+
+    public function preError(Doctrine_Event $event)
+    { }
+    public function postError(Doctrine_Event $event)
+    { }
+
+    public function preFetch(Doctrine_Event $event)
+    { }
+    public function postFetch(Doctrine_Event $event)
+    { }
+
+    public function preFetchAll(Doctrine_Event $event)
+    { }
+    public function postFetchAll(Doctrine_Event $event)
+    { }
+
+    public function preStmtExecute(Doctrine_Event $event)
+    { }
+    public function postStmtExecute(Doctrine_Event $event)
+    { }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Chain.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Chain.php
new file mode 100644
index 0000000000000000000000000000000000000000..540816950c94e458ca0293a8ee5a34a66d6bb42d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Chain.php
@@ -0,0 +1,388 @@
+<?php
+/*
+ *  $Id: Chain.php 2186 2007-08-09 22:16:33Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Access');
+
+/**
+ * Doctrine_EventListener_Chain
+ * this class represents a chain of different listeners,
+ * useful for having multiple listeners listening the events at the same time
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2186 $
+ */
+class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_EventListener_Interface
+{
+    /**
+     * @var array $listeners        an array containing all listeners
+     */
+    private $listeners = array();
+    /**
+     * add
+     * adds a listener to the chain of listeners
+     *
+     * @param object $listener
+     * @param string $name
+     * @return void
+     */
+    public function add($listener, $name = null)
+    {
+        if ( ! ($listener instanceof Doctrine_EventListener_Interface) &&
+             ! ($listener instanceof Doctrine_Overloadable)) {
+            
+            throw new Doctrine_EventListener_Exception("Couldn't add eventlistener. EventListeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
+        }
+        if ($name === null) {
+            $this->listeners[] = $listener;
+        } else {
+            $this->listeners[$name] = $listener;
+        }
+    }
+    /**
+     * returns a Doctrine_EventListener on success
+     * and null on failure
+     *
+     * @param mixed $key
+     * @return mixed
+     */
+    public function get($key)
+    {
+        if ( ! isset($this->listeners[$key])) {
+            return null;
+        }
+        return $this->listeners[$key];
+    }
+    /**
+     * set
+     *
+     * @param mixed $key
+     * @param Doctrine_EventListener $listener
+     * @return void
+     */
+    public function set($key, Doctrine_EventListener $listener)
+    {
+        $this->listeners[$key] = $listener;
+    }
+    /**
+     * onLoad
+     * an event invoked when Doctrine_Record is being loaded from database
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function onLoad(Doctrine_Record $record)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onLoad($record);
+        }
+    }
+    /**
+     * onPreLoad
+     * an event invoked when Doctrine_Record is being loaded
+     * from database but not yet initialized
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function onPreLoad(Doctrine_Record $record)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onPreLoad($record);
+        }
+    }
+    /**
+     * onSleep
+     * an event invoked when Doctrine_Record is serialized
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function onSleep(Doctrine_Record $record)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onSleep($record);
+        }
+    }
+    /**
+     * onWakeUp
+     * an event invoked when Doctrine_Record is unserialized
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function onWakeUp(Doctrine_Record $record)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onWakeUp($record);
+        }
+    }
+    /**
+     * postClose
+     * an event invoked after Doctrine_Connection is closed
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function postClose(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postClose($event);
+        }
+    }
+    /**
+     * preClose
+     * an event invoked before Doctrine_Connection is closed
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function preClose(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preClose($event);
+        }
+    }
+    /**
+     * onOpen
+     * an event invoked after Doctrine_Connection is opened
+     *
+     * @param Doctrine_Connection $connection
+     * @return void
+     */
+    public function onOpen(Doctrine_Connection $connection)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onOpen($connection);
+        }
+    }
+    /**
+     * onTransactionCommit
+     * an event invoked after a Doctrine_Connection transaction is committed
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function postTransactionCommit(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postTransactionCommit($event);
+        }
+    }
+    /**
+     * onPreTransactionCommit
+     * an event invoked before a Doctrine_Connection transaction is committed
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function preTransactionCommit(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preTransactionCommit($event);
+        }
+    }
+    /**
+     * onTransactionRollback
+     * an event invoked after a Doctrine_Connection transaction is being rolled back
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function postTransactionRollback(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postTransactionRollback($event);
+        }
+    }
+    /**
+     * onPreTransactionRollback
+     * an event invoked before a Doctrine_Connection transaction is being rolled back
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function preTransactionRollback(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preTransactionRollback($event);
+        }
+    }
+    /**
+     * onTransactionBegin
+     * an event invoked after a Doctrine_Connection transaction has been started
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function postTransactionBegin(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postTransactionBegin($event);
+        }
+    }
+    /**
+     * onTransactionBegin
+     * an event invoked before a Doctrine_Connection transaction is being started
+     *
+     * @param Doctrine_Event $event
+     * @return void
+     */
+    public function preTransactionBegin(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preTransactionBegin($event);
+        }
+    }
+    /**
+     * onCollectionDelete
+     * an event invoked after a Doctrine_Collection is being deleted
+     *
+     * @param Doctrine_Collection $collection
+     * @return void
+     */
+    public function onCollectionDelete(Doctrine_Collection $collection)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onCollectionDelete($collection);
+        }
+    }
+    /**
+     * onCollectionDelete
+     * an event invoked after a Doctrine_Collection is being deleted
+     *
+     * @param Doctrine_Collection $collection
+     * @return void
+     */
+    public function onPreCollectionDelete(Doctrine_Collection $collection)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->onPreCollectionDelete($collection);
+        }
+    }
+    public function postConnect(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postConnect($event);
+        }
+    }
+    public function preConnect(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preConnect($event);
+        }
+    }
+    public function preQuery(Doctrine_Event $event)
+    { 
+        foreach ($this->listeners as $listener) {
+            $listener->preQuery($event);
+        }
+    }
+    public function postQuery(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postQuery($event);
+        }
+    }
+
+    public function prePrepare(Doctrine_Event $event)
+    { 
+        foreach ($this->listeners as $listener) {
+            $listener->prePrepare($event);
+        }
+    }
+    public function postPrepare(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postPrepare($event);
+        }
+    }
+
+    public function preExec(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preExec($event);
+        }
+    }
+    public function postExec(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postExec($event);
+        }
+    }
+
+    public function preError(Doctrine_Event $event)
+    { 
+        foreach ($this->listeners as $listener) {
+            $listener->preError($event);
+        }
+    }
+    public function postError(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postError($event);
+        }
+    }
+
+    public function preFetch(Doctrine_Event $event)
+    { 
+        foreach ($this->listeners as $listener) {
+            $listener->preFetch($event);
+        }
+    }
+    public function postFetch(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postFetch($event);
+        }
+    }
+
+    public function preFetchAll(Doctrine_Event $event)
+    { 
+        foreach ($this->listeners as $listener) {
+            $listener->preFetchAll($event);
+        }
+    }
+
+    public function postFetchAll(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postFetchAll($event);
+        }
+    }
+
+    public function preStmtExecute(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->preStmtExecute($event);
+        }
+    }
+
+    public function postStmtExecute(Doctrine_Event $event)
+    {
+        foreach ($this->listeners as $listener) {
+            $listener->postStmtExecute($event);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..43784a5dab506047362f7752908d33550c37498d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Exception.php
@@ -0,0 +1,35 @@
+<?php
+/*
+ *  $Id: Exception.php 1344 2007-05-12 23:27:16Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_EventListener_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1344 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_EventListener_Exception extends Doctrine_Exception
+{  
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..2eda588ca096bc47c5558a1a54f04863bb24c124
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/EventListener/Interface.php
@@ -0,0 +1,69 @@
+<?php
+/*
+ *  $Id: Interface.php 1976 2007-07-11 22:03:47Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_EventListener_Interface');
+/**
+ * Doctrine_EventListener     all event listeners extend this base class
+ *                            the empty methods allow child classes to only implement the methods they need to implement
+ *
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1976 $
+ */
+interface Doctrine_EventListener_Interface
+{
+    public function preTransactionCommit(Doctrine_Event $event);
+    public function postTransactionCommit(Doctrine_Event $event);
+
+    public function preTransactionRollback(Doctrine_Event $event);
+    public function postTransactionRollback(Doctrine_Event $event);
+
+    public function preTransactionBegin(Doctrine_Event $event);
+    public function postTransactionBegin(Doctrine_Event $event);
+
+    public function postConnect(Doctrine_Event $event);
+    public function preConnect(Doctrine_Event $event);
+
+    public function preQuery(Doctrine_Event $event);
+    public function postQuery(Doctrine_Event $event);
+
+    public function prePrepare(Doctrine_Event $event);
+    public function postPrepare(Doctrine_Event $event);
+
+    public function preExec(Doctrine_Event $event);
+    public function postExec(Doctrine_Event $event);
+
+    public function preError(Doctrine_Event $event);
+    public function postError(Doctrine_Event $event);
+
+    public function preFetch(Doctrine_Event $event);
+    public function postFetch(Doctrine_Event $event);
+
+    public function preFetchAll(Doctrine_Event $event);
+    public function postFetchAll(Doctrine_Event $event);
+
+    public function preStmtExecute(Doctrine_Event $event);
+    public function postStmtExecute(Doctrine_Event $event);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..c45c7e3391be10c79b3cf4f6f6a167d3d8d4178b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Exception.php
@@ -0,0 +1,90 @@
+<?php
+/*
+ *  $Id: Exception.php 1344 2007-05-12 23:27:16Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1344 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Exception extends Exception
+{ 
+    /**
+     * @var array $_errorMessages       an array of error messages
+     */
+    protected static $_errorMessages = array(
+                Doctrine::ERR                    => 'unknown error',
+                Doctrine::ERR_ALREADY_EXISTS     => 'already exists',
+                Doctrine::ERR_CANNOT_CREATE      => 'can not create',
+                Doctrine::ERR_CANNOT_ALTER       => 'can not alter',
+                Doctrine::ERR_CANNOT_REPLACE     => 'can not replace',
+                Doctrine::ERR_CANNOT_DELETE      => 'can not delete',
+                Doctrine::ERR_CANNOT_DROP        => 'can not drop',
+                Doctrine::ERR_CONSTRAINT         => 'constraint violation',
+                Doctrine::ERR_CONSTRAINT_NOT_NULL=> 'null value violates not-null constraint',
+                Doctrine::ERR_DIVZERO            => 'division by zero',
+                Doctrine::ERR_INVALID            => 'invalid',
+                Doctrine::ERR_INVALID_DATE       => 'invalid date or time',
+                Doctrine::ERR_INVALID_NUMBER     => 'invalid number',
+                Doctrine::ERR_MISMATCH           => 'mismatch',
+                Doctrine::ERR_NODBSELECTED       => 'no database selected',
+                Doctrine::ERR_NOSUCHFIELD        => 'no such field',
+                Doctrine::ERR_NOSUCHTABLE        => 'no such table',
+                Doctrine::ERR_NOT_CAPABLE        => 'Doctrine backend not capable',
+                Doctrine::ERR_NOT_FOUND          => 'not found',
+                Doctrine::ERR_NOT_LOCKED         => 'not locked',
+                Doctrine::ERR_SYNTAX             => 'syntax error',
+                Doctrine::ERR_UNSUPPORTED        => 'not supported',
+                Doctrine::ERR_VALUE_COUNT_ON_ROW => 'value count on row',
+                Doctrine::ERR_INVALID_DSN        => 'invalid DSN',
+                Doctrine::ERR_CONNECT_FAILED     => 'connect failed',
+                Doctrine::ERR_NEED_MORE_DATA     => 'insufficient data supplied',
+                Doctrine::ERR_EXTENSION_NOT_FOUND=> 'extension not found',
+                Doctrine::ERR_NOSUCHDB           => 'no such database',
+                Doctrine::ERR_ACCESS_VIOLATION   => 'insufficient permissions',
+                Doctrine::ERR_LOADMODULE         => 'error while including on demand module',
+                Doctrine::ERR_TRUNCATED          => 'truncated',
+                Doctrine::ERR_DEADLOCK           => 'deadlock detected',
+            );
+    /**
+     * Return a textual error message for a Doctrine error code
+     *
+     * @param   int|array   integer error code,
+     *                           null to get the current error code-message map,
+     *                           or an array with a new error code-message map
+     *
+     * @return  string  error message
+     */
+    public function errorMessage($value = null)
+    {
+        if (is_null($value)) {
+            return self::$_errorMessages;
+        }
+
+        return isset(self::$_errorMessages[$value]) ?
+           self::$_errorMessages[$value] : self::$_errorMessages[Doctrine::ERR];
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export.php
new file mode 100644
index 0000000000000000000000000000000000000000..ece64b660e43686958797df2d304e0e2601038c3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export.php
@@ -0,0 +1,1131 @@
+<?php
+/*
+ *  $Id: Export.php 2277 2007-08-27 14:43:52Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Export
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2277 $
+ */
+class Doctrine_Export extends Doctrine_Connection_Module
+{
+    protected $valid_default_values = array(
+        'text'      => '',
+        'boolean'   => true,
+        'integer'   => 0,
+        'decimal'   => 0.0,
+        'float'     => 0.0,
+        'timestamp' => '1970-01-01 00:00:00',
+        'time'      => '00:00:00',
+        'date'      => '1970-01-01',
+        'clob'      => '',
+        'blob'      => '',
+        'string'    => ''
+    );
+
+    /**
+     * drop an existing database
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name name of the database that should be dropped
+     * @return void
+     */
+    public function dropDatabase($database)
+    {
+        $this->conn->execute($this->dropDatabaseSql($database));
+    }
+    /**
+     * drop an existing database
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name name of the database that should be dropped
+     * @return void
+     */
+    public function dropDatabaseSql($database)
+    {
+        throw new Doctrine_Export_Exception('Drop database not supported by this driver.');
+    }
+    /**
+     * dropTableSql
+     * drop an existing table
+     *
+     * @param string $table           name of table that should be dropped from the database
+     * @return string
+     */
+    public function dropTableSql($table)
+    {
+        return 'DROP TABLE ' . $this->conn->quoteIdentifier($table);
+    }
+    /**
+     * dropTable
+     * drop an existing table
+     *
+     * @param string $table           name of table that should be dropped from the database
+     * @return void
+     */
+    public function dropTable($table)
+    {
+        $this->conn->execute($this->dropTableSql($table));
+    }
+
+    /**
+     * drop existing index
+     *
+     * @param string    $table        name of table that should be used in method
+     * @param string    $name         name of the index to be dropped
+     * @return void
+     */
+    public function dropIndex($table, $name)
+    {
+        return $this->conn->exec($this->dropIndexSql($table, $name));
+    }
+    
+    /**
+     * dropIndexSql
+     *
+     * @param string    $table        name of table that should be used in method
+     * @param string    $name         name of the index to be dropped
+     * @return string                 SQL that is used for dropping an index
+     */
+    public function dropIndexSql($table, $name) 
+    {
+        $name = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name));
+        return 'DROP INDEX ' . $name;
+    }
+    /**
+     * drop existing constraint
+     *
+     * @param string    $table        name of table that should be used in method
+     * @param string    $name         name of the constraint to be dropped
+     * @param string    $primary      hint if the constraint is primary
+     * @return void
+     */
+    public function dropConstraint($table, $name, $primary = false)
+    {
+        $table = $this->conn->quoteIdentifier($table);
+        $name  = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name));
+        return $this->conn->exec('ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $name);
+    }
+    /**
+     * dropSequenceSql
+     * drop existing sequence
+     * (this method is implemented by the drivers)
+     *
+     * @throws Doctrine_Connection_Exception     if something fails at database level
+     * @param string $sequenceName      name of the sequence to be dropped
+     * @return void
+     */
+    public function dropSequence($sequenceName)
+    {
+        $this->conn->exec($this->dropSequenceSql($sequenceName));
+    }
+    /**
+     * dropSequenceSql
+     * drop existing sequence
+     *
+     * @throws Doctrine_Connection_Exception     if something fails at database level
+     * @param string $sequenceName name of the sequence to be dropped
+     * @return void
+     */
+    public function dropSequenceSql($sequenceName)
+    {
+        throw new Doctrine_Export_Exception('Drop sequence not supported by this driver.');
+    }
+    /**
+     * create a new database
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name name of the database that should be created
+     * @return void
+     */
+    public function createDatabase($database)
+    {
+        $this->conn->execute($this->createDatabaseSql($database));
+    }
+    /**
+     * create a new database
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name name of the database that should be created
+     * @return string
+     */
+    public function createDatabaseSql($database)
+    {
+        throw new Doctrine_Export_Exception('Create database not supported by this driver.');
+    }
+    /**
+     * create a new table
+     *
+     * @param string $name   Name of the database that should be created
+     * @param array $fields  Associative array that contains the definition of each field of the new table
+     *                       The indexes of the array entries are the names of the fields of the table an
+     *                       the array entry values are associative arrays like those that are meant to be
+     *                       passed with the field definitions to get[Type]Declaration() functions.
+     *                          array(
+     *                              'id' => array(
+     *                                  'type' => 'integer',
+     *                                  'unsigned' => 1
+     *                                  'notnull' => 1
+     *                                  'default' => 0
+     *                              ),
+     *                              'name' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              ),
+     *                              'password' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              )
+     *                          );
+     * @param array $options  An associative array of table options:
+     *
+     * @return string
+     */
+    public function createTableSql($name, array $fields, array $options = array(), $exportForeignKeySql = true)
+    {
+        if ( ! $name) {
+            throw new Doctrine_Export_Exception('no valid table name specified');
+        }
+        
+        if (empty($fields)) {
+            throw new Doctrine_Export_Exception('no fields specified for table ' . $name);
+        }
+
+        $queryFields = $this->getFieldDeclarationList($fields);
+
+
+        if (isset($options['primary']) && ! empty($options['primary'])) {
+            $queryFields .= ', PRIMARY KEY(' . implode(', ', array_values($options['primary'])) . ')';
+        }
+
+        if (isset($options['indexes']) && ! empty($options['indexes'])) {
+            foreach($options['indexes'] as $index => $definition) {
+                $queryFields .= ', ' . $this->getIndexDeclaration($index, $definition);
+            }
+        }
+
+        $query = 'CREATE TABLE ' . $this->conn->quoteIdentifier($name, true) . ' (' . $queryFields;
+        
+        $check = $this->getCheckDeclaration($fields);
+        
+        if ( ! empty($check)) {
+            $query .= ', ' . $check;
+        }
+
+        $query .= ')';
+
+
+
+        $sql[] = $query;
+
+        if (isset($options['foreignKeys']) && $exportForeignKeySql) {
+
+            foreach ((array) $options['foreignKeys'] as $k => $definition) {
+                if (is_array($definition)) {
+                    $sql[] = $this->createForeignKeySql($name, $definition);
+                }
+            }
+        }   
+        return $sql;
+    }
+    /**
+     * create a new table
+     *
+     * @param string $name   Name of the database that should be created
+     * @param array $fields  Associative array that contains the definition of each field of the new table
+     * @param array $options  An associative array of table options:
+     * @see Doctrine_Export::createTableSql()
+     *
+     * @return void
+     */
+    public function createTable($name, array $fields, array $options = array())
+    {
+    	$sql = (array) $this->createTableSql($name, $fields, $options);
+
+        foreach ($sql as $query) {
+            $this->conn->execute($query);
+        }
+    }
+    /**
+     * create sequence
+     *
+     * @throws Doctrine_Connection_Exception     if something fails at database level
+     * @param string    $seqName        name of the sequence to be created
+     * @param string    $start          start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );     
+     * @return void
+     */
+    public function createSequence($seqName, $start = 1, array $options = array())
+    {
+        return $this->conn->execute($this->createSequenceSql($seqName, $start = 1, $options));
+    }
+    /**
+     * return RDBMS specific create sequence statement
+     * (this method is implemented by the drivers)
+     *
+     * @throws Doctrine_Connection_Exception     if something fails at database level
+     * @param string    $seqName        name of the sequence to be created
+     * @param string    $start          start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return string
+     */
+    public function createSequenceSql($seqName, $start = 1, array $options = array())
+    {
+        throw new Doctrine_Export_Exception('Create sequence not supported by this driver.');
+    }
+    /**
+     * create a constraint on a table
+     *
+     * @param string    $table         name of the table on which the constraint is to be created
+     * @param string    $name          name of the constraint to be created
+     * @param array     $definition    associative array that defines properties of the constraint to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the constraint fields as array
+     *                                 constraints. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the constraint that are specific to
+     *                                 each field.
+     *
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @return void
+     */
+    public function createConstraint($table, $name, $definition)
+    {
+        return $this->conn->exec($this->createConstraintSql($table, $name, $definition));
+    }
+    /**
+     * create a constraint on a table
+     *
+     * @param string    $table         name of the table on which the constraint is to be created
+     * @param string    $name          name of the constraint to be created
+     * @param array     $definition    associative array that defines properties of the constraint to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the constraint fields as array
+     *                                 constraints. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the constraint that are specific to
+     *                                 each field.
+     *
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @return void
+     */
+    public function createConstraintSql($table, $name, $definition)
+    {
+        $table = $this->conn->quoteIdentifier($table);
+        $name  = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name));
+        $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $name;
+
+        if (isset($definition['primary']) && $definition['primary']) {
+            $query .= ' PRIMARY KEY';
+        } elseif (isset($definition['unique']) && $definition['unique']) {
+            $query .= ' UNIQUE';
+        }
+
+        $fields = array();
+        foreach (array_keys($definition['fields']) as $field) {
+            $fields[] = $this->conn->quoteIdentifier($field, true);
+        }
+        $query .= ' ('. implode(', ', $fields) . ')';
+
+        return $query;
+    }
+    /**
+     * Get the stucture of a field into an array
+     *
+     * @param string    $table         name of the table on which the index is to be created
+     * @param string    $name          name of the index to be created
+     * @param array     $definition    associative array that defines properties of the index to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the index fields as array
+     *                                 indexes. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the index that are specific to
+     *                                 each field.
+     *
+     *                                 Currently, only the sorting property is supported. It should be used
+     *                                 to define the sorting direction of the index. It may be set to either
+     *                                 ascending or descending.
+     *
+     *                                 Not all DBMS support index sorting direction configuration. The DBMS
+     *                                 drivers of those that do not support it ignore this property. Use the
+     *                                 function supports() to determine whether the DBMS driver can manage indexes.
+     *
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(
+     *                                                'sorting' => 'ascending'
+     *                                            ),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @return void
+     */
+    public function createIndex($table, $name, array $definition)
+    {
+        return $this->conn->execute($this->createIndexSql($table, $name, $definition));
+    }
+    /**
+     * Get the stucture of a field into an array
+     *
+     * @param string    $table         name of the table on which the index is to be created
+     * @param string    $name          name of the index to be created
+     * @param array     $definition    associative array that defines properties of the index to be created.
+     * @see Doctrine_Export::createIndex()
+     * @return string
+     */
+    public function createIndexSql($table, $name, array $definition)
+    {
+        $table  = $this->conn->quoteIdentifier($table);
+        $name   = $this->conn->quoteIdentifier($name);
+        $type   = '';
+
+        if(isset($definition['type'])) {
+            switch (strtolower($definition['type'])) {
+                case 'unique':
+                    $type = strtoupper($definition['type']) . ' ';
+                break;
+                default:
+                    throw new Doctrine_Export_Exception('Unknown index type ' . $definition['type']);
+            }
+        }
+
+        $query = 'CREATE ' . $type . 'INDEX ' . $name . ' ON ' . $table;
+
+        $fields = array();
+        foreach ($definition['fields'] as $field) {
+            $fields[] = $this->conn->quoteIdentifier($field);
+        }
+        $query .= ' (' . implode(', ', $fields) . ')';
+
+        return $query;
+    }
+    /**
+     * createForeignKeySql
+     *
+     * @param string    $table         name of the table on which the foreign key is to be created
+     * @param array     $definition    associative array that defines properties of the foreign key to be created.
+     * @return string
+     */
+    public function createForeignKeySql($table, array $definition)
+    {
+        $table = $this->conn->quoteIdentifier($table);
+
+        $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $this->getForeignKeyDeclaration($definition);
+
+        return $query;
+    }
+    /**
+     * alter an existing table
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the MDB2 parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the MDB2 parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @return void
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+        $this->conn->execute($this->alterTableSql($name, $changes, $check));
+    }
+    /**
+     * generates the sql for altering an existing table
+     * (this method is implemented by the drivers)
+     *
+     * @param string $name          name of the table that is intended to be changed.
+     * @param array $changes        associative array that contains the details of each type      *
+     * @param boolean $check        indicates whether the function should just check if the DBMS driver
+     *                              can perform the requested table alterations if the value is true or
+     *                              actually perform them otherwise.
+     * @see Doctrine_Export::alterTable()
+     * @return string
+     */
+    public function alterTableSql($name, array $changes, $check)
+    {
+        throw new Doctrine_Export_Exception('Alter table not supported by this driver.');
+    }
+    /**
+     * Get declaration of a number of field in bulk
+     *
+     * @param array $fields  a multidimensional associative array.
+     *      The first dimension determines the field name, while the second
+     *      dimension is keyed with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *      charset
+     *          Text value with the default CHARACTER SET for this field.
+     *      collation
+     *          Text value with the default COLLATION for this field.
+     *      unique
+     *          unique constraint
+     *
+     * @return string
+     */
+    public function getFieldDeclarationList(array $fields)
+    {
+        foreach ($fields as $fieldName => $field) {
+            $query = $this->getDeclaration($fieldName, $field);
+
+            $queryFields[] = $query;
+        }
+        return implode(', ', $queryFields);
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to declare a generic type
+     * field to be used in statements like CREATE TABLE.
+     *
+     * @param string $name   name the field to be declared.
+     * @param array  $field  associative array with the name of the properties
+     *      of the field being declared as array indexes. Currently, the types
+     *      of supported field properties are as follows:
+     *
+     *      length
+     *          Integer value that determines the maximum length of the text
+     *          field. If this argument is missing the field should be
+     *          declared to have the longest length allowed by the DBMS.
+     *
+     *      default
+     *          Text value to be used as default for this field.
+     *
+     *      notnull
+     *          Boolean flag that indicates whether this field is constrained
+     *          to not be set to null.
+     *      charset
+     *          Text value with the default CHARACTER SET for this field.
+     *      collation
+     *          Text value with the default COLLATION for this field.
+     *      unique
+     *          unique constraint
+     *      check   
+     *          column check constraint
+     *
+     * @return string  DBMS specific SQL code portion that should be used to
+     *      declare the specified field.
+     */
+    public function getDeclaration($name, array $field)
+    {
+
+        $default   = $this->getDefaultFieldDeclaration($field);
+
+        $charset   = (isset($field['charset']) && $field['charset']) ?
+                    ' ' . $this->getCharsetFieldDeclaration($field['charset']) : '';
+
+        $collation = (isset($field['collation']) && $field['collation']) ?
+                    ' ' . $this->getCollationFieldDeclaration($field['collation']) : '';
+
+        $notnull   = (isset($field['notnull']) && $field['notnull']) ? ' NOT NULL' : '';
+
+        $unique    = (isset($field['unique']) && $field['unique']) ?
+                    ' ' . $this->getUniqueFieldDeclaration() : '';
+                    
+        $check     = (isset($field['check']) && $field['check']) ?
+                    ' ' . $field['check'] : '';
+
+        $method = 'get' . $field['type'] . 'Declaration';
+
+        if (method_exists($this->conn->dataDict, $method)) {
+            return $this->conn->dataDict->$method($name, $field);
+        } else {
+            $dec = $this->conn->dataDict->getNativeDeclaration($field);
+        }
+        return $this->conn->quoteIdentifier($name, true) . ' ' . $dec . $charset . $default . $notnull . $unique . $check . $collation;
+    }
+    /**
+     * getDefaultDeclaration
+     * Obtain DBMS specific SQL code portion needed to set a default value
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @param array $field      field definition array
+     * @return string           DBMS specific SQL code portion needed to set a default value
+     */
+    public function getDefaultFieldDeclaration($field)
+    {
+        $default = '';
+        if (isset($field['default'])) {
+            if ($field['default'] === '') {
+                $field['default'] = empty($field['notnull'])
+                    ? null : $this->valid_default_values[$field['type']];
+
+                if ($field['default'] === '' && 
+                   ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EMPTY_TO_NULL)) {
+                    $field['default'] = null;
+                }
+            }
+    
+            if ($field['type'] === 'boolean') {
+                $fields['default'] = $this->conn->convertBooleans($field['default']);                                 	
+            }
+            $default = ' DEFAULT ' . $this->conn->quote($field['default'], $field['type']);
+        }
+        return $default;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set a CHECK constraint
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @param array $definition     check definition
+     * @return string               DBMS specific SQL code portion needed to set a CHECK constraint
+     */
+    public function getCheckDeclaration(array $definition)
+    {
+        $constraints = array();
+        foreach ($definition as $field => $def) {
+            if (is_string($def)) {
+                $constraints[] = 'CHECK (' . $def . ')';
+            } else {
+                if (isset($def['min'])) {
+                    $constraints[] = 'CHECK (' . $field . ' >= ' . $def['min'] . ')';
+                }
+
+                if (isset($def['max'])) {
+                    $constraints[] = 'CHECK (' . $field . ' <= ' . $def['max'] . ')';
+                }
+            }
+        }
+
+        return implode(', ', $constraints);
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set an index 
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $name          name of the index
+     * @param array $definition     index definition
+     * @return string               DBMS specific SQL code portion needed to set an index
+     */
+    public function getIndexDeclaration($name, array $definition)
+    {
+        $name   = $this->conn->quoteIdentifier($name);
+        $type   = '';
+
+        if (isset($definition['type'])) {
+            if (strtolower($definition['type']) == 'unique') {
+                $type = strtoupper($definition['type']) . ' ';
+            } else {
+                throw new Doctrine_Export_Exception('Unknown index type ' . $definition['type']);
+            }
+        }
+
+        if ( ! isset($definition['fields']) || ! is_array($definition['fields'])) {
+            throw new Doctrine_Export_Exception('No index columns given.');
+        }
+
+        $query = $type . 'INDEX ' . $name;
+
+        $query .= ' (' . $this->getIndexFieldDeclarationList($definition['fields']) . ')';
+        
+        return $query;
+    }
+    /**
+     * getIndexFieldDeclarationList
+     * Obtain DBMS specific SQL code portion needed to set an index
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @return string
+     */
+    public function getIndexFieldDeclarationList(array $fields)
+    {
+    	$ret = array();
+        foreach ($fields as $field => $definition) {
+            if(is_array($definition)) {
+                $ret[] = $this->conn->quoteIdentifier($field);
+            } else {
+                $ret[] = $this->conn->quoteIdentifier($definition);
+            }
+        }
+        return implode(', ', $ret);
+    }
+    /**
+     * A method to return the required SQL string that fits between CREATE ... TABLE
+     * to create the table as a temporary table.
+     *
+     * Should be overridden in driver classes to return the correct string for the
+     * specific database type.
+     *
+     * The default is to return the string "TEMPORARY" - this will result in a
+     * SQL error for any database that does not support temporary tables, or that
+     * requires a different SQL command from "CREATE TEMPORARY TABLE".
+     *
+     * @return string The string required to be placed between "CREATE" and "TABLE"
+     *                to generate a temporary table, if possible.
+     */
+    public function getTemporaryTableQuery()
+    {
+        return 'TEMPORARY';
+    }
+    /**
+     * getForeignKeyDeclaration
+     * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param array $definition         an associative array with the following structure:
+     *          name                    optional constraint name
+     * 
+     *          local                   the local field(s)
+     *
+     *          foreign                 the foreign reference field(s)
+     *
+     *          foreignTable            the name of the foreign table
+     *
+     *          onDelete                referential delete action
+     *  
+     *          onUpdate                referential update action
+     *
+     *          deferred                deferred constraint checking
+     *
+     * The onDelete and onUpdate keys accept the following values:
+     *
+     * CASCADE: Delete or update the row from the parent table and automatically delete or 
+     *          update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
+     *          Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column
+     *          in the parent table or in the child table.
+     *
+     * SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the
+     *          child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier 
+     *          specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported.
+     *
+     * NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary 
+     *           key value is not allowed to proceed if there is a related foreign key value in the referenced table.
+     *
+     * RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as
+     *           omitting the ON DELETE or ON UPDATE clause.
+     *
+     * SET DEFAULT
+     *
+     * @return string  DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
+     *                 of a field declaration.
+     */
+    public function getForeignKeyDeclaration(array $definition)
+    {
+        $sql  = $this->getForeignKeyBaseDeclaration($definition);
+        $sql .= $this->getAdvancedForeignKeyOptions($definition);
+
+        return $sql;
+    }
+    /**
+     * getAdvancedForeignKeyOptions
+     * Return the FOREIGN KEY query section dealing with non-standard options
+     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
+     *
+     * @param array $definition     foreign key definition
+     * @return string
+     */
+    public function getAdvancedForeignKeyOptions(array $definition)
+    {
+        $query = '';
+        if ( ! empty($definition['onUpdate'])) {
+            $query .= ' ON UPDATE ' . $this->getForeignKeyRefentialAction($definition['onUpdate']);
+        }
+        if ( ! empty($definition['onDelete'])) {
+            $query .= ' ON DELETE ' . $this->getForeignKeyRefentialAction($definition['onDelete']);
+        }
+        return $query;
+    }
+    /**
+     * getForeignKeyReferentialAction
+     *
+     * returns given referential action in uppercase if valid, otherwise throws
+     * an exception
+     *
+     * @throws Doctrine_Exception_Exception     if unknown referential action given
+     * @param string $action    foreign key referential action
+     * @param string            foreign key referential action in uppercase
+     */
+    public function getForeignKeyReferentialAction($action)
+    {
+    	$upper = strtoupper($action);
+        switch ($upper) {
+            case 'CASCADE':
+            case 'SET NULL':
+            case 'NO ACTION':
+            case 'RESTRICT':
+            case 'SET DEFAULT':
+                return $upper;
+            break;
+            default:
+                throw new Doctrine_Export_Exception('Unknown foreign key referential action \'' . $upper . '\' given.');
+        }
+    }
+    /**
+     * getForeignKeyBaseDeclaration
+     * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param array $definition
+     * @return string
+     */
+    public function getForeignKeyBaseDeclaration(array $definition)
+    {
+    	$sql = '';
+        if (isset($definition['name'])) {
+            $sql .= 'CONSTRAINT ' . $this->conn->quoteIdentifier($definition['name']) . ' ';
+        }
+        $sql .= 'FOREIGN KEY (';
+
+        if ( ! isset($definition['local'])) {
+            throw new Doctrine_Export_Exception('Local reference field missing from definition.');
+        }
+        if ( ! isset($definition['foreign'])) {
+            throw new Doctrine_Export_Exception('Foreign reference field missing from definition.');
+        }
+        if ( ! isset($definition['foreignTable'])) {
+            throw new Doctrine_Export_Exception('Foreign reference table missing from definition.');
+        }
+
+        if ( ! is_array($definition['local'])) {
+            $definition['local'] = array($definition['local']);
+        }
+        if ( ! is_array($definition['foreign'])) {
+            $definition['foreign'] = array($definition['foreign']);
+        }
+
+        $sql .= implode(', ', array_map(array($this->conn, 'quoteIdentifier'), $definition['local']))
+              . ') REFERENCES '
+              . $definition['foreignTable'] . '('
+              . implode(', ', array_map(array($this->conn, 'quoteIdentifier'), $definition['foreign'])) . ')';
+        
+        return $sql;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the UNIQUE constraint
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @return string  DBMS specific SQL code portion needed to set the UNIQUE constraint
+     *                 of a field declaration.
+     */
+    public function getUniqueFieldDeclaration()
+    {
+        return 'UNIQUE';
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $charset   name of the charset
+     * @return string  DBMS specific SQL code portion needed to set the CHARACTER SET
+     *                 of a field declaration.
+     */
+    public function getCharsetFieldDeclaration($charset)
+    {
+        return '';
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set the COLLATION
+     * of a field declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $collation   name of the collation
+     * @return string  DBMS specific SQL code portion needed to set the COLLATION
+     *                 of a field declaration.
+     */
+    public function getCollationFieldDeclaration($collation)
+    {
+        return '';
+    } 
+    /**
+     * exportSchema
+     * method for exporting Doctrine_Record classes to a schema
+     *
+     * if the directory parameter is given this method first iterates 
+     * recursively trhough the given directory in order to find any model classes
+     *
+     * Then it iterates through all declared classes and creates tables for the ones
+     * that extend Doctrine_Record and are not abstract classes
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @param string $directory     optional directory parameter
+     * @return void
+     */
+    public function exportSchema($directory = null)
+    {
+        $sql = $this->exportSql($directory);
+
+        $this->conn->beginTransaction();
+
+        foreach ($sql as $query) {
+            try {
+                $this->conn->exec($query);
+            } catch (Doctrine_Connection_Exception $e) {
+                // we only want to silence table already exists errors
+                if($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) {
+                    $this->conn->rollback();
+                    throw $e;
+                }                                           
+            }
+        }
+        $this->conn->commit();
+    }
+    /**
+     * exportClasses
+     * method for exporting Doctrine_Record classes to a schema
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @param array $classes
+     * @return void
+     */
+    public function exportClasses(array $classes)
+    {
+        $sql = $this->exportClassesSql($classes);
+
+        $this->conn->beginTransaction();
+
+        foreach ($sql as $query) {
+            try {
+                $this->conn->exec($query);
+            } catch (Doctrine_Connection_Exception $e) {
+                // we only want to silence table already exists errors
+                if($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) {
+                    $this->conn->rollback();
+                    throw $e;
+                }
+            }
+        }
+        $this->conn->commit();
+    }
+    /**
+     * exportClassesSql
+     * method for exporting Doctrine_Record classes to a schema
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @param array $classes
+     * @return void
+     */
+    public function exportClassesSql(array $classes)
+    {
+        $parent = new ReflectionClass('Doctrine_Record');
+
+        $sql = array();
+        $fks = array();
+
+        // we iterate trhough the diff of previously declared classes 
+        // and currently declared classes
+        foreach ($classes as $name) {
+            $class = new ReflectionClass($name);
+            $conn  = Doctrine_Manager::getInstance()->getConnectionForComponent($name);
+
+            // check if class is an instance of Doctrine_Record and not abstract
+            // class must have method setTableDefinition (to avoid non-Record subclasses like symfony's sfDoctrineRecord)
+            if ($class->isSubclassOf($parent) && ! $class->isAbstract() && $class->hasMethod('setTableDefinition')
+                && $class->getMethod('setTableDefinition')->getDeclaringClass()->getName() == $class->getName()) {
+                $record = new $name();
+                $table  = $record->getTable();
+                $data = $table->getExportableFormat();
+                $exportForeignKeySql = is_bool($table->getOption('export_foreign_key_sql')) ? $table->getOption('export_foreign_key_sql'):true;
+                
+                $query = $this->conn->export->createTableSql($data['tableName'], $data['columns'], $data['options'], $exportForeignKeySql);
+
+                if (is_array($query)) {
+                    $sql = array_merge($sql, $query);
+                } else {
+                    $sql[] = $query;
+                }
+            }
+        }
+        $sql = array_unique($sql);
+        rsort($sql);
+
+        return $sql;
+    }
+    /**
+     * exportSql
+     * returns the sql for exporting Doctrine_Record classes to a schema
+     *
+     * if the directory parameter is given this method first iterates 
+     * recursively trhough the given directory in order to find any model classes
+     *
+     * Then it iterates through all declared classes and creates tables for the ones
+     * that extend Doctrine_Record and are not abstract classes
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @param string $directory     optional directory parameter
+     * @return void
+     */
+    public function exportSql($directory = null)
+    {
+    	$declared = get_declared_classes();
+
+       	if ($directory !== null) {
+       	    foreach ((array) $directory as $dir) {
+                $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir),
+                                                        RecursiveIteratorIterator::LEAVES_ONLY);
+                                                        
+                foreach ($it as $file) {
+                    $e = explode('.', $file->getFileName());
+                    if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) {
+                        require_once $file->getPathName();
+                    }
+                }
+            }
+            $declared = array_diff(get_declared_classes(), $declared);
+        }
+
+        return $this->exportClassesSql($declared);
+    }
+    /**
+     * exportTable
+     * exports given table into database based on column and option definitions
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @return boolean                          whether or not the export operation was successful
+     *                                          false if table already existed in the database
+     */
+    public function exportTable(Doctrine_Table $table)
+    {
+    	/**
+    	TODO: maybe there should be portability option for the following check
+        if ( ! Doctrine::isValidClassname($table->getOption('declaringClass')->getName())) {
+            throw new Doctrine_Export_Exception('Class name not valid.');
+        }
+        */
+
+        try {
+            $data = $table->getExportableFormat();
+
+            $this->conn->export->createTable($data['tableName'], $data['columns'], $data['options']);
+        } catch(Doctrine_Connection_Exception $e) {
+            // we only want to silence table already exists errors
+            if($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) {
+                throw $e;
+            }
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..cdb3b64b24bff2b8c2457c37596d6477b944bf26
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Export_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Export_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..961e84ce2107e835a14301882c961acc341e95bf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Firebird.php
@@ -0,0 +1,540 @@
+<?php
+/*
+ *  $Id: Firebird.php 1753 2007-06-19 11:10:13Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Sqlite
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1753 $
+ */
+class Doctrine_Export_Firebird extends Doctrine_Export
+{
+    /**
+     * create a new database
+     *
+     * @param string $name  name of the database that should be created
+     * @return void
+     */
+    public function createDatabase($name)
+    {
+        throw new Doctrine_Export_Exception(
+                'PHP Interbase API does not support direct queries. You have to ' .
+                'create the db manually by using isql command or a similar program');
+    }
+    /**
+     * drop an existing database
+     *
+     * @param string $name  name of the database that should be dropped
+     * @return void
+     */
+    public  function dropDatabase($name)
+    {
+        throw new Doctrine_Export_Exception(
+                'PHP Interbase API does not support direct queries. You have ' .
+                'to drop the db manually by using isql command or a similar program');
+    }
+    /**
+     * add an autoincrement sequence + trigger
+     *
+     * @param string $name  name of the PK field
+     * @param string $table name of the table
+     * @param string $start start value for the sequence
+     * @return void
+     */
+    public function _makeAutoincrement($name, $table, $start = null)
+    {
+        if (is_null($start)) {
+            $this->conn->beginTransaction();
+            $query = 'SELECT MAX(' . $this->conn->quoteIdentifier($name, true) . ') FROM ' . $this->conn->quoteIdentifier($table, true);
+            $start = $this->conn->fetchOne($query, 'integer');
+
+            ++$start;
+            $result = $this->createSequence($table, $start);
+            $this->conn->commit();
+        } else {
+            $result = $this->createSequence($table, $start);
+        }
+
+        $sequence_name = $this->conn->formatter->getSequenceName($table);
+        $trigger_name  = $this->conn->quoteIdentifier($table . '_AUTOINCREMENT_PK', true);
+
+        $table = $this->conn->quoteIdentifier($table, true);
+        $name  = $this->conn->quoteIdentifier($name,  true);
+
+        $triggerSql = 'CREATE TRIGGER ' . $trigger_name . ' FOR ' . $table . '
+                        ACTIVE BEFORE INSERT POSITION 0
+                        AS
+                        BEGIN
+                        IF (NEW.' . $name . ' IS NULL OR NEW.' . $name . ' = 0) THEN
+                            NEW.' . $name . ' = GEN_ID('.$sequence_name.', 1);
+                        END';
+        $result = $this->conn->exec($triggerSql);
+
+        // TODO ? $this->_silentCommit();
+
+        return $result;
+    }
+    /**
+     * drop an existing autoincrement sequence + trigger
+     *
+     * @param string $table name of the table
+     * @return void
+     */
+    public function _dropAutoincrement($table)
+    {
+
+        $result = $this->dropSequence($table);
+
+        //remove autoincrement trigger associated with the table
+        $table = $this->conn->quote(strtoupper($table));
+        $triggerName = $this->conn->quote(strtoupper($table) . '_AUTOINCREMENT_PK');
+
+        return $this->conn->exec("DELETE FROM RDB\$TRIGGERS WHERE UPPER(RDB\$RELATION_NAME)=" . $table . " AND UPPER(RDB\$TRIGGER_NAME)=" . $triggerName);
+    }
+    /**
+     * create a new table
+     *
+     * @param string $name     Name of the database that should be created
+     * @param array $fields Associative array that contains the definition of each field of the new table
+     *                        The indexes of the array entries are the names of the fields of the table an
+     *                        the array entry values are associative arrays like those that are meant to be
+     *                         passed with the field definitions to get[Type]Declaration() functions.
+     *
+     *                        Example
+     *                        array(
+     *
+     *                            'id' => array(
+     *                                'type' => 'integer',
+     *                                'unsigned' => 1,
+     *                                'notnull' => 1,
+     *                                'default' => 0,
+     *                            ),
+     *                            'name' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12,
+     *                            ),
+     *                            'description' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12,
+     *                            )
+     *                        );
+     * @param array $options  An associative array of table options:
+     *
+     * @return void
+     */
+    public function createTable($name, array $fields, array $options = array()) {
+        parent::createTable($name, $fields, $options);
+
+        // TODO ? $this->_silentCommit();
+        foreach ($fields as $field_name => $field) {
+            if ( ! empty($field['autoincrement'])) {
+                //create PK constraint
+                $pk_definition = array(
+                    'fields' => array($field_name => array()),
+                    'primary' => true,
+                );
+                //$pk_name = $name.'_PK';
+                $pk_name = null;
+                $result = $this->createConstraint($name, $pk_name, $pk_definition);
+
+                //create autoincrement sequence + trigger
+                return $this->_makeAutoincrement($field_name, $name, 1);
+            }
+        }
+    }
+    /**
+     * Check if planned changes are supported
+     *
+     * @param string $name name of the database that should be dropped
+     * @return void
+     */
+    public function checkSupportedChanges(&$changes)
+    {
+        foreach ($changes as $change_name => $change) {
+            switch ($change_name) {
+                case 'notnull':
+                    throw new Doctrine_DataDict_Exception('it is not supported changes to field not null constraint');
+                case 'default':
+                    throw new Doctrine_DataDict_Exception('it is not supported changes to field default value');
+                case 'length':
+                    /*
+                    return throw new Doctrine_DataDict_Firebird_Exception('it is not supported changes to field default length');
+                    */
+                case 'unsigned':
+                case 'type':
+                case 'declaration':
+                case 'definition':
+                    break;
+                default:
+                    throw new Doctrine_DataDict_Exception('it is not supported change of type' . $change_name);
+            }
+        }
+        return true;
+    }
+    /**
+     * drop an existing table
+     *
+     * @param string $name name of the table that should be dropped
+     * @return mixed MDB2_OK on success, a MDB2 error on failure
+     * @access public
+     */
+    public function dropTable($name)
+    {
+        $result = $this->_dropAutoincrement($name);
+        $result = parent::dropTable($name);
+
+        //$this->_silentCommit();
+
+        return $result;
+    }
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the Metabase parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the Metabase parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @return void
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+        foreach ($changes as $changeName => $change) {
+            switch ($changeName) {
+                case 'add':
+                case 'remove':
+                case 'rename':
+                    break;
+                case 'change':
+                    foreach ($changes['change'] as $field) {
+                        $this->checkSupportedChanges($field);
+                    }
+                    break;
+                default:
+                    throw new Doctrine_DataDict_Exception('change type ' . $changeName . ' not yet supported');
+            }
+        }
+        if ($check) {
+            return true;
+        }
+        $query = '';
+        if (!empty($changes['add']) && is_array($changes['add'])) {
+            foreach ($changes['add'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $query.= 'ADD ' . $this->getDeclaration($field['type'], $fieldName, $field, $name);
+            }
+        }
+
+        if (!empty($changes['remove']) && is_array($changes['remove'])) {
+            foreach ($changes['remove'] as $field_name => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $field_name = $this->conn->quoteIdentifier($field_name, true);
+                $query.= 'DROP ' . $field_name;
+            }
+        }
+
+        if (!empty($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $field_name => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $field_name = $this->conn->quoteIdentifier($field_name, true);
+                $query.= 'ALTER ' . $field_name . ' TO ' . $this->conn->quoteIdentifier($field['name'], true);
+            }
+        }
+
+        if (!empty($changes['change']) && is_array($changes['change'])) {
+            // missing support to change DEFAULT and NULLability
+            foreach ($changes['change'] as $fieldName => $field) {
+                $this->checkSupportedChanges($field);
+                if ($query) {
+                    $query.= ', ';
+                }
+                $this->conn->loadModule('Datatype', null, true);
+                $field_name = $this->conn->quoteIdentifier($fieldName, true);
+                $query.= 'ALTER ' . $field_name.' TYPE ' . $this->getTypeDeclaration($field['definition']);
+            }
+        }
+
+        if (!strlen($query)) {
+            return false;
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        $result = $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+        $this->_silentCommit();
+        return $result;
+    }
+    /**
+     * Get the stucture of a field into an array
+     *
+     * @param string    $table         name of the table on which the index is to be created
+     * @param string    $name         name of the index to be created
+     * @param array     $definition        associative array that defines properties of the index to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the index fields as array
+     *                                 indexes. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the index that are specific to
+     *                                 each field.
+     *
+     *                                Currently, only the sorting property is supported. It should be used
+     *                                 to define the sorting direction of the index. It may be set to either
+     *                                 ascending or descending.
+     *
+     *                                Not all DBMS support index sorting direction configuration. The DBMS
+     *                                 drivers of those that do not support it ignore this property. Use the
+     *                                 function support() to determine whether the DBMS driver can manage indexes.
+
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(
+     *                                                'sorting' => 'ascending'
+     *                                            ),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @return void
+     */
+    public function createIndexSql($table, $name, array $definition)
+    {
+        $query = 'CREATE';
+
+        $query_sort = '';
+        foreach ($definition['fields'] as $field) {
+            if (!strcmp($query_sort, '') && isset($field['sorting'])) {
+                switch ($field['sorting']) {
+                    case 'ascending':
+                        $query_sort = ' ASC';
+                        break;
+                    case 'descending':
+                        $query_sort = ' DESC';
+                        break;
+                }
+            }
+        }
+        $table = $this->conn->quoteIdentifier($table, true);
+        $name  = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name), true);
+        $query .= $query_sort. ' INDEX ' . $name . ' ON ' . $table;
+        $fields = array();
+        foreach (array_keys($definition['fields']) as $field) {
+            $fields[] = $this->conn->quoteIdentifier($field, true);
+        }
+        $query .= ' ('.implode(', ', $fields) . ')';
+
+        return $query;
+    }
+    /**
+     * create a constraint on a table
+     *
+     * @param string    $table      name of the table on which the constraint is to be created
+     * @param string    $name       name of the constraint to be created
+     * @param array     $definition associative array that defines properties of the constraint to be created.
+     *                              Currently, only one property named FIELDS is supported. This property
+     *                              is also an associative with the names of the constraint fields as array
+     *                              constraints. Each entry of this array is set to another type of associative
+     *                              array that specifies properties of the constraint that are specific to
+     *                              each field.
+     *
+     *                              Example
+     *                                  array(
+     *                                      'fields' => array(
+     *                                          'user_name' => array(),
+     *                                          'last_login' => array(),
+     *                                      )
+     *                                  )
+     * @return void
+     */
+    public function createConstraint($table, $name, $definition)
+    {
+        $table = $this->conn->quoteIdentifier($table, true);
+
+        if (!empty($name)) {
+            $name = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name), true);
+        }
+        $query = "ALTER TABLE $table ADD";
+        if (!empty($definition['primary'])) {
+            if (!empty($name)) {
+                $query.= ' CONSTRAINT '.$name;
+            }
+            $query.= ' PRIMARY KEY';
+        } else {
+            $query.= ' CONSTRAINT '. $name;
+            if (!empty($definition['unique'])) {
+               $query.= ' UNIQUE';
+            }
+        }
+        $fields = array();
+        foreach (array_keys($definition['fields']) as $field) {
+            $fields[] = $this->conn->quoteIdentifier($field, true);
+        }
+        $query .= ' ('. implode(', ', $fields) . ')';
+        $result = $this->conn->exec($query);
+        // TODO ? $this->_silentCommit();
+        return $result;
+    }
+    /**
+     * A method to return the required SQL string that fits between CREATE ... TABLE
+     * to create the table as a temporary table.
+     *
+     * @return string The string required to be placed between "CREATE" and "TABLE"
+     *                to generate a temporary table, if possible.
+     */
+    public function getTemporaryTableQuery()
+    {
+        return 'GLOBAL TEMPORARY';
+    }
+    /**
+     * create sequence
+     *
+     * @param string $seqName name of the sequence to be created
+     * @param string $start start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return boolean
+     */
+    public function createSequence($seqName, $start = 1, array $options = array())
+    {
+        $sequenceName = $this->conn->formatter->getSequenceName($seqName);
+
+        $this->conn->exec('CREATE GENERATOR ' . $sequenceName);
+
+        try {
+            $this->conn->exec('SET GENERATOR ' . $sequenceName . ' TO ' . ($start-1));
+            
+            return true;
+        } catch (Doctrine_Connection_Exception $e) {
+            try {
+                $this->dropSequence($seqName);
+            } catch(Doctrine_Connection_Exception $e) {
+                throw new Doctrine_Export_Exception('Could not drop inconsistent sequence table');
+            }
+        }
+        throw new Doctrine_Export_Exception('could not create sequence table');
+    }
+    /**
+     * drop existing sequence
+     *
+     * @param string $seqName name of the sequence to be dropped
+     * @return void
+     */
+    public function dropSequenceSql($seqName)
+    {
+        $sequenceName = $this->conn->formatter->getSequenceName($seqName);
+        $sequenceName = $this->conn->quote($sequenceName);
+        $query = "DELETE FROM RDB\$GENERATORS WHERE UPPER(RDB\$GENERATOR_NAME)=" . $sequenceName;
+        
+        return $query;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Frontbase.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Frontbase.php
new file mode 100644
index 0000000000000000000000000000000000000000..166208d533134a1dc4cbcde67910179b84e8185d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Frontbase.php
@@ -0,0 +1,310 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Frontbase
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Export_Frontbase extends Doctrine_Export
+{
+    /**
+     * create a new database
+     *
+     * @param string $name name of the database that should be created
+     * @return string
+     */
+    public function createDatabaseSql($name)
+    {
+        $name  = $this->conn->quoteIdentifier($name, true);
+        return 'CREATE DATABASE ' . $name;
+    }
+    /**
+     * drop an existing database
+     *
+     * @param string $name name of the database that should be dropped
+     * @return string
+     */
+    public function dropDatabaseSql($name)
+    {
+        $name  = $this->conn->quoteIdentifier($name, true);
+        return 'DELETE DATABASE ' . $name;    
+    }
+    /**
+     * drop an existing table
+     *
+     * @param object $this->conns        database object that is extended by this class
+     * @param string $name       name of the table that should be dropped
+     * @return string
+     */
+    public function dropTableSql($name)
+    {
+        $name = $this->conn->quoteIdentifier($name, true);
+        return 'DROP TABLE ' . $name . ' CASCADE';
+    }
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the MDB2 parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the MDB2 parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @access public
+     *
+     * @return boolean
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+        foreach ($changes as $changeName => $change){
+            switch ($changeName) {
+            case 'add':
+            case 'remove':
+            case 'change':
+            case 'rename':
+            case 'name':
+                break;
+            default:
+                throw new Doctrine_Export_Exception('change type "'.$changeName.'" not yet supported');
+            }
+        }
+
+        if ($check) {
+            return true;
+        }
+
+        $query = '';
+        if (!empty($changes['name'])) {
+            $changeName = $this->conn->quoteIdentifier($changes['name'], true);
+            $query .= 'RENAME TO ' . $changeName;
+        }
+
+        if (!empty($changes['add']) && is_array($changes['add'])) {
+            foreach ($changes['add'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $query.= 'ADD ' . $this->conn->getDeclaration($field['type'], $fieldName, $field);
+            }
+        }
+
+        if (!empty($changes['remove']) && is_array($changes['remove'])) {
+            foreach ($changes['remove'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $fieldName = $this->conn->quoteIdentifier($fieldName, true);
+                $query.= 'DROP ' . $fieldName;
+            }
+        }
+
+        $rename = array();
+        if (!empty($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $fieldName => $field) {
+                $rename[$field['name']] = $fieldName;
+            }
+        }
+
+        if (!empty($changes['change']) && is_array($changes['change'])) {
+            foreach ($changes['change'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                if (isset($rename[$fieldName])) {
+                    $oldFieldName = $rename[$fieldName];
+                    unset($rename[$fieldName]);
+                } else {
+                    $oldFieldName = $fieldName;
+                }
+                $oldFieldName = $this->conn->quoteIdentifier($oldFieldName, true);
+                $query.= 'CHANGE ' . $oldFieldName . ' ' . $this->conn->getDeclaration($field['definition']['type'], $oldFieldName, $field['definition']);
+            }
+        }
+
+        if (!empty($rename) && is_array($rename)) {
+            foreach ($rename as $renamedFieldName => $renamed_field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $oldFieldName = $rename[$renamedFieldName];
+                $field = $changes['rename'][$oldFieldName];
+                $query.= 'CHANGE ' . $this->conn->getDeclaration($field['definition']['type'], $oldFieldName, $field['definition']);
+            }
+        }
+
+        if (!$query) {
+            return true;
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+    }
+    /**
+     * create sequence
+     *
+     * @param string    $seqName     name of the sequence to be created
+     * @param string    $start         start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return void
+     */
+    public function createSequence($sequenceName, $start = 1, array $options = array())
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->getSequenceName($sequenceName), true);
+        $seqcolName   = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+
+        $query = 'CREATE TABLE ' . $sequenceName . ' (' . $seqcolName . ' INTEGER DEFAULT UNIQUE, PRIMARY KEY(' . $seqcolName . '))';
+        $res = $this->conn->exec($query);
+        $res = $this->conn->exec('SET UNIQUE = 1 FOR ' . $sequenceName);
+
+        if ($start == 1) {
+            return true;
+        }
+        
+        try {
+            $this->conn->exec('INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES (' . ($start-1) . ')');
+        } catch(Doctrine_Connection_Exception $e) {
+            // Handle error
+            try {
+                $this->conn->exec('DROP TABLE ' . $sequenceName);
+            } catch(Doctrine_Connection_Exception $e) {
+                throw new Doctrine_Export_Exception('could not drop inconsistent sequence table');
+            }
+
+            throw new Doctrine_Export_Exception('could not create sequence table');
+        }
+    }
+    /**
+     * drop existing sequence
+     *
+     * @param string $seqName       name of the sequence to be dropped
+     * @return string
+     */
+    public function dropSequenceSql($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->getSequenceName($seqName), true);
+
+        return 'DROP TABLE ' . $sequenceName . ' CASCADE';
+    }
+    /**
+     * drop existing index
+     *
+     * @param string    $table        name of table that should be used in method
+     * @param string    $name         name of the index to be dropped
+     * @return boolean
+     */
+    public function dropIndexSql($table, $name)
+    {
+        $table = $this->conn->quoteIdentifier($table, true);
+        $name = $this->conn->quoteIdentifier($this->conn->getIndexName($name), true);
+
+        return 'ALTER TABLE ' . $table . ' DROP INDEX ' . $name;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d8c5af9b31d496ba1ff3c9f537e7e3334fa16f3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mssql.php
@@ -0,0 +1,253 @@
+<?php
+/*
+ *  $Id: Mssql.php 1697 2007-06-14 20:18:25Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Mssql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @author      Frank M. Kromann <frank@kromann.info> (PEAR MDB2 Mssql driver)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1697 $
+ */
+class Doctrine_Export_Mssql extends Doctrine_Export
+{
+  /**
+     * create a new database
+     *
+     * @param string $name name of the database that should be created
+     * @return void
+     */
+    public function createDatabase($name)
+    {
+        $name = $this->conn->quoteIdentifier($name, true);
+        $query = "CREATE DATABASE $name";
+        if ($this->conn->options['database_device']) {
+            $query.= ' ON '.$this->conn->options['database_device'];
+            $query.= $this->conn->options['database_size'] ? '=' .
+                     $this->conn->options['database_size'] : '';
+        }
+        return $this->conn->standaloneQuery($query, null, true);
+    }
+    /**
+     * drop an existing database
+     *
+     * @param string $name name of the database that should be dropped
+     * @return void
+     */
+    public function dropDatabase($name)
+    {
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $this->conn->standaloneQuery('DROP DATABASE ' . $name, null, true);
+    }
+
+    /**
+     * Override the parent method.
+     *
+     * @return string The string required to be placed between "CREATE" and "TABLE"
+     *                to generate a temporary table, if possible.
+     */
+    public function getTemporaryTableQuery()
+    {
+        return '';
+    }  
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the Metabase parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the Metabase parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @return void
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+        foreach ($changes as $changeName => $change) {
+            switch ($changeName) {
+                case 'add':
+                    break;
+                case 'remove':
+                    break;
+                case 'name':
+                case 'rename':
+                case 'change':
+                default:
+                    throw new Doctrine_Export_Exception('alterTable: change type "' . $changeName . '" not yet supported');
+            }
+        }
+
+        $query = '';
+        if ( ! empty($changes['add']) && is_array($changes['add'])) {
+            foreach ($changes['add'] as $fieldName => $field) {
+                if ($query) {
+                    $query .= ', ';
+                }
+                $query .= 'ADD ' . $this->conn->getDeclaration($field['type'], $fieldName, $field);
+            }
+        }
+
+        if ( ! empty($changes['remove']) && is_array($changes['remove'])) {
+            foreach ($changes['remove'] as $fieldName => $field) {
+                if ($query) {
+                    $query .= ', ';
+                }
+                $field_name = $this->conn->quoteIdentifier($fieldName, true);
+                $query .= 'DROP COLUMN ' . $fieldName;
+            }
+        }
+
+        if ( ! $query) {
+            return false;
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+    }
+    /**
+     * create sequence
+     *
+     * @param string $seqName name of the sequence to be created
+     * @param string $start start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return string
+     */
+    public function createSequence($seqName, $start = 1, array $options = array())
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->getSequenceName($seqName), true);
+        $seqcolName = $this->conn->quoteIdentifier($this->conn->options['seqcol_name'], true);
+        $query = 'CREATE TABLE ' . $sequenceName . ' (' . $seqcolName .
+                 ' INT PRIMARY KEY CLUSTERED IDENTITY(' . $start . ', 1) NOT NULL)';
+
+        $res = $this->conn->exec($query);
+
+        if ($start == 1) {
+            return true;
+        }
+
+        try {
+            $query = 'SET IDENTITY_INSERT ' . $sequenceName . ' ON ' .
+                     'INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES ( ' . $start . ')';
+            $res = $this->conn->exec($query);
+        } catch (Exception $e) {
+            $result = $this->conn->exec('DROP TABLE ' . $sequenceName);
+        }
+        return true;
+    }
+    /**
+     * This function drops an existing sequence
+     *
+     * @param string $seqName      name of the sequence to be dropped
+     * @return void
+     */
+    public function dropSequenceSql($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->getSequenceName($seqName), true);
+        return 'DROP TABLE ' . $sequenceName;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..6e00d5d0a9d8e6c1d7c9bc9d10ba4972b91fa8ac
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Mysql.php
@@ -0,0 +1,636 @@
+<?php
+/*
+ *  $Id: Mysql.php 2277 2007-08-27 14:43:52Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Mysql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2277 $
+ */
+class Doctrine_Export_Mysql extends Doctrine_Export
+{
+   /**
+     * create a new database
+     *
+     * @param string $name name of the database that should be created
+     * @return string
+     */
+    public function createDatabaseSql($name)
+    {
+        return 'CREATE DATABASE ' . $this->conn->quoteIdentifier($name, true);
+    }
+    /**
+     * drop an existing database
+     *
+     * @param string $name name of the database that should be dropped
+     * @return string
+     */
+    public function dropDatabaseSql($name)
+    {
+        return 'DROP DATABASE ' . $this->conn->quoteIdentifier($name);
+    }
+    /**
+     * create a new table
+     *
+     * @param string $name   Name of the database that should be created
+     * @param array $fields  Associative array that contains the definition of each field of the new table
+     *                       The indexes of the array entries are the names of the fields of the table an
+     *                       the array entry values are associative arrays like those that are meant to be
+     *                       passed with the field definitions to get[Type]Declaration() functions.
+     *                          array(
+     *                              'id' => array(
+     *                                  'type' => 'integer',
+     *                                  'unsigned' => 1
+     *                                  'notnull' => 1
+     *                                  'default' => 0
+     *                              ),
+     *                              'name' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              ),
+     *                              'password' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              )
+     *                          );
+     * @param array $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                              'type'    => 'innodb',
+     *                          );
+     *
+     * @return void
+     */
+    public function createTableSql($name, array $fields, array $options = array(), $exportForeignKeySql = true) 
+    {
+        if ( ! $name)
+            throw new Doctrine_Export_Exception('no valid table name specified');
+
+        if (empty($fields)) {
+            throw new Doctrine_Export_Exception('no fields specified for table "'.$name.'"');
+        }
+        $queryFields = $this->getFieldDeclarationList($fields);
+        
+        // build indexes for all foreign key fields (needed in MySQL!!)
+        if (isset($options['foreignKeys'])) {
+            foreach ($options['foreignKeys'] as $fk) {
+                $local = $fk['local'];
+                $found = false;
+                if (isset($options['indexes'])) {
+                    foreach ($options['indexes'] as $definition) {
+                        if (is_string($definition['fields'])) {
+                            // Check if index already exists on the column                            
+                            $found = ($local == $definition['fields']);                        
+                        } else if (in_array($local, $definition['fields']) && count($definition['fields']) === 1) {
+                            // Index already exists on the column
+                            $found = true;
+                        }
+                    }
+                }
+                if (isset($options['primary']) && !empty($options['primary']) &&
+                        in_array($local, $options['primary'])) {
+                    // field is part of the PK and therefore already indexed
+                    $found = true;
+                }
+                
+                if ( ! $found) {
+                    $options['indexes'][$local] = array('fields' => array($local => array()));
+                }
+            }
+        }
+
+        // add all indexes
+        if (isset($options['indexes']) && ! empty($options['indexes'])) {
+            foreach($options['indexes'] as $index => $definition) {
+                $queryFields .= ', ' . $this->getIndexDeclaration($index, $definition);
+            }
+        }
+
+        // attach all primary keys
+        if (isset($options['primary']) && ! empty($options['primary'])) {
+            $queryFields .= ', PRIMARY KEY(' . implode(', ', array_values($options['primary'])) . ')';
+        }
+
+        $query = 'CREATE TABLE ' . $this->conn->quoteIdentifier($name, true) . ' (' . $queryFields . ')';
+
+        $optionStrings = array();
+
+        if (isset($options['comment'])) {
+            $optionStrings['comment'] = 'COMMENT = ' . $this->dbh->quote($options['comment'], 'text');
+        }
+        if (isset($options['charset'])) {
+            $optionStrings['charset'] = 'DEFAULT CHARACTER SET ' . $options['charset'];
+            if (isset($options['collate'])) {
+                $optionStrings['charset'] .= ' COLLATE ' . $options['collate'];
+            }
+        }
+
+        $type = false;
+
+        // get the type of the table
+        if (isset($options['type'])) {
+            $type = $options['type'];
+        } else {
+            $type = $this->conn->getAttribute(Doctrine::ATTR_DEFAULT_TABLE_TYPE);
+        }
+
+        if ($type) {
+            $optionStrings[] = 'ENGINE = ' . $type;
+        }
+
+        if (!empty($optionStrings)) {
+            $query.= ' '.implode(' ', $optionStrings);
+        }
+        $sql[] = $query;
+
+        if (isset($options['foreignKeys']) && $exportForeignKeySql) {
+
+            foreach ((array) $options['foreignKeys'] as $k => $definition) {
+                if (is_array($definition)) {
+                    $sql[] = $this->createForeignKeySql($name, $definition);
+                }
+            }
+        }   
+        return $sql;
+    }
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the Metabase parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the Metabase parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                           can perform the requested table alterations if the value is true or
+     *                           actually perform them otherwise.
+     * @return boolean
+     */
+    public function alterTableSql($name, array $changes, $check)
+    {
+        if ( ! $name) {
+            throw new Doctrine_Export_Exception('no valid table name specified');
+        }
+        foreach ($changes as $changeName => $change) {
+            switch ($changeName) {
+                case 'add':
+                case 'remove':
+                case 'change':
+                case 'rename':
+                case 'name':
+                    break;
+                default:
+                    throw new Doctrine_Export_Exception('change type "' . $changeName . '" not yet supported');
+            }
+        }
+
+        if ($check) {
+            return true;
+        }
+
+        $query = '';
+        if ( ! empty($changes['name'])) {
+            $change_name = $this->conn->quoteIdentifier($changes['name']);
+            $query .= 'RENAME TO ' . $change_name;
+        }
+
+        if ( ! empty($changes['add']) && is_array($changes['add'])) {
+            foreach ($changes['add'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $query.= 'ADD ' . $this->getDeclaration($field['type'], $fieldName, $field);
+            }
+        }
+
+        if ( ! empty($changes['remove']) && is_array($changes['remove'])) {
+            foreach ($changes['remove'] as $fieldName => $field) {
+                if ($query) {
+                    $query .= ', ';
+                }
+                $fieldName = $this->conn->quoteIdentifier($fieldName);
+                $query .= 'DROP ' . $fieldName;
+            }
+        }
+
+        $rename = array();
+        if ( ! empty($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $fieldName => $field) {
+                $rename[$field['name']] = $fieldName;
+            }
+        }
+
+        if ( ! empty($changes['change']) && is_array($changes['change'])) {
+            foreach ($changes['change'] as $fieldName => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                if (isset($rename[$fieldName])) {
+                    $oldFieldName = $rename[$fieldName];
+                    unset($rename[$fieldName]);
+                } else {
+                    $oldFieldName = $fieldName;
+                }
+                $oldFieldName = $this->conn->quoteIdentifier($oldFieldName, true);
+                $query .= 'CHANGE ' . $oldFieldName . ' ' 
+                        . $this->getDeclaration($field['definition']['type'], $fieldName, $field['definition']);
+            }
+        }
+
+        if ( ! empty($rename) && is_array($rename)) {
+            foreach ($rename as $renameName => $renamedField) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $field = $changes['rename'][$renamedField];
+                $renamedField = $this->conn->quoteIdentifier($renamedField, true);
+                $query .= 'CHANGE ' . $renamedField . ' '
+                        . $this->getDeclaration($field['definition']['type'], $field['name'], $field['definition']);
+            }
+        }
+
+        if ( ! $query) {
+            return false;
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        return $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+    }
+    /**
+     * create sequence
+     *
+     * @param string    $sequenceName name of the sequence to be created
+     * @param string    $start        start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                              'type'    => 'innodb',
+     *                          );
+     * @return boolean
+     */
+    public function createSequence($sequenceName, $start = 1, array $options = array())
+    {
+        $sequenceName   = $this->conn->quoteIdentifier($this->conn->getSequenceName($sequenceName), true);
+        $seqcolName     = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+
+        $optionsStrings = array();
+
+        if (isset($options['comment']) && ! empty($options['comment'])) {
+            $optionsStrings['comment'] = 'COMMENT = ' . $this->conn->quote($options['comment'], 'string');
+        }
+
+        if (isset($options['charset']) && ! empty($options['charset'])) {
+            $optionsStrings['charset'] = 'DEFAULT CHARACTER SET ' . $options['charset'];
+
+            if (isset($options['collate'])) {
+                $optionsStrings['collate'] .= ' COLLATE ' . $options['collate'];
+            }
+        }
+
+        $type = false;
+
+        if (isset($options['type'])) {
+            $type = $options['type'];
+        } else {
+            $type = $this->conn->default_table_type;
+        }
+        if ($type) {
+            $optionsStrings[] = 'ENGINE = ' . $type;
+        }
+
+
+        try {
+            $query  = 'CREATE TABLE ' . $sequenceName
+                    . ' (' . $seqcolName . ' INT NOT NULL AUTO_INCREMENT, PRIMARY KEY ('
+                    . $seqcolName . '))'
+                    . strlen($this->conn->default_table_type) ? ' TYPE = '
+                    . $this->conn->default_table_type : '';
+
+            $res    = $this->conn->exec($query);
+        } catch(Doctrine_Connection_Exception $e) {
+            throw new Doctrine_Export_Exception('could not create sequence table');
+        }
+
+        if ($start == 1)
+            return true;
+
+        $query  = 'INSERT INTO ' . $sequenceName
+                . ' (' . $seqcolName . ') VALUES (' . ($start - 1) . ')';
+
+        $res    = $this->conn->exec($query);
+
+        // Handle error
+        try {
+            $result = $this->conn->exec('DROP TABLE ' . $sequenceName);
+        } catch(Doctrine_Connection_Exception $e) {
+            throw new Doctrine_Export_Exception('could not drop inconsistent sequence table');
+        }
+
+
+    }
+    /**
+     * Get the stucture of a field into an array
+     *
+     * @author Leoncx
+     * @param string    $table         name of the table on which the index is to be created
+     * @param string    $name          name of the index to be created
+     * @param array     $definition    associative array that defines properties of the index to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the index fields as array
+     *                                 indexes. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the index that are specific to
+     *                                 each field.
+     *
+     *                                 Currently, only the sorting property is supported. It should be used
+     *                                 to define the sorting direction of the index. It may be set to either
+     *                                 ascending or descending.
+     *
+     *                                 Not all DBMS support index sorting direction configuration. The DBMS
+     *                                 drivers of those that do not support it ignore this property. Use the
+     *                                 function supports() to determine whether the DBMS driver can manage indexes.
+     *
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(
+     *                                                'sorting' => 'ASC'
+     *                                                'length' => 10
+     *                                            ),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @throws PDOException
+     * @return void
+     */
+    public function createIndexSql($table, $name, array $definition)
+    {
+        $table  = $table;
+        $name   = $this->conn->getIndexName($name);
+        $type   = '';
+        if (isset($definition['type'])) {
+            switch (strtolower($definition['type'])) {
+                case 'fulltext':
+                case 'unique':
+                    $type = strtoupper($definition['type']) . ' ';
+                break;
+                default:
+                    throw new Doctrine_Export_Exception('Unknown index type ' . $definition['type']);
+            }
+        }
+        $query  = 'CREATE ' . $type . 'INDEX ' . $name . ' ON ' . $table;
+        $query .= ' (' . $this->getIndexFieldDeclarationList() . ')';
+
+        return $query;
+    }
+    /** 
+     * getDefaultDeclaration
+     * Obtain DBMS specific SQL code portion needed to set a default value
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @param array $field      field definition array
+     * @return string           DBMS specific SQL code portion needed to set a default value
+     */
+    public function getDefaultFieldDeclaration($field)
+    {
+        $default = '';
+        if (isset($field['default']) && $field['length'] <= 255) {
+            if ($field['default'] === '') {
+                $field['default'] = empty($field['notnull'])
+                    ? null : $this->valid_default_values[$field['type']];
+
+                if ($field['default'] === ''
+                    && ($conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EMPTY_TO_NULL)
+                ) {
+                    $field['default'] = ' ';
+                }
+            }
+    
+            $default = ' DEFAULT ' . $this->conn->quote($field['default'], $field['type']);
+        }
+        return $default;
+    }
+    /**
+     * Obtain DBMS specific SQL code portion needed to set an index 
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @param string $charset       name of the index
+     * @param array $definition     index definition
+     * @return string  DBMS specific SQL code portion needed to set an index
+     */
+    public function getIndexDeclaration($name, array $definition)
+    {
+        $name   = $this->conn->quoteIdentifier($name);
+        $type   = '';
+        if(isset($definition['type'])) {
+            switch (strtolower($definition['type'])) {
+                case 'fulltext':
+                case 'unique':
+                    $type = strtoupper($definition['type']) . ' ';
+                break;
+                default:
+                    throw new Doctrine_Export_Exception('Unknown index type ' . $definition['type']);
+            }
+        }
+        
+        if ( ! isset($definition['fields'])) {
+            throw new Doctrine_Export_Exception('No index columns given.');
+        }
+        if ( ! is_array($definition['fields'])) {
+            $definition['fields'] = array($definition['fields']);
+        }
+
+        $query = $type . 'INDEX ' . $this->conn->formatter->getIndexName($name);
+
+        $query .= ' (' . $this->getIndexFieldDeclarationList($definition['fields']) . ')';
+        
+        return $query;
+    }
+    /**
+     * getIndexFieldDeclarationList
+     * Obtain DBMS specific SQL code portion needed to set an index
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @return string
+     */
+    public function getIndexFieldDeclarationList(array $fields)
+    {
+    	$declFields = array();
+
+        foreach ($fields as $fieldName => $field) {
+            $fieldString = $fieldName;
+
+            if (is_array($field)) {
+                if (isset($field['length'])) {
+                    $fieldString .= '(' . $field['length'] . ')';
+                }
+
+                if (isset($field['sorting'])) {
+                    $sort = strtoupper($field['sorting']);
+                    switch ($sort) {
+                        case 'ASC':
+                        case 'DESC':
+                            $fieldString .= ' ' . $sort;
+                            break;
+                        default:
+                            throw new Doctrine_Export_Exception('Unknown index sorting option given.');
+                    }
+                }
+            } else {
+                $fieldString = $field;
+            }
+            $declFields[] = $fieldString;
+        }
+        return implode(', ', $declFields);
+    }
+    /**
+     * getAdvancedForeignKeyOptions
+     * Return the FOREIGN KEY query section dealing with non-standard options
+     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
+     *
+     * @param array $definition
+     * @return string
+     */
+    public function getAdvancedForeignKeyOptions(array $definition)
+    {
+        $query = '';
+        if (!empty($definition['match'])) {
+            $query .= ' MATCH ' . $definition['match'];
+        }
+        if (!empty($definition['onUpdate'])) {
+            $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialAction($definition['onUpdate']);
+        }
+        if (!empty($definition['onDelete'])) {
+            $query .= ' ON DELETE ' . $this->getForeignKeyReferentialAction($definition['onDelete']);
+        }
+        return $query;
+    }
+    /**
+     * drop existing index
+     *
+     * @param string    $table          name of table that should be used in method
+     * @param string    $name           name of the index to be dropped
+     * @return void
+     */
+    public function dropIndexSql($table, $name)
+    {
+        $table  = $this->conn->quoteIdentifier($table, true);
+        $name   = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name), true);
+        return 'DROP INDEX ' . $name . ' ON ' . $table;
+    }
+    /**
+     * dropTable
+     *
+     * @param string    $table          name of table that should be dropped from the database
+     * @throws PDOException
+     * @return void
+     */
+    public function dropTableSql($table)
+    {
+        $table  = $this->conn->quoteIdentifier($table, true);
+        return 'DROP TABLE ' . $table;
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7621cbb79a181b9a5f00ebc4504767569a7dfb7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Oracle.php
@@ -0,0 +1,493 @@
+<?php
+/*
+ *  $Id: Oracle.php 2278 2007-08-27 14:52:38Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Oracle
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2278 $
+ */
+class Doctrine_Export_Oracle extends Doctrine_Export
+{
+    /**
+     * create a new database
+     *
+     * @param object $db database object that is extended by this class
+     * @param string $name name of the database that should be created
+     * @return mixed MDB2_OK on success, a MDB2 error on failure
+     * @access public
+     */
+    public function createDatabase($name)
+    {
+        if ( ! $this->conn->getAttribute(Doctrine::ATTR_EMULATE_DATABASE))
+            throw new Doctrine_Export_Exception('database creation is only supported if the "emulate_database" attribute is enabled');
+
+        $username   = sprintf($this->conn->getAttribute(Doctrine::ATTR_DB_NAME_FORMAT), $name);
+        $password   = $this->conn->dsn['password'] ? $this->conn->dsn['password'] : $name;
+
+        $tablespace = $this->conn->getAttribute(Doctrine::ATTR_DB_NAME_FORMAT)
+                    ? ' DEFAULT TABLESPACE '.$this->conn->options['default_tablespace'] : '';
+
+        $query  = 'CREATE USER ' . $username . ' IDENTIFIED BY ' . $password . $tablespace;
+        $result = $this->conn->exec($query);
+
+        try {
+            $query = 'GRANT CREATE SESSION, CREATE TABLE, UNLIMITED TABLESPACE, CREATE SEQUENCE, CREATE TRIGGER TO ' . $username;
+            $result = $this->conn->exec($query);
+        } catch (Exception $e) {
+            $query = 'DROP USER '.$username.' CASCADE';
+            $result2 = $this->conn->exec($query);
+        }
+        return true;
+    }
+    /**
+     * drop an existing database
+     *
+     * @param object $this->conn database object that is extended by this class
+     * @param string $name name of the database that should be dropped
+     * @return mixed MDB2_OK on success, a MDB2 error on failure
+     * @access public
+     */
+    public function dropDatabase($name)
+    {
+        if ( ! $this->conn->getAttribute(Doctrine::ATTR_EMULATE_DATABASE))
+            throw new Doctrine_Export_Exception('database dropping is only supported if the
+                                                       "emulate_database" option is enabled');
+
+        $username = sprintf($this->conn->getAttribute(Doctrine::ATTR_DB_NAME_FORMAT), $name);
+
+        return $this->conn->exec('DROP USER ' . $username . ' CASCADE');
+    }
+    /**
+     * add an autoincrement sequence + trigger
+     *
+     * @param string $name  name of the PK field
+     * @param string $table name of the table
+     * @param string $start start value for the sequence
+     * @return mixed        MDB2_OK on success, a MDB2 error on failure
+     * @access private
+     */
+    public function _makeAutoincrement($name, $table, $start = 1)
+    {
+    	$sql   = array();
+        $table = strtoupper($table);
+        $indexName  = $table . '_AI_PK';
+        $definition = array(
+            'primary' => true,
+            'fields' => array($name => true),
+        );
+
+        $sql[] = $this->createConstraintSql($table, $indexName, $definition);
+
+        if (is_null($start)) {
+            $query = 'SELECT MAX(' . $this->conn->quoteIdentifier($name, true) . ') FROM ' . $this->conn->quoteIdentifier($table, true);
+            $start = $this->conn->fetchOne($query);
+
+            ++$start;
+        }
+
+        $sql[] = $this->createSequenceSql($table, $start);
+
+        $sequenceName = $this->conn->formatter->getSequenceName($table);
+        $triggerName  = $this->conn->quoteIdentifier($table . '_AI_PK', true);
+        $table = $this->conn->quoteIdentifier($table, true);
+        $name  = $this->conn->quoteIdentifier($name, true);
+        $sql[] = 'CREATE TRIGGER ' . $triggerName . '
+   BEFORE INSERT
+   ON '.$table.'
+   FOR EACH ROW
+DECLARE
+   last_Sequence NUMBER;
+   last_InsertID NUMBER;
+BEGIN
+   SELECT '.$sequenceName.'.NEXTVAL INTO :NEW.'.$name.' FROM DUAL;
+   IF (:NEW.'.$name.' IS NULL OR :NEW.'.$name.' = 0) THEN
+      SELECT '.$sequenceName.'.NEXTVAL INTO :NEW.'.$name.' FROM DUAL;
+   ELSE
+      SELECT NVL(Last_Number, 0) INTO last_Sequence
+        FROM User_Sequences
+       WHERE UPPER(Sequence_Name) = UPPER(\''.$sequenceName.'\');
+      SELECT :NEW.id INTO last_InsertID FROM DUAL;
+      WHILE (last_InsertID > last_Sequence) LOOP
+         SELECT ' . $sequenceName . '.NEXTVAL INTO last_Sequence FROM DUAL;
+      END LOOP;
+   END IF;
+END;
+';
+        return $sql;
+    }
+    /**
+     * drop an existing autoincrement sequence + trigger
+     *
+     * @param string $table name of the table
+     * @return void
+     */
+    public function dropAutoincrement($table)
+    {
+        $table = strtoupper($table);
+        $triggerName = $table . '_AI_PK';
+        $trigger_name_quoted = $this->conn->quote($triggerName);
+        $query = 'SELECT trigger_name FROM user_triggers';
+        $query.= ' WHERE trigger_name='.$trigger_name_quoted.' OR trigger_name='.strtoupper($trigger_name_quoted);
+        $trigger = $this->conn->fetchOne($query);
+
+        if ($trigger) {
+            $trigger_name  = $this->conn->quoteIdentifier($table . '_AI_PK', true);
+            $trigger_sql = 'DROP TRIGGER ' . $trigger_name;
+
+            // if throws exception, trigger for autoincrement PK could not be dropped
+            $this->conn->exec($trigger_sql);
+
+            // if throws exception, sequence for autoincrement PK could not be dropped
+            $this->dropSequence($table);
+
+            $indexName = $table . '_AI_PK';
+
+            // if throws exception, primary key for autoincrement PK could not be dropped
+            $this->dropConstraint($table, $indexName);
+        }
+    }
+   /**
+     * A method to return the required SQL string that fits between CREATE ... TABLE
+     * to create the table as a temporary table.
+     *
+     * @return string The string required to be placed between "CREATE" and "TABLE"
+     *                to generate a temporary table, if possible.
+     */
+    public function getTemporaryTableQuery()
+    {
+        return 'GLOBAL TEMPORARY';
+    }
+    /**
+     * getAdvancedForeignKeyOptions
+     * Return the FOREIGN KEY query section dealing with non-standard options
+     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
+     *
+     * @param array $definition         foreign key definition
+     * @return string
+     * @access protected
+     */
+    public function getAdvancedForeignKeyOptions(array $definition)
+    {
+        $query = '';
+        if (isset($definition['onDelete'])) {
+            $query .= ' ON DELETE ' . $definition['onDelete'];
+        }
+        if (isset($definition['deferrable'])) {
+            $query .= ' DEFERRABLE';
+        } else {
+            $query .= ' NOT DEFERRABLE';
+        }
+        if (isset($definition['feferred'])) {
+            $query .= ' INITIALLY DEFERRED';
+        } else {
+            $query .= ' INITIALLY IMMEDIATE';
+        }
+        return $query;
+    }
+
+    /**
+     * create a new table
+     *
+     * @param string $name     Name of the database that should be created
+     * @param array $fields Associative array that contains the definition of each field of the new table
+     *                        The indexes of the array entries are the names of the fields of the table an
+     *                        the array entry values are associative arrays like those that are meant to be
+     *                         passed with the field definitions to get[Type]Declaration() functions.
+     *
+     *                        Example
+     *                        array(
+     *
+     *                            'id' => array(
+     *                                'type' => 'integer',
+     *                                'unsigned' => 1
+     *                                'notnull' => 1
+     *                                'default' => 0
+     *                            ),
+     *                            'name' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12
+     *                            ),
+     *                            'password' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12
+     *                            )
+     *                        );
+     * @param array $options  An associative array of table options:
+     *
+     * @return void
+     */
+    public function createTable($name, array $fields, array $options = array())
+    {
+        $this->conn->beginTransaction();
+
+        foreach ($this->createTableSql($name, $fields, $options) as $sql) {
+            $this->conn->exec($sql);
+        }
+
+        $this->conn->commit();
+    }
+
+    /**
+     * create a new table
+     *
+     * @param string $name     Name of the database that should be created
+     * @param array $fields Associative array that contains the definition of each field of the new table
+     *                        The indexes of the array entries are the names of the fields of the table an
+     *                        the array entry values are associative arrays like those that are meant to be
+     *                         passed with the field definitions to get[Type]Declaration() functions.
+     *
+     *                        Example
+     *                        array(
+     *
+     *                            'id' => array(
+     *                                'type' => 'integer',
+     *                                'unsigned' => 1
+     *                                'notnull' => 1
+     *                                'default' => 0
+     *                            ),
+     *                            'name' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12
+     *                            ),
+     *                            'password' => array(
+     *                                'type' => 'text',
+     *                                'length' => 12
+     *                            )
+     *                        );
+     * @param array $options  An associative array of table options:
+     *
+     * @return void
+     */
+    public function createTableSql($name, array $fields, array $options = array(), $exportForeignKeySql = true)
+    {
+        $sql = parent::createTableSql($name, $fields, $options, $exportForeignKeySql);
+
+        foreach ($fields as $fieldName => $field) {
+            if (isset($field['autoincrement']) && $field['autoincrement'] ||
+               (isset($field['autoinc']) && $fields['autoinc'])) {           
+                $sql = array_merge($sql, $this->_makeAutoincrement($fieldName, $name));
+            }
+        }
+
+        return $sql;
+    }
+    /**
+     * drop an existing table
+     *
+     * @param string $name name of the table that should be dropped
+     * @return void
+     */
+    public function dropTable($name)
+    {
+        //$this->conn->beginNestedTransaction();
+        $result = $this->dropAutoincrement($name);
+        $result = parent::dropTable($name);
+        //$this->conn->completeNestedTransaction();
+        return $result;
+    }
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the MDB2 parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the MDB2 parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @return void
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+
+        foreach ($changes as $changeName => $change) {
+            switch ($changeName) {
+                case 'add':
+                case 'remove':
+                case 'change':
+                case 'name':
+                case 'rename':
+                    break;
+                default:
+                    throw new Doctrine_Export_Exception('change type "' . $changeName . '" not yet supported');
+            }
+        }
+
+        if ($check) {
+            return false;
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+
+        if ( ! empty($changes['add']) && is_array($changes['add'])) {
+            $fields = array();
+            foreach ($changes['add'] as $fieldName => $field) {
+                $fields[] = $this->conn->getDeclaration($field['type'], $fieldName, $field);
+            }
+            $result = $this->conn->exec('ALTER TABLE ' . $name . ' ADD (' . implode(', ', $fields) . ')');
+        }
+
+        if ( ! empty($changes['change']) && is_array($changes['change'])) {
+            $fields = array();
+            foreach ($changes['change'] as $fieldName => $field) {
+                $fields[] = $fieldName. ' ' . $this->conn->getDeclaration($field['definition']['type'], '', $field['definition']);
+            }
+            $result = $this->conn->exec('ALTER TABLE ' . $name . ' MODIFY (' . implode(', ', $fields) . ')');
+        }
+
+        if ( ! empty($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $fieldName => $field) {
+                $query = 'ALTER TABLE ' . $name . ' RENAME COLUMN ' . $this->conn->quoteIdentifier($fieldName, true)
+                       . ' TO ' . $this->conn->quoteIdentifier($field['name']);
+
+                $result = $this->conn->exec($query);
+            }
+        }
+
+        if ( ! empty($changes['remove']) && is_array($changes['remove'])) {
+            $fields = array();
+            foreach ($changes['remove'] as $fieldName => $field) {
+                $fields[] = $this->conn->quoteIdentifier($fieldName, true);
+            }
+            $result = $this->conn->exec('ALTER TABLE ' . $name . ' DROP COLUMN ' . implode(', ', $fields));
+        }
+
+        if ( ! empty($changes['name'])) {
+            $changeName = $this->conn->quoteIdentifier($changes['name'], true);
+            $result = $this->conn->exec('ALTER TABLE ' . $name . ' RENAME TO ' . $changeName);
+        }
+    }
+    /**
+     * create sequence
+     *
+     * @param string $seqName name of the sequence to be created
+     * @param string $start start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return string
+     */
+    public function createSequenceSql($seqName, $start = 1, array $options = array())
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $query  = 'CREATE SEQUENCE ' . $sequenceName . ' START WITH ' . $start . ' INCREMENT BY 1 NOCACHE';
+        $query .= ($start < 1 ? ' MINVALUE ' . $start : '');
+        return $query;
+    }
+    /**
+     * drop existing sequence
+     *
+     * @param object $this->conn database object that is extended by this class
+     * @param string $seqName name of the sequence to be dropped
+     * @return string
+     */
+    public function dropSequenceSql($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        return 'DROP SEQUENCE ' . $sequenceName;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..30f4f0ed3effe84fdf3fdaaf22a8c72ce0435d33
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Pgsql.php
@@ -0,0 +1,349 @@
+<?php
+/*
+ *  $Id: Pgsql.php 2277 2007-08-27 14:43:52Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Pgsql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2277 $
+ */
+class Doctrine_Export_Pgsql extends Doctrine_Export
+{
+   /**
+     * create a new database
+     *
+     * @param string $name name of the database that should be created
+     * @throws PDOException
+     * @return void
+     */
+    public function createDatabaseSql($name)
+    {
+        $query  = 'CREATE DATABASE ' . $this->conn->quoteIdentifier($name);
+        
+        return $query;
+    }
+    /**
+     * drop an existing database
+     *
+     * @param string $name name of the database that should be dropped
+     * @throws PDOException
+     * @access public
+     */
+    public function dropDatabaseSql($name)
+    {
+        $query  = 'DROP DATABASE ' . $this->conn->quoteIdentifier($name);
+        
+        return $query;
+    }
+    /**
+     * getAdvancedForeignKeyOptions
+     * Return the FOREIGN KEY query section dealing with non-standard options
+     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
+     *
+     * @param array $definition         foreign key definition
+     * @return string
+     * @access protected
+     */
+    public function getAdvancedForeignKeyOptions(array $definition)
+    {
+        $query = '';
+        if (isset($definition['match'])) {
+            $query .= ' MATCH ' . $definition['match'];
+        }
+        if (isset($definition['onUpdate'])) {
+            $query .= ' ON UPDATE ' . $definition['onUpdate'];
+        }
+        if (isset($definition['onDelete'])) {
+            $query .= ' ON DELETE ' . $definition['onDelete'];
+        }
+        if (isset($definition['deferrable'])) {
+            $query .= ' DEFERRABLE';
+        } else {
+            $query .= ' NOT DEFERRABLE';
+        }
+        if (isset($definition['feferred'])) {
+            $query .= ' INITIALLY DEFERRED';
+        } else {
+            $query .= ' INITIALLY IMMEDIATE';
+        }
+        return $query;
+    }
+
+    /**
+     * alter an existing table
+     *
+     * @param string $name         name of the table that is intended to be changed.
+     * @param array $changes     associative array that contains the details of each type
+     *                             of change that is intended to be performed. The types of
+     *                             changes that are currently supported are defined as follows:
+     *
+     *                             name
+     *
+     *                                New name for the table.
+     *
+     *                            add
+     *
+     *                                Associative array with the names of fields to be added as
+     *                                 indexes of the array. The value of each entry of the array
+     *                                 should be set to another associative array with the properties
+     *                                 of the fields to be added. The properties of the fields should
+     *                                 be the same as defined by the Metabase parser.
+     *
+     *
+     *                            remove
+     *
+     *                                Associative array with the names of fields to be removed as indexes
+     *                                 of the array. Currently the values assigned to each entry are ignored.
+     *                                 An empty array should be used for future compatibility.
+     *
+     *                            rename
+     *
+     *                                Associative array with the names of fields to be renamed as indexes
+     *                                 of the array. The value of each entry of the array should be set to
+     *                                 another associative array with the entry named name with the new
+     *                                 field name and the entry named Declaration that is expected to contain
+     *                                 the portion of the field declaration already in DBMS specific SQL code
+     *                                 as it is used in the CREATE TABLE statement.
+     *
+     *                            change
+     *
+     *                                Associative array with the names of the fields to be changed as indexes
+     *                                 of the array. Keep in mind that if it is intended to change either the
+     *                                 name of a field and any other properties, the change array entries
+     *                                 should have the new names of the fields as array indexes.
+     *
+     *                                The value of each entry of the array should be set to another associative
+     *                                 array with the properties of the fields to that are meant to be changed as
+     *                                 array entries. These entries should be assigned to the new values of the
+     *                                 respective properties. The properties of the fields should be the same
+     *                                 as defined by the Metabase parser.
+     *
+     *                            Example
+     *                                array(
+     *                                    'name' => 'userlist',
+     *                                    'add' => array(
+     *                                        'quota' => array(
+     *                                            'type' => 'integer',
+     *                                            'unsigned' => 1
+     *                                        )
+     *                                    ),
+     *                                    'remove' => array(
+     *                                        'file_limit' => array(),
+     *                                        'time_limit' => array()
+     *                                    ),
+     *                                    'change' => array(
+     *                                        'name' => array(
+     *                                            'length' => '20',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 20,
+     *                                            ),
+     *                                        )
+     *                                    ),
+     *                                    'rename' => array(
+     *                                        'sex' => array(
+     *                                            'name' => 'gender',
+     *                                            'definition' => array(
+     *                                                'type' => 'text',
+     *                                                'length' => 1,
+     *                                                'default' => 'M',
+     *                                            ),
+     *                                        )
+     *                                    )
+     *                                )
+     *
+     * @param boolean $check     indicates whether the function should just check if the DBMS driver
+     *                             can perform the requested table alterations if the value is true or
+     *                             actually perform them otherwise.
+     * @throws Doctrine_Connection_Exception
+     * @return boolean
+     */
+    public function alterTable($name, array $changes, $check)
+    {
+        foreach ($changes as $changeName => $change) {
+            switch ($changeName) {
+                case 'add':
+                case 'remove':
+                case 'change':
+                case 'name':
+                case 'rename':
+                    break;
+                default:
+                    throw new Doctrine_Export_Exception('change type "' . $changeName . '\" not yet supported');
+            }
+        }
+
+        if ($check) {
+            return true;
+        }
+
+        if (isset($changes['add']) && is_array($changes['add'])) {
+            foreach ($changes['add'] as $fieldName => $field) {
+                $query = 'ADD ' . $this->conn->getDeclaration($field['type'], $fieldName, $field);
+                $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+            }
+        }
+
+        if (isset($changes['remove']) && is_array($changes['remove'])) {
+            foreach ($changes['remove'] as $fieldName => $field) {
+                $fieldName = $this->conn->quoteIdentifier($fieldName, true);
+                $query = 'DROP ' . $fieldName;
+                $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+            }
+        }
+
+        if (isset($changes['change']) && is_array($changes['change'])) {
+            foreach ($changes['change'] as $fieldName => $field) {
+                $fieldName = $this->conn->quoteIdentifier($fieldName, true);
+                if (isset($field['type'])) {
+                    $serverInfo = $this->conn->getServerVersion();
+
+                    if (is_array($serverInfo) && $serverInfo['major'] < 8) {
+                        throw new Doctrine_Export_Exception('changing column type for "'.$field['type'].'\" requires PostgreSQL 8.0 or above');
+                    }
+                    $query = 'ALTER ' . $fieldName . ' TYPE ' . $this->conn->datatype->getTypeDeclaration($field['definition']);
+                    $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);;
+                }
+                if (array_key_exists('default', $field)) {
+                    $query = 'ALTER ' . $fieldName . ' SET DEFAULT ' . $this->conn->quote($field['definition']['default'], $field['definition']['type']);
+                    $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+                }
+                if (!empty($field['notnull'])) {
+                    $query = 'ALTER ' . $fieldName . ' ' . ($field['definition']['notnull'] ? 'SET' : 'DROP') . ' NOT NULL';
+                    $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
+                }
+            }
+        }
+
+        if (isset($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $fieldName => $field) {
+                $fieldName = $this->conn->quoteIdentifier($fieldName, true);
+                $this->conn->exec('ALTER TABLE ' . $name . ' RENAME COLUMN ' . $fieldName . ' TO ' . $this->conn->quoteIdentifier($field['name'], true));
+            }
+        }
+
+        $name = $this->conn->quoteIdentifier($name, true);
+        if (isset($changes['name'])) {
+            $changeName = $this->conn->quoteIdentifier($changes['name'], true);
+            $this->conn->exec('ALTER TABLE ' . $name . ' RENAME TO ' . $changeName);
+        }
+    }
+    /**
+     * return RDBMS specific create sequence statement
+     *
+     * @throws Doctrine_Connection_Exception     if something fails at database level
+     * @param string    $seqName        name of the sequence to be created
+     * @param string    $start          start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return string
+     */
+    public function createSequenceSql($sequenceName, $start = 1, array $options = array())
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName), true);
+        return $this->conn->exec('CREATE SEQUENCE ' . $sequenceName . ' INCREMENT 1' .
+                    ($start < 1 ? ' MINVALUE ' . $start : '') . ' START ' . $start);
+    }
+    /**
+     * drop existing sequence
+     *
+     * @param string $sequenceName name of the sequence to be dropped
+     */
+    public function dropSequenceSql($sequenceName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName), true);
+        return 'DROP SEQUENCE ' . $sequenceName;
+    }
+
+    /**
+     * Creates a table.
+     *
+     * @param unknown_type $name
+     * @param array $fields
+     * @param array $options
+     * @return unknown
+     */
+    public function createTableSql($name, array $fields, array $options = array(), $exportForeignKeySql = true)
+    {
+        if ( ! $name) {
+            throw new Doctrine_Export_Exception('no valid table name specified');
+        }
+        
+        if (empty($fields)) {
+            throw new Doctrine_Export_Exception('no fields specified for table ' . $name);
+        }
+
+        $queryFields = $this->getFieldDeclarationList($fields);
+
+
+        if (isset($options['primary']) && ! empty($options['primary'])) {
+            $queryFields .= ', PRIMARY KEY(' . implode(', ', array_values($options['primary'])) . ')';
+        }
+
+        $query = 'CREATE TABLE ' . $this->conn->quoteIdentifier($name, true) . ' (' . $queryFields . ')';
+
+        $sql[] = $query;
+
+        if (isset($options['indexes']) && ! empty($options['indexes'])) {
+            foreach($options['indexes'] as $index => $definition) {
+                $sql[] = $this->createIndexSql($name, $index, $definition);
+            }
+        }
+        
+        if (isset($options['foreignKeys']) && $exportForeignKeySql) {
+
+            foreach ((array) $options['foreignKeys'] as $k => $definition) {
+                if (is_array($definition)) {
+                    $sql[] = $this->createForeignKeySql($name, $definition);
+                }
+            }
+        }
+        
+        return $sql;
+    }
+    
+    /**
+     * createForeignKeySql
+     *
+     * @param string    $table         name of the table on which the foreign key is to be created
+     * @param array     $definition    associative array that defines properties of the foreign key to be created.
+     * @return string
+     */
+    public function createForeignKeySql($table, array $definition)
+    {
+        $table = $this->conn->quoteIdentifier($table);
+
+        $query = 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclaration($definition);
+
+        return $query;
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Reporter.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Reporter.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d7d83fb8b1e9361c03f32bd6f7acd02e0e5af86
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Reporter.php
@@ -0,0 +1,45 @@
+<?php
+/*
+ *  $Id: Reporter.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Export_Reporter
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Export_Reporter implements IteratorAggregate {
+    protected $messages = array();
+
+    public function add($code, $message) {
+        $this->messages[] = array($code, $message);
+    }
+    public function pop() {
+        return array_pop($this->messages);
+    }
+    public function getIterator() {
+        return new ArrayIterator($this->messages);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbe35b5c35fbbaa9c3444462ded5b6577f51ecbc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema.php
@@ -0,0 +1,89 @@
+<?php
+/*
+ * $Id: Schema.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Export_Schema
+ *
+ * Different methods to import a XML schema. The logic behind using two different
+ * methods is simple. Some people will like the idea of producing Doctrine_Record
+ * objects directly, which is totally fine. But in fast and growing application,
+ * table definitions tend to be a little bit more volatile. importArr() can be used
+ * to output a table definition in a PHP file. This file can then be stored 
+ * independantly from the object itself.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ */
+abstract class Doctrine_Export_Schema
+{
+    /**
+     * build
+     * 
+     * Build the schema string to be dumped to file
+     *
+     * @param string $array 
+     * @return void
+     */
+    abstract function build($array);
+    
+    /**
+     * dump
+     * 
+     * Dump the array to the schema file
+     *
+     * @param string $array
+     * @param string $schema
+     * @return void
+     */
+    abstract function dump($array, $schema);
+    
+    /**
+     * buildSchema
+     * 
+     * Build schema array that can be dumped to file
+     *
+     * @param string $directory 
+     * @return void
+     */
+    public function buildSchema($directory)
+    {
+        // we need to figure out how we can build all the model information for the passed directory/directories
+        return array();
+    }
+    
+    /**
+     * exportSchema
+     *
+     * @param string $schema 
+     * @param string $directory 
+     * @return void
+     */
+    public function exportSchema($schema, $directory)
+    {
+        $array = $this->buildSchema($directory);
+        
+        $this->dump($arr, $schema);
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Xml.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Xml.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd062550fe93e8f22867eab541bf73084c18f00a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Xml.php
@@ -0,0 +1,79 @@
+<?php
+/*
+ * $Id: Xml.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Export_Schema_Xml
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ */
+class Doctrine_Export_Schema_Xml extends Doctrine_Export_Schema
+{
+    /**
+     * build
+     * 
+     * Build the schema xml string to be dumped to file
+     *
+     * @param string $array 
+     * @return void
+     */
+    public function build($array)
+    {
+        $xml = new SimpleXMLElement();
+        
+        foreach ($array as $tableName => $fields) {
+            $table = $xml->addChild('table');
+            $name = $table->addChild('name', $tableName);
+            $declaration = $table->addChild('declaration');
+            
+            foreach ($fields as $fieldName => $properties) {
+                $field = $declaration->addChild('field');
+                $field->addChild('name', $fieldName);
+                
+                foreach ($properties as $key => $value) {
+                    $field->addChild($key, $value);
+                }
+            }
+        }
+        
+        return $xml->asXml();
+    }
+    
+    /**
+     * dump
+     * 
+     * Dump the array to the schema file
+     *
+     * @param string $array
+     * @param string $schema
+     * @return void
+     */
+    public function dump($array, $schema)
+    {
+        $xml = $this->build($array);
+        
+        file_put_contents($schema, $xml);
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Yml.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..271f1d496ba019183aa207ebc870bb7cf99350a8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Schema/Yml.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ * $Id: Yml.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Export_Schema_Yml
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ */
+class Doctrine_Export_Schema_Yml extends Doctrine_Export_Schema
+{
+    /**
+     * build
+     * 
+     * Build the schema yml string to be dumped to file
+     *
+     * @param string $array 
+     * @return void
+     */
+    public function build($array)
+    {
+        return var_dump($array);
+    }
+    
+    /**
+     * dump
+     * 
+     * Dump the array to the schema file
+     *
+     * @param string $arr 
+     * @param string $schema
+     * @return void
+     */
+    public function dump($arr, $schema)
+    {
+        $yml = $this->build($array);
+        
+        file_put_contents($schema, $yml);
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..89298ccb9d24562a1f1ec51b329dc9d0c31dd249
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Export/Sqlite.php
@@ -0,0 +1,328 @@
+<?php
+/*
+ *  $Id: Sqlite.php 2277 2007-08-27 14:43:52Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Export');
+/**
+ * Doctrine_Export_Sqlite
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2277 $
+ */
+class Doctrine_Export_Sqlite extends Doctrine_Export
+{
+    /**
+     * drop an existing database
+     *
+     * @param string $name                  name of the database that should be dropped
+     * @throws Doctrine_Export_Exception    if the database file does not exist
+     * @throws Doctrine_Export_Exception    if something failed during the removal of the database file
+     * @return void
+     */
+    public function dropDatabase($name)
+    {
+        $databaseFile = $this->conn->getDatabaseFile($name);
+        if (!@file_exists($databaseFile)) {
+            throw new Doctrine_Export_Exception('database does not exist');
+        }
+        $result = @unlink($databaseFile);
+        if ( ! $result) {
+            throw new Doctrine_Export_Exception('could not remove the database file');
+        }
+    }
+
+    /**
+     * Get the stucture of a field into an array
+     *
+     * @param string    $table         name of the table on which the index is to be created
+     * @param string    $name         name of the index to be created
+     * @param array     $definition        associative array that defines properties of the index to be created.
+     *                                 Currently, only one property named FIELDS is supported. This property
+     *                                 is also an associative with the names of the index fields as array
+     *                                 indexes. Each entry of this array is set to another type of associative
+     *                                 array that specifies properties of the index that are specific to
+     *                                 each field.
+     *
+     *                                Currently, only the sorting property is supported. It should be used
+     *                                 to define the sorting direction of the index. It may be set to either
+     *                                 ascending or descending.
+     *
+     *                                Not all DBMS support index sorting direction configuration. The DBMS
+     *                                 drivers of those that do not support it ignore this property. Use the
+     *                                 function support() to determine whether the DBMS driver can manage indexes.
+
+     *                                 Example
+     *                                    array(
+     *                                        'fields' => array(
+     *                                            'user_name' => array(
+     *                                                'sorting' => 'ascending'
+     *                                            ),
+     *                                            'last_login' => array()
+     *                                        )
+     *                                    )
+     * @throws PDOException
+     * @return void
+     */
+    public function createIndexSql($table, $name, array $definition)
+    {
+        $table = $this->conn->quoteIdentifier($table, true);
+        $name  = $this->conn->formatter->getIndexName($name);
+        $query = 'CREATE INDEX ' . $name . ' ON ' . $table;
+        $query .= ' (' . $this->getIndexFieldDeclarationList($definition['fields']) . ')';
+
+        return $query;
+    }
+    /**
+     * getIndexFieldDeclarationList
+     * Obtain DBMS specific SQL code portion needed to set an index
+     * declaration to be used in statements like CREATE TABLE.
+     *
+     * @return string   
+     */
+    public function getIndexFieldDeclarationList(array $fields)
+    {
+    	$declFields = array();
+
+        foreach ($fields as $fieldName => $field) {
+            $fieldString = $fieldName;
+
+            if (is_array($field)) {
+                if (isset($field['sorting'])) {
+                    $sort = strtoupper($field['sorting']);
+                    switch ($sort) {
+                        case 'ASC':
+                        case 'DESC':
+                            $fieldString .= ' ' . $sort;
+                            break;
+                        default:
+                            throw new Doctrine_Export_Exception('Unknown index sorting option given.');
+                    }
+                }
+            } else {
+                $fieldString = $field;
+            }
+            $declFields[] = $fieldString;
+        }
+        return implode(', ', $declFields);
+    }
+    /**
+     * create a new table
+     *
+     * @param string $name   Name of the database that should be created
+     * @param array $fields  Associative array that contains the definition of each field of the new table
+     *                       The indexes of the array entries are the names of the fields of the table an
+     *                       the array entry values are associative arrays like those that are meant to be
+     *                       passed with the field definitions to get[Type]Declaration() functions.
+     *                          array(
+     *                              'id' => array(
+     *                                  'type' => 'integer',
+     *                                  'unsigned' => 1
+     *                                  'notnull' => 1
+     *                                  'default' => 0
+     *                              ),
+     *                              'name' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              ),
+     *                              'password' => array(
+     *                                  'type' => 'text',
+     *                                  'length' => 12
+     *                              )
+     *                          );
+     * @param array $options  An associative array of table options:
+     *
+     * @return void
+     */
+    public function createTableSql($name, array $fields, array $options = array(), $exportForeignKeySql = true)
+    {
+        if ( ! $name) {
+            throw new Doctrine_Export_Exception('no valid table name specified');
+        }
+        
+        if (empty($fields)) {
+            throw new Doctrine_Export_Exception('no fields specified for table '.$name);
+        }
+        $queryFields = $this->getFieldDeclarationList($fields);
+        
+        $autoinc = false;
+        foreach($fields as $field) {
+            if(isset($field['autoincrement']) && $field['autoincrement'] || 
+              (isset($field['autoinc']) && $field['autoinc'])) {
+                $autoinc = true;
+                break;
+            }
+        }
+
+        if ( ! $autoinc && isset($options['primary']) && ! empty($options['primary'])) {
+            $queryFields.= ', PRIMARY KEY('.implode(', ', array_values($options['primary'])).')';
+        }
+
+        $name  = $this->conn->quoteIdentifier($name, true);
+        $sql   = 'CREATE TABLE ' . $name . ' (' . $queryFields;
+
+        if ($check = $this->getCheckDeclaration($fields)) {
+            $sql .= ', ' . $check;
+        }
+
+        if (isset($options['checks']) && $check = $this->getCheckDeclaration($options['checks'])) {
+            $sql .= ', ' . $check;
+        }
+
+        $sql .= ')';
+
+        $query[] = $sql;
+
+        if (isset($options['indexes']) && ! empty($options['indexes'])) {
+            foreach ($options['indexes'] as $index => $definition) {
+                $query[] = $this->createIndexSql($name, $index, $definition);
+            }
+        }
+        return $query;
+        
+        
+        /**
+        try {
+
+            if ( ! empty($fk)) {
+                $this->conn->beginTransaction();
+            }
+
+            $ret   = $this->conn->exec($query);
+
+            if ( ! empty($fk)) {
+                foreach ($fk as $definition) {
+
+                    $query = 'CREATE TRIGGER doctrine_' . $name . '_cscd_delete '
+                           . 'AFTER DELETE ON ' . $name . ' FOR EACH ROW '
+                           . 'BEGIN '
+                           . 'DELETE FROM ' . $definition['foreignTable'] . ' WHERE ';
+
+                    $local = (array) $definition['local'];
+                    foreach((array) $definition['foreign'] as $k => $field) {
+                        $query .= $field . ' = old.' . $local[$k] . ';';
+                    }
+
+                    $query .= 'END;';
+
+                    $this->conn->exec($query);
+                }
+
+                $this->conn->commit();
+            }
+
+
+        } catch(Doctrine_Exception $e) {
+
+            $this->conn->rollback();
+
+            throw $e;
+        }
+        */
+    }
+    /**
+     * getAdvancedForeignKeyOptions
+     * Return the FOREIGN KEY query section dealing with non-standard options
+     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
+     *
+     * @param array $definition         foreign key definition
+     * @return string
+     * @access protected
+     */
+    public function getAdvancedForeignKeyOptions(array $definition)
+    {
+        $query = '';
+        if (isset($definition['match'])) {
+            $query .= ' MATCH ' . $definition['match'];
+        }
+        if (isset($definition['onUpdate'])) {
+            $query .= ' ON UPDATE ' . $definition['onUpdate'];
+        }
+        if (isset($definition['onDelete'])) {
+            $query .= ' ON DELETE ' . $definition['onDelete'];
+        }
+        if (isset($definition['deferrable'])) {
+            $query .= ' DEFERRABLE';
+        } else {
+            $query .= ' NOT DEFERRABLE';
+        }
+        if (isset($definition['feferred'])) {
+            $query .= ' INITIALLY DEFERRED';
+        } else {
+            $query .= ' INITIALLY IMMEDIATE';
+        }
+        return $query;
+    }
+    /**
+     * create sequence
+     *
+     * @param string    $seqName        name of the sequence to be created
+     * @param string    $start          start value of the sequence; default is 1
+     * @param array     $options  An associative array of table options:
+     *                          array(
+     *                              'comment' => 'Foo',
+     *                              'charset' => 'utf8',
+     *                              'collate' => 'utf8_unicode_ci',
+     *                          );
+     * @return boolean
+     */
+    public function createSequence($seqName, $start = 1, array $options = array())
+    {
+        $sequenceName   = $this->conn->quoteIdentifier($this->conn->getSequenceName($seqName), true);
+        $seqcolName     = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+        $query          = 'CREATE TABLE ' . $sequenceName . ' (' . $seqcolName . ' INTEGER PRIMARY KEY DEFAULT 0 NOT NULL)';
+
+        $this->conn->exec($query);
+
+        if ($start == 1) {
+            return true;
+        }
+
+        try {
+            $this->conn->exec('INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES (' . ($start-1) . ')');
+            return true;
+        } catch(Doctrine_Connection_Exception $e) {
+            // Handle error    
+
+            try {
+                $result = $db->exec('DROP TABLE ' . $sequenceName);
+            } catch(Doctrine_Connection_Exception $e) {
+                throw new Doctrine_Export_Exception('could not drop inconsistent sequence table');
+            }
+        }
+        throw new Doctrine_Export_Exception('could not create sequence table');
+    }
+    /**
+     * drop existing sequence
+     *
+     * @param string $sequenceName      name of the sequence to be dropped
+     * @return string
+     */
+    public function dropSequenceSql($sequenceName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->getSequenceName($sequenceName), true);
+
+        return 'DROP TABLE ' . $sequenceName;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebb17abdd84e59ad8bc6d31bf3fdfecc7f645304
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Expression.php 2283 2007-08-28 19:51:06Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Expression
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2283 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression
+{
+    protected $_expression;
+    
+    protected $_conn;
+
+    public function __construct($expr, $conn = null)
+    {
+        $this->setExpression($expr);
+        
+        if ($conn !== null) {
+            $this->_conn = $conn;
+        }
+    }
+
+    public function getConnection()
+    {
+        if ( ! isset($this->_conn)) {
+            return Doctrine_Manager::connection();
+        }
+
+        return $this->_conn;
+    }
+
+    public function setExpression($clause)
+    {
+        $this->_expression = $this->parseClause($clause);
+    }
+
+    public function parseExpression($expr)
+    {
+        $pos  = strpos($expr, '(');
+        if ($pos === false) {
+            return $expr;
+        }
+
+        // get the name of the function
+        $name   = substr($expr, 0, $pos);
+        $argStr = substr($expr, ($pos + 1), -1);
+
+        // parse args
+        foreach (Doctrine_Tokenizer::bracketExplode($argStr, ',') as $arg) {
+           $args[] = $this->parseClause($arg);
+        }
+
+        return call_user_func_array(array($this->getConnection()->expression, $name), $args);
+    }
+
+    public function parseClause($clause)
+    {
+    	$e = Doctrine_Tokenizer::bracketExplode($clause, ' ');
+
+        foreach ($e as $k => $expr) {
+            $e[$k] = $this->parseExpression($expr);
+        }
+        
+        return implode(' ', $e);
+    }
+
+    public function getSql()
+    {
+
+        return $this->_expression;
+    }
+
+    public function __toString()
+    {
+        return $this->getSql();
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Driver.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Driver.php
new file mode 100644
index 0000000000000000000000000000000000000000..4bc9de46cdd1ed8a5feb06d659f411a9aca83b40
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Driver.php
@@ -0,0 +1,711 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Expression_Driver
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Driver extends Doctrine_Connection_Module
+{
+    public function getIdentifier($column)
+    {
+        return $column;
+    }
+    public function getIdentifiers($columns)
+    {
+        return $columns;
+    }
+    /**
+     * regexp
+     * returns the regular expression operator
+     *
+     * @return string
+     */
+    public function regexp()
+    {
+        throw new Doctrine_Expression_Exception('Regular expression operator is not supported by this database driver.');
+    }
+    /**
+     * Returns the average value of a column
+     *
+     * @param string $column    the column to use
+     * @return string           generated sql including an AVG aggregate function
+     */
+    public function avg($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'AVG(' .  $column . ')';
+    }
+
+    /**
+     * Returns the number of rows (without a NULL value) of a column
+     *
+     * If a '*' is used instead of a column the number of selected rows
+     * is returned.
+     *
+     * @param string|integer $column    the column to use
+     * @return string                   generated sql including a COUNT aggregate function
+     */
+    public function count($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'COUNT(' . $column . ')';
+    }
+
+    /**
+     * Returns the highest value of a column
+     *
+     * @param string $column    the column to use
+     * @return string           generated sql including a MAX aggregate function
+     */
+    public function max($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'MAX(' . $column . ')';
+    }
+
+    /**
+     * Returns the lowest value of a column
+     *
+     * @param string $column the column to use
+     * @return string
+     */
+    public function min($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'MIN(' . $column . ')';
+    }
+
+    /**
+     * Returns the total sum of a column
+     *
+     * @param string $column the column to use
+     * @return string
+     */
+    public function sum($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'SUM(' . $column . ')';
+    }
+
+    // scalar functions
+
+    /**
+     * Returns the md5 sum of a field.
+     *
+     * Note: Not SQL92, but common functionality
+     *
+     * @return string
+     */
+    public function md5($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'MD5(' . $column . ')';
+    }
+
+    /**
+     * Returns the length of a text field.
+     *
+     * @param string $expression1
+     * @param string $expression2
+     * @return string
+     */
+    public function length($column)
+    {
+        $column = $this->getIdentifier($column);
+        return 'LENGTH(' . $column . ')';
+    }
+
+    /**
+     * Rounds a numeric field to the number of decimals specified.
+     *
+     * @param string $expression1
+     * @param string $expression2
+     * @return string
+     */
+    public function round($column, $decimals = 0)
+    {
+        $column = $this->getIdentifier($column);
+
+        return 'ROUND(' . $column . ', ' . $decimals . ')';
+    }
+
+    /**
+     * Returns the remainder of the division operation
+     * $expression1 / $expression2.
+     *
+     * @param string $expression1
+     * @param string $expression2
+     * @return string
+     */
+    public function mod($expression1, $expression2)
+    {
+        $expression1 = $this->getIdentifier($expression1);
+        $expression2 = $this->getIdentifier($expression2);
+        return 'MOD(' . $expression1 . ', ' . $expression2 . ')';
+    }
+
+    /**
+     * trim
+     * returns the string $str with leading and proceeding space characters removed
+     *
+     * @param string $str       literal string or column name
+     * @return string
+     */
+    public function trim($str)
+    {
+        return 'TRIM(' . $str . ')';
+    }
+
+    /**
+     * rtrim
+     * returns the string $str with proceeding space characters removed
+     *
+     * @param string $str       literal string or column name
+     * @return string
+     */
+    public function rtrim($str)
+    {
+        return 'RTRIM(' . $str . ')';
+    }
+
+    /**
+     * ltrim
+     * returns the string $str with leading space characters removed
+     *
+     * @param string $str       literal string or column name
+     * @return string
+     */
+    public function ltrim($str)
+    {
+        return 'LTRIM(' . $str . ')';
+    }
+    /**
+     * upper
+     * Returns the string $str with all characters changed to
+     * uppercase according to the current character set mapping.
+     *
+     * @param string $str       literal string or column name
+     * @return string
+     */
+    public function upper($str)
+    {
+        return 'UPPER(' . $str . ')';
+    }
+    /**
+     * lower
+     * Returns the string $str with all characters changed to
+     * lowercase according to the current character set mapping.
+     *
+     * @param string $str       literal string or column name
+     * @return string
+     */
+    public function lower($str)
+    {
+        return 'LOWER(' . $str . ')';
+    }
+    /**
+     * locate
+     * returns the position of the first occurrence of substring $substr in string $str
+     *
+     * @param string $substr    literal string to find
+     * @param string $str       literal string
+     * @return integer
+     */
+    public function locate($str, $substr)
+    {
+        return 'LOCATE(' . $str . ', ' . $substr . ')';
+    }
+    /**
+     * Returns the current system date.
+     *
+     * @return string
+     */
+    public function now()
+    {
+        return 'NOW()';
+    }
+    /**
+     * soundex
+     * Returns a string to call a function to compute the
+     * soundex encoding of a string
+     *
+     * The string "?000" is returned if the argument is NULL.
+     *
+     * @param string $value
+     * @return string   SQL soundex function with given parameter
+     */
+    public function soundex($value)
+    {
+        throw new Doctrine_Expression_Exception('SQL soundex function not supported by this driver.');
+    }
+    /**
+     * return string to call a function to get a substring inside an SQL statement
+     *
+     * Note: Not SQL92, but common functionality.
+     *
+     * SQLite only supports the 2 parameter variant of this function
+     *
+     * @param string $value         an sql string literal or column name/alias
+     * @param integer $position     where to start the substring portion
+     * @param integer $length       the substring portion length
+     * @return string               SQL substring function with given parameters
+     */
+    public function substring($value, $from, $len = null)
+    {
+        $value = $this->getIdentifier($value);
+        if ($len === null)
+            return 'SUBSTRING(' . $value . ' FROM ' . $from . ')';
+        else {
+            $len = $this->getIdentifier($len);
+            return 'SUBSTRING(' . $value . ' FROM ' . $from . ' FOR ' . $len . ')';
+        }
+    }
+    /**
+     * Returns a series of strings concatinated
+     *
+     * concat() accepts an arbitrary number of parameters. Each parameter
+     * must contain an expression or an array with expressions.
+     *
+     * @param string|array(string) strings that will be concatinated.
+     */
+    public function concat()
+    {
+    	$args = func_get_args();
+
+        return 'CONCAT(' . join(', ', (array) $args) . ')';
+    }
+    /**
+     * Returns the SQL for a logical not.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $e = $q->expr;
+     * $q->select('*')->from('table')
+     *   ->where($e->eq('id', $e->not('null'));
+     * </code>
+     *
+     * @return string a logical expression
+     */
+    public function not($expression)
+    {
+        $expression = $this->getIdentifier($expression);
+        return 'NOT(' . $expression . ')';
+    }
+    /**
+     * Returns the SQL to perform the same mathematical operation over an array
+     * of values or expressions.
+     *
+     * basicMath() accepts an arbitrary number of parameters. Each parameter
+     * must contain a value or an expression or an array with values or
+     * expressions.
+     *
+     * @param string $type the type of operation, can be '+', '-', '*' or '/'.
+     * @param string|array(string)
+     * @return string an expression
+     */
+    private function basicMath($type, array $args)
+    {
+        $elements = $this->getIdentifiers($args);
+        if (count($elements) < 1) {
+            return '';
+        }
+        if (count($elements) == 1) {
+            return $elements[0];
+        } else {
+            return '(' . implode(' ' . $type . ' ', $elements) . ')';
+        }
+    }
+    /**
+     * Returns the SQL to add values or expressions together.
+     *
+     * add() accepts an arbitrary number of parameters. Each parameter
+     * must contain a value or an expression or an array with values or
+     * expressions.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $e = $q->expr;
+     *
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($e->eq($e->add('id', 2), 12));
+     * </code>
+     *
+     * @param string|array(string)
+     * @return string an expression
+     */
+    public function add(array $args)
+    {
+        return $this->basicMath('+', $args);
+    }
+
+    /**
+     * Returns the SQL to subtract values or expressions from eachother.
+     *
+     * subtract() accepts an arbitrary number of parameters. Each parameter
+     * must contain a value or an expression or an array with values or
+     * expressions.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $e = $q->expr;
+     *
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($e->eq($e->sub('id', 2), 12));
+     * </code>
+     *
+     * @param string|array(string)
+     * @return string an expression
+     */
+    public function sub(array $args)
+    {
+        return $this->basicMath('-', $args );
+    }
+
+    /**
+     * Returns the SQL to multiply values or expressions by eachother.
+     *
+     * multiply() accepts an arbitrary number of parameters. Each parameter
+     * must contain a value or an expression or an array with values or
+     * expressions.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $e = $q->expr;
+     *
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($e->eq($e->mul('id', 2), 12));
+     * </code>
+     *
+     * @param string|array(string)
+     * @return string an expression
+     */
+    public function mul(array $args)
+    {
+        return $this->basicMath('*', $args);
+    }
+
+    /**
+     * Returns the SQL to divide values or expressions by eachother.
+     *
+     * divide() accepts an arbitrary number of parameters. Each parameter
+     * must contain a value or an expression or an array with values or
+     * expressions.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $e = $q->expr;
+     *
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($e->eq($e->div('id', 2), 12));
+     * </code>
+     *
+     * @param string|array(string)
+     * @return string an expression
+     */
+    public function div(array $args)
+    {
+        return $this->basicMath('/', $args);
+    }
+
+    /**
+     * Returns the SQL to check if two values are equal.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->eq('id', 1));
+     * </code>
+     *
+     * @param string $value1 logical expression to compare
+     * @param string $value2 logical expression to compare with
+     * @return string logical expression
+     */
+    public function eq($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' = ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if two values are unequal.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->neq('id', 1));
+     * </code>
+     *
+     * @param string $value1 logical expression to compare
+     * @param string $value2 logical expression to compare with
+     * @return string logical expression
+     */
+    public function neq($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' <> ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if one value is greater than another value.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->gt('id', 1));
+     * </code>
+     *
+     * @param string $value1 logical expression to compare
+     * @param string $value2 logical expression to compare with
+     * @return string logical expression
+     */
+    public function gt($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' > ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if one value is greater than or equal to
+     * another value.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->gte('id', 1));
+     * </code>
+     *
+     * @param string $value1 logical expression to compare
+     * @param string $value2 logical expression to compare with
+     * @return string logical expression
+     */
+    public function gte($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' >= ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if one value is less than another value.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->lt('id', 1));
+     * </code>
+     *
+     * @param string $value1        logical expression to compare
+     * @param string $value2        logical expression to compare with
+     * @return string logical expression
+     */
+    public function lt($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' < ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if one value is less than or equal to
+     * another value.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->lte('id', 1));
+     * </code>
+     *
+     * @param string $value1        logical expression to compare
+     * @param string $value2        logical expression to compare with
+     * @return string logical expression
+     */
+    public function lte($value1, $value2)
+    {
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $value1 . ' <= ' . $value2;
+    }
+
+    /**
+     * Returns the SQL to check if a value is one in a set of
+     * given values..
+     *
+     * in() accepts an arbitrary number of parameters. The first parameter
+     * must always specify the value that should be matched against. Successive
+     * must contain a logical expression or an array with logical expressions.
+     * These expressions will be matched against the first parameter.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->in( 'id', array(1,2,3)));
+     * </code>
+     *
+     * @param string $column        the value that should be matched against
+     * @param string|array(string)  values that will be matched against $column
+     * @return string logical expression
+     */
+    public function in($column, $values)
+    {
+        if ( ! is_array($values)) {
+            $values = array($values);
+        }
+        $values = $this->getIdentifiers($values);
+        $column = $this->getIdentifier($column);
+
+        if (count($values) == 0) {
+            throw new Doctrine_Expression_Exception('Values array for IN operator should not be empty.');
+        }
+        return $column . ' IN (' . implode(', ', $values) . ')';
+    }
+    /**
+     * Returns SQL that checks if a expression is null.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->isNull('id'));
+     * </code>
+     *
+     * @param string $expression the expression that should be compared to null
+     * @return string logical expression
+     */
+    public function isNull($expression)
+    {
+        $expression = $this->getIdentifier($expression);
+        return $expression . ' IS NULL';
+    }
+    /**
+     * Returns SQL that checks if a expression is not null.
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->isNotNull('id'));
+     * </code>
+     *
+     * @param string $expression the expression that should be compared to null
+     * @return string logical expression
+     */
+    public function isNotNull($expression)
+    {
+        $expression = $this->getIdentifier($expression);
+        return $expression . ' IS NOT NULL';
+    }
+    /**
+     * Returns SQL that checks if an expression evaluates to a value between
+     * two values.
+     *
+     * The parameter $expression is checked if it is between $value1 and $value2.
+     *
+     * Note: There is a slight difference in the way BETWEEN works on some databases.
+     * http://www.w3schools.com/sql/sql_between.asp. If you want complete database
+     * independence you should avoid using between().
+     *
+     * Example:
+     * <code>
+     * $q = new Doctrine_Query();
+     * $q->select('u.*')
+     *   ->from('User u')
+     *   ->where($q->expr->between('id', 1, 5));
+     * </code>
+     *
+     * @param string $expression the value to compare to
+     * @param string $value1 the lower value to compare with
+     * @param string $value2 the higher value to compare with
+     * @return string logical expression
+     */
+    public function between($expression, $value1, $value2)
+    {
+        $expression = $this->getIdentifier($expression);
+        $value1 = $this->getIdentifier($value1);
+        $value2 = $this->getIdentifier($value2);
+        return $expression . ' BETWEEN ' .$value1 . ' AND ' . $value2;
+    }
+    /**
+     * Returns global unique identifier
+     *
+     * @return string to get global unique identifier
+     */
+    public function guid()
+    {
+        throw new Doctrine_Expression_Exception('method not implemented');
+    }
+    /**
+     * returns arcus cosine SQL string
+     *
+     * @return string
+     */
+    public function acos($value)
+    {
+        return 'ACOS(' . $value . ')';
+    }
+    /**
+     * __call
+     *
+     * for all native RDBMS functions the function name itself is returned
+     */
+    public function __call($m, $a) 
+    {
+    	if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EXPR) {
+            throw new Doctrine_Expression_Exception('Unknown expression ' . $m);
+        }
+        return $m . '(' . implode(', ', $a) . ')';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..be27e58fa1f4548c71cb8959ad3458cd354f29dd
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Expression_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..e973bd78fe3d8ba9b9510b67395677e930e472dc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Firebird.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ *  $Id: Firebird.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Firebird
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ */
+class Doctrine_Expression_Firebird extends Doctrine_Expression_Driver
+{
+    /**
+     * return string for internal table used when calling only a function
+     *
+     * @return string for internal table used when calling only a function
+     * @access public
+     */
+    public function functionTable()
+    {
+        return ' FROM RDB$DATABASE';
+    }
+    /**
+     * build string to define escape pattern string
+     *
+     * @return string define escape pattern
+     */
+    function patternEscapeString()
+    {
+        return " ESCAPE '". $this->conn->string_quoting['escape_pattern'] ."'";
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..8941e8e5b5d46deb609613446764d0b30a002371
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Informix.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Informix.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression');
+/**
+ * Doctrine_Expression_Informix
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Informix extends Doctrine_Expression
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mock.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mock.php
new file mode 100644
index 0000000000000000000000000000000000000000..4048ce1312e66d0fa358768fd5e69a49fccd2e14
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mock.php
@@ -0,0 +1,35 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Expression_Mock
+ * Mock driver that is used for testing purposes
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Mock extends Doctrine_Expression_Driver
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d7f7f905d1d83623e89133a9e5574621375cdb3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mssql.php
@@ -0,0 +1,89 @@
+<?php
+/*
+ *  $Id: Mssql.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Mssql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Mssql extends Doctrine_Expression_Driver
+{
+    /**
+     * Return string to call a variable with the current timestamp inside an SQL statement
+     * There are three special variables for current date and time:
+     * - CURRENT_TIMESTAMP (date and time, TIMESTAMP type)
+     * - CURRENT_DATE (date, DATE type)
+     * - CURRENT_TIME (time, TIME type)
+     *
+     * @return string to call a variable with the current timestamp
+     * @access public
+     */
+    public function now($type = 'timestamp')
+    {
+        switch ($type) {
+            case 'time':
+            case 'date':
+            case 'timestamp':
+            default:
+                return 'GETDATE()';
+        }
+    }
+    /**
+     * return string to call a function to get a substring inside an SQL statement
+     *
+     * @return string to call a function to get a substring
+     */
+    public function substring($value, $position, $length = null)
+    {
+        if ( ! is_null($length)) {
+            return 'SUBSTRING(' . $value . ', ' . $position . ', ' . $length . ')';
+        }
+        return 'SUBSTRING(' . $value . ', ' . $position . ', LEN(' . $value . ') - ' . $position . ' + 1)';
+    }
+    /**
+     * Returns string to concatenate two or more string parameters
+     *
+     * @param string $arg1
+     * @param string $arg2
+     * @param string $values...
+     * @return string to concatenate two strings
+     */
+    public function concat()
+    {
+        $args = func_get_args();
+        return '(' . implode(' + ', $args) . ')';
+    }
+    /**
+     * Returns global unique identifier
+     *
+     * @return string to get global unique identifier
+     */
+    public function guid()
+    {
+        return 'NEWID()';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..669d1b93e66bd0291e75e2300dc762d57dcf2f88
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Mysql.php
@@ -0,0 +1,110 @@
+<?php
+/*
+ *  $Id: Mysql.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Mysql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Mysql extends Doctrine_Expression_Driver
+{
+    /**
+     * returns the regular expression operator
+     *
+     * @return string
+     */
+    public function regexp()
+    {
+        return 'RLIKE';
+    }
+    /**
+     * return string to call a function to get random value inside an SQL statement
+     *
+     * @return string to generate float between 0 and 1
+     */
+    public function random()
+    {
+        return 'RAND()';
+    }
+    /**
+     * build a pattern matching string
+     *
+     * EXPERIMENTAL
+     *
+     * WARNING: this function is experimental and may change signature at
+     * any time until labelled as non-experimental
+     *
+     * @access public
+     *
+     * @param array $pattern even keys are strings, odd are patterns (% and _)
+     * @param string $operator optional pattern operator (LIKE, ILIKE and maybe others in the future)
+     * @param string $field optional field name that is being matched against
+     *                  (might be required when emulating ILIKE)
+     *
+     * @return string SQL pattern
+     */
+    public function matchPattern($pattern, $operator = null, $field = null)
+    {
+        $match = '';
+        if (!is_null($operator)) {
+            $field = is_null($field) ? '' : $field.' ';
+            $operator = strtoupper($operator);
+            switch ($operator) {
+                // case insensitive
+                case 'ILIKE':
+                    $match = $field.'LIKE ';
+                    break;
+                // case sensitive
+                case 'LIKE':
+                    $match = $field.'LIKE BINARY ';
+                    break;
+                default:
+                    throw new Doctrine_Expression_Mysql_Exception('not a supported operator type:'. $operator);
+            }
+        }
+        $match.= "'";
+        foreach ($pattern as $key => $value) {
+            if ($key % 2) {
+                $match .= $value;
+            } else {
+                $match .= $this->conn->escapePattern($this->conn->escape($value));
+            }
+        }
+        $match.= "'";
+        $match.= $this->patternEscapeString();
+        return $match;
+    }
+    /**
+     * Returns global unique identifier
+     *
+     * @return string to get global unique identifier
+     */
+    public function guid()
+    {
+        return 'UUID()';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c5b1ea4772fa90a02b8dea0d32ea4fe5e8419e0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Oracle.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ *  $Id: Oracle.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Sqlite
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Oracle extends Doctrine_Expression_Driver
+{
+    /**
+     * Returns a series of strings concatinated
+     *
+     * concat() accepts an arbitrary number of parameters. Each parameter
+     * must contain an expression
+     *
+     * @param string $arg1, $arg2 ... $argN     strings that will be concatinated.
+     * @return string
+     */
+    public function concat()
+    {
+        $args = func_get_args();
+
+        return join(' || ' , $args);
+    }
+    /**
+     * return string to call a function to get a substring inside an SQL statement
+     *
+     * Note: Not SQL92, but common functionality.
+     *
+     * @param string $value         an sql string literal or column name/alias
+     * @param integer $position     where to start the substring portion
+     * @param integer $length       the substring portion length
+     * @return string               SQL substring function with given parameters
+     */
+    public function substring($value, $position, $length = null)
+    {
+        if ($length !== null)
+            return "SUBSTR($value, $position, $length)";
+
+        return "SUBSTR($value, $position)";
+    }
+    /**
+     * Return string to call a variable with the current timestamp inside an SQL statement
+     * There are three special variables for current date and time:
+     * - CURRENT_TIMESTAMP (date and time, TIMESTAMP type)
+     * - CURRENT_DATE (date, DATE type)
+     * - CURRENT_TIME (time, TIME type)
+     *
+     * @return string to call a variable with the current timestamp
+     */
+    public function now($type = 'timestamp')
+    {
+        switch ($type) {
+            case 'date':
+            case 'time':
+            case 'timestamp':
+            default:
+                return 'TO_CHAR(CURRENT_TIMESTAMP, \'YYYY-MM-DD HH24:MI:SS\')';
+        }
+    }
+    /**
+     * random
+     *
+     * @return string           an oracle SQL string that generates a float between 0 and 1
+     */
+    public function random()
+    {
+        return 'dbms_random.value';
+    }
+    /**
+     * Returns global unique identifier
+     *
+     * @return string to get global unique identifier
+     */
+    public function guid()
+    {
+        return 'SYS_GUID()';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..db45387cdf47dd841dab0fb9bcfd04d4070cf760
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Pgsql.php
@@ -0,0 +1,205 @@
+<?php
+/*
+ *  $Id: Pgsql.php 2276 2007-08-25 08:06:17Z lukenukem $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Pgsql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2276 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Pgsql extends Doctrine_Expression_Driver
+{
+    /**
+     * Returns the md5 sum of a field.
+     *
+     * Note: Not SQL92, but common functionality
+     *
+     * md5() works with the default PostgreSQL 8 versions.
+     *
+     * If you are using PostgreSQL 7.x or older you need
+     * to make sure that the digest procedure is installed.
+     * If you use RPMS (Redhat and Mandrake) install the postgresql-contrib
+     * package. You must then install the procedure by running this shell command:
+     * <code>
+     * psql [dbname] < /usr/share/pgsql/contrib/pgcrypto.sql
+     * </code>
+     * You should make sure you run this as the postgres user.
+     *
+     * @return string
+     */
+    public function md5($column)
+    {
+        $column = $this->getIdentifier($column);
+
+        if ($this->version > 7) {
+            return 'MD5(' . $column . ')';
+        } else {
+            return 'encode(digest(' . $column .', md5), hex)';
+        }
+    }
+
+    /**
+     * Returns part of a string.
+     *
+     * Note: Not SQL92, but common functionality.
+     *
+     * @param string $value the target $value the string or the string column.
+     * @param int $from extract from this characeter.
+     * @param int $len extract this amount of characters.
+     * @return string sql that extracts part of a string.
+     */
+    public function substring($value, $from, $len = null)
+    {
+        $value = $this->getIdentifier($value);
+
+        if ($len === null) {
+            $len = $this->getIdentifier($len);
+            return 'SUBSTR(' . $value . ', ' . $from . ')';
+        } else {
+            return 'SUBSTR(' . $value . ', ' . $from . ', ' . $len . ')';
+        }
+    }
+
+    /**
+     * Returns a series of strings concatinated
+     *
+     * concat() accepts an arbitrary number of parameters. Each parameter
+     * must contain an expression or an array with expressions.
+     *
+     * @param string|array(string) strings that will be concatinated.
+     * @return string
+     */
+
+
+    /**
+     * PostgreSQLs AGE(<timestamp1> [, <timestamp2>]) function.
+     *
+     * @param string $timestamp1 timestamp to subtract from NOW()
+     * @param string $timestamp2 optional; if given: subtract arguments
+     * @return string
+     */
+    public function age($timestamp1, $timestamp2 = null) {
+       if( $timestamp2 == null ) {
+           return 'AGE(' . $timestamp1 . ')';
+       }
+       return 'AGE(' . $timestamp1 . ', ' . $timestamp2 . ')';
+    }
+
+    /**
+     * PostgreSQLs DATE_PART( <text>, <time> ) function.
+     *
+     * @param string $text what to extract
+     * @param string $time timestamp or interval to extract from
+     * @return string
+     */
+    public function date_part($text, $time) {
+       return 'DATE_PART(' . $text . ', ' . $time . ')';
+    }
+
+
+    public function concat()
+    {
+        $args = func_get_args();
+
+        return join(' || ' , $args);
+    }
+    /**
+     * Returns the SQL string to return the current system date and time.
+     *
+     * @return string
+     */
+    public function now()
+    {
+        return 'LOCALTIMESTAMP(0)';
+    }
+    /**
+     * regexp
+     *
+     * @return string           the regular expression operator
+     */
+    public function regexp()
+    {
+        return 'SIMILAR TO';
+    }
+    /**
+     * return string to call a function to get random value inside an SQL statement
+     *
+     * @return return string to generate float between 0 and 1
+     * @access public
+     */
+    public function random()
+    {
+        return 'RANDOM()';
+    }
+    /**
+     * build a pattern matching string
+     *
+     * EXPERIMENTAL
+     *
+     * WARNING: this function is experimental and may change signature at
+     * any time until labelled as non-experimental
+     *
+     * @access public
+     *
+     * @param array $pattern even keys are strings, odd are patterns (% and _)
+     * @param string $operator optional pattern operator (LIKE, ILIKE and maybe others in the future)
+     * @param string $field optional field name that is being matched against
+     *                  (might be required when emulating ILIKE)
+     *
+     * @return string SQL pattern
+     */
+    public function matchPattern($pattern, $operator = null, $field = null)
+    {
+        $match = '';
+        if (!is_null($operator)) {
+            $field = is_null($field) ? '' : $field.' ';
+            $operator = strtoupper($operator);
+            switch ($operator) {
+                // case insensitive
+                case 'ILIKE':
+                    $match = $field.'ILIKE ';
+                    break;
+                // case sensitive
+                case 'LIKE':
+                    $match = $field.'LIKE ';
+                    break;
+                default:
+                    throw new Doctrine_Expression_Pgsql_Exception('not a supported operator type:'. $operator);
+            }
+        }
+        $match.= "'";
+        foreach ($pattern as $key => $value) {
+            if ($key % 2) {
+                $match.= $value;
+            } else {
+                $match.= $this->conn->escapePattern($this->conn->escape($value));
+            }
+        }
+        $match.= "'";
+        $match.= $this->patternEscapeString();
+        return $match;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac155d2f4568735a2b31f6bea09be0de2a6bd4cb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Expression/Sqlite.php
@@ -0,0 +1,165 @@
+<?php
+/*
+ *  $Id: Sqlite.php 1917 2007-07-01 11:27:45Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Expression_Driver');
+/**
+ * Doctrine_Expression_Sqlite
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1917 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Expression_Sqlite extends Doctrine_Expression_Driver
+{
+    /**
+     * Returns the md5 sum of the data that SQLite's md5() function receives.
+     *
+     * @param mixed $data
+     * @return string
+     */
+    public static function md5Impl($data)
+    {
+        return md5($data);
+    }
+    /**
+     * Returns the modules of the data that SQLite's mod() function receives.
+     *
+     * @param integer $dividend
+     * @param integer $divisor
+     * @return string
+     */
+    public static function modImpl($dividend, $divisor)
+    {
+        return $dividend % $divisor;
+    }
+
+    /**
+     * Returns a concatenation of the data that SQLite's concat() function receives.
+     *
+     * @return string
+     */
+    public static function concatImpl()
+    {
+        $args = func_get_args();
+        return join('', $args);
+    }
+    /**
+     * locate
+     * returns the position of the first occurrence of substring $substr in string $str that
+     * SQLite's locate() function receives
+     *
+     * @param string $substr    literal string to find
+     * @param string $str       literal string
+     * @return string
+     */
+    public static function locateImpl($substr, $str)
+    {
+        return strpos($str, $substr);
+    }
+    public static function sha1Impl($str)
+    {
+        return sha1($str);
+    }
+    public static function ltrimImpl($str)
+    {
+        return ltrim($str);
+    }
+    public static function rtrimImpl($str)
+    {
+        return rtrim($str);
+    }
+    public static function trimImpl($str)
+    {
+        return trim($str);
+    }
+    /**
+     * returns the regular expression operator
+     *
+     * @return string
+     */
+    public function regexp()
+    {
+        return 'RLIKE';
+    }
+    /**
+     * soundex
+     * Returns a string to call a function to compute the
+     * soundex encoding of a string
+     *
+     * The string "?000" is returned if the argument is NULL.
+     *
+     * @param string $value
+     * @return string   SQL soundex function with given parameter
+     */
+    public function soundex($value)
+    {
+        return 'SOUNDEX(' . $value . ')';
+    }
+    /**
+     * Return string to call a variable with the current timestamp inside an SQL statement
+     * There are three special variables for current date and time.
+     *
+     * @return string       sqlite function as string
+     */
+    public function now($type = 'timestamp')
+    {
+        switch ($type) {
+            case 'time':
+                return 'time(\'now\')';
+            case 'date':
+                return 'date(\'now\')';
+            case 'timestamp':
+            default:
+                return 'datetime(\'now\')';
+        }
+    }
+    /**
+     * return string to call a function to get random value inside an SQL statement
+     *
+     * @return string to generate float between 0 and 1
+     */
+    public function random()
+    {
+        return '((RANDOM() + 2147483648) / 4294967296)';
+    }
+    /**
+     * return string to call a function to get a substring inside an SQL statement
+     *
+     * Note: Not SQL92, but common functionality.
+     *
+     * SQLite only supports the 2 parameter variant of this function
+     *
+     * @param string $value         an sql string literal or column name/alias
+     * @param integer $position     where to start the substring portion
+     * @param integer $length       the substring portion length
+     * @return string               SQL substring function with given parameters
+     */
+    public function substring($value, $position, $length = null)
+    {
+        if ($length !== null) {
+            return 'SUBSTR(' . $value . ', ' . $position . ', ' . $length . ')';
+        }
+        return 'SUBSTR(' . $value . ', ' . $position . ', LENGTH(' . $value . '))';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File.php
new file mode 100644
index 0000000000000000000000000000000000000000..03216dce1d7c6eb3d03cc82d42a7ff9664662624
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_File
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_File extends Doctrine_Record
+{
+    public function setTableDefinition()
+    {
+        $this->hasColumn('url', 'string', 255);
+    }
+    public function setUp()
+    {
+        $this->actAs('Searchable', array('className' => 'Doctrine_File_Index',
+                                         'fields' => array('url', 'content')));
+        
+        $this->index('url', array('fields' => array('url')));
+    }
+    public function get($name, $load = true)
+    {
+        if ($name === 'content') {
+            return file_get_contents(parent::get('url'));
+        }
+        return parent::get($name, $load);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File/Index.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File/Index.php
new file mode 100644
index 0000000000000000000000000000000000000000..65df4afb605e2cae317825bbaa5264c97db83fe3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/File/Index.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_File_Index
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_File_Index extends Doctrine_Record
+{
+    public function setTableDefinition()
+    {
+        $this->hasColumn('keyword', 'string', 255, array('notnull' => true,
+                                                         'primary' => true));
+                                                         
+        $this->hasColumn('field', 'string', 50, array('notnull' => true,
+                                                      'primary' => true));
+
+        $this->hasColumn('position', 'string', 255, array('notnull' => true,
+                                                          'primary' => true));
+                                                          
+        $this->hasColumn('file_id', 'integer', 8, array('notnull' => true,
+                                                        'primary' => true));
+    }
+    public function setUp()
+    {
+        $this->hasOne('Doctrine_File', array('local' => 'file_id',
+                                             'foreign' => 'id',
+                                             'onDelete' => 'CASCADE',
+                                             'onUpdate' => 'CASCADE'));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Formatter.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Formatter.php
new file mode 100644
index 0000000000000000000000000000000000000000..3225eb950f7878fac942844df896cf633a542443
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Formatter.php
@@ -0,0 +1,221 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Formatter
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Formatter extends Doctrine_Connection_Module
+{
+    /**
+     * Quotes pattern (% and _) characters in a string)
+     *
+     * EXPERIMENTAL
+     *
+     * WARNING: this function is experimental and may change signature at
+     * any time until labelled as non-experimental
+     *
+     * @param   string  the input string to quote
+     *
+     * @return  string  quoted string
+     */
+    public function escapePattern($text)
+    {
+        if ($this->string_quoting['escape_pattern']) {
+            $tmp = $this->conn->string_quoting;
+
+            $text = str_replace($tmp['escape_pattern'], 
+                                $tmp['escape_pattern'] .
+                                $tmp['escape_pattern'], $text);
+
+            foreach ($this->wildcards as $wildcard) {
+                $text = str_replace($wildcard, $tmp['escape_pattern'] . $wildcard, $text);
+            }
+        }
+        return $text;
+    }
+    /**
+     * convertBooleans
+     * some drivers need the boolean values to be converted into integers
+     * when using DQL API
+     *
+     * This method takes care of that conversion
+     *
+     * @param array $item
+     * @return void
+     */
+    public function convertBooleans($item)
+    {
+    	if (is_array($item)) {
+            foreach ($item as $k => $value) {
+                if (is_bool($value)) {
+                    $item[$k] = (int) $value;
+                }
+            }
+        } else {
+            if (is_bool($item)) {
+                $item = (int) $item;
+            }
+        }
+        return $item;
+    }
+    /**
+     * Quote a string so it can be safely used as a table or column name
+     *
+     * Delimiting style depends on which database driver is being used.
+     *
+     * NOTE: just because you CAN use delimited identifiers doesn't mean
+     * you SHOULD use them.  In general, they end up causing way more
+     * problems than they solve.
+     *
+     * Portability is broken by using the following characters inside
+     * delimited identifiers:
+     *   + backtick (<kbd>`</kbd>) -- due to MySQL
+     *   + double quote (<kbd>"</kbd>) -- due to Oracle
+     *   + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access
+     *
+     * Delimited identifiers are known to generally work correctly under
+     * the following drivers:
+     *   + mssql
+     *   + mysql
+     *   + mysqli
+     *   + oci8
+     *   + pgsql
+     *   + sqlite
+     *
+     * InterBase doesn't seem to be able to use delimited identifiers
+     * via PHP 4.  They work fine under PHP 5.
+     *
+     * @param string $str           identifier name to be quoted
+     * @param bool $checkOption     check the 'quote_identifier' option
+     *
+     * @return string               quoted identifier string
+     */
+    public function quoteIdentifier($str, $checkOption = true)
+    {
+        if ($checkOption && ! $this->conn->getAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER)) {
+            return $str;
+        }
+        $tmp = $this->conn->identifier_quoting;
+        $str = str_replace($tmp['end'],
+                           $tmp['escape'] .
+                           $tmp['end'], $str);
+
+        return $tmp['start'] . $str . $tmp['end'];
+    }
+    /**
+     * quote
+     * quotes given input parameter
+     *
+     * @param mixed $input      parameter to be quoted
+     * @param string $type
+     * @return mixed
+     */
+    public function quote($input, $type = null)
+    {
+        if ($type == null) {
+            $type = gettype($input);
+        }
+        switch ($type) {
+            case 'integer':
+            case 'enum':
+            case 'boolean':
+            case 'double':
+            case 'float':
+            case 'bool':
+            case 'int':
+                return $input;
+            case 'array':
+            case 'object':
+                $input = serialize($input);
+            case 'string':
+            case 'char':
+            case 'varchar':
+            case 'text':
+            case 'gzip':
+            case 'blob':
+            case 'clob':
+                $this->conn->connect();
+
+                return $this->conn->getDbh()->quote($input);
+        }
+    }
+    /**
+     * Removes any formatting in an sequence name using the 'seqname_format' option
+     *
+     * @param string $sqn string that containts name of a potential sequence
+     * @return string name of the sequence with possible formatting removed
+     */
+    public function fixSequenceName($sqn)
+    {
+        $seqPattern = '/^'.preg_replace('/%s/', '([a-z0-9_]+)',  $this->conn->getAttribute(Doctrine::ATTR_SEQNAME_FORMAT)).'$/i';
+        $seqName    = preg_replace($seqPattern, '\\1', $sqn);
+
+        if ($seqName && ! strcasecmp($sqn, $this->getSequenceName($seqName))) {
+            return $seqName;
+        }
+        return $sqn;
+    }
+    /**
+     * Removes any formatting in an index name using the 'idxname_format' option
+     *
+     * @param string $idx string that containts name of anl index
+     * @return string name of the index with possible formatting removed
+     */
+    public function fixIndexName($idx)
+    {
+        $indexPattern   = '/^'.preg_replace('/%s/', '([a-z0-9_]+)', $this->conn->getAttribute(Doctrine::ATTR_IDXNAME_FORMAT)).'$/i';
+        $indexName      = preg_replace($indexPattern, '\\1', $idx);
+        if ($indexName && ! strcasecmp($idx, $this->getIndexName($indexName))) {
+            return $indexName;
+        }
+        return $idx;
+    }
+    /**
+     * adds sequence name formatting to a sequence name
+     *
+     * @param string    name of the sequence
+     * @return string   formatted sequence name
+     */
+    public function getSequenceName($sqn)
+    {
+        return sprintf($this->conn->getAttribute(Doctrine::ATTR_SEQNAME_FORMAT),
+            preg_replace('/[^a-z0-9_\$.]/i', '_', $sqn));
+    }
+    /**
+     * adds index name formatting to a index name
+     *
+     * @param string    name of the index
+     * @return string   formatted index name
+     */
+    public function getIndexName($idx)
+    {
+        return sprintf($this->conn->getAttribute(Doctrine::ATTR_IDXNAME_FORMAT),
+                preg_replace('/[^a-z0-9_\$]/i', '_', $idx));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook.php
new file mode 100644
index 0000000000000000000000000000000000000000..70d2eb1e8d8e0fb370a88f23f73a5872d6ec7396
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook.php
@@ -0,0 +1,215 @@
+<?php
+/*
+ *  $Id: Hook.php 2149 2007-08-02 21:27:42Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Hook
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2149 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hook
+{
+    /**
+     * @var Doctrine_Query $query           the base query
+     */
+    protected $query;
+    /**
+     * @var array $joins                    the optional joins of the base query
+     */
+    protected $joins;
+    /**
+     * @var array $hooks                    hooks array
+     */
+    protected $hooks        = array(
+                             'where',
+                             'orderby',
+                             'limit',
+                             'offset'
+                              );
+    /**
+     * @var array $fieldParsers             custom field parsers array
+     *                                      keys as field names in the format componentAlias.FieldName
+     *                                      values as parser names / objects
+     */
+    protected $fieldParsers = array();
+
+    /**
+     * @var array $typeParsers              type parsers array
+     *                                      keys as type names and values as parser names / objects
+     */
+    protected $typeParsers  = array(
+                              'char'      => 'Doctrine_Hook_WordLike',
+                              'string'    => 'Doctrine_Hook_WordLike',
+                              'varchar'   => 'Doctrine_Hook_WordLike',
+                              'integer'   => 'Doctrine_Hook_Integer',
+                              'enum'      => 'Doctrine_Hook_Integer',
+                              'time'      => 'Doctrine_Hook_Time',
+                              'date'      => 'Doctrine_Hook_Date',
+                              );
+
+    /**
+     * @param Doctrine_Query $query         the base query
+     */
+    public function __construct($query)
+    {
+        if (is_string($query)) {
+            $this->query = new Doctrine_Query();
+            $this->query->parseQuery($query);
+        } elseif ($query instanceof Doctrine_Query) {
+            $this->query = $query;
+        } else {
+            throw new Doctrine_Exception('Constructor argument should be either Doctrine_Query object or valid DQL query');      	
+        }
+        
+        $this->query->getQuery();
+    }
+    /**
+     * getQuery
+     *
+     * @return Doctrine_Query       returns the query object associated with this hook
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+    /**
+     * setTypeParser
+     *
+     * @param string $type              type name
+     * @param string|object $parser     parser name or custom parser object
+     */
+    public function setTypeParser($type, $parser) 
+    {
+        $this->typeParsers[$type] = $parser;
+    }
+    /**
+     * setFieldParser
+     *
+     * @param string $field             field name
+     * @param string|object $parser     parser name or custom parser object
+     */
+    public function setFieldParser($field, $parser)
+    {
+        $this->fieldParsers[$field] = $parser;
+    }
+    /**
+     * hookWhere
+     * builds DQL query where part from given parameter array
+     *
+     * @param array $params         an associative array containing field
+     *                              names and their values
+     * @return boolean              whether or not the hooking was
+     */
+    public function hookWhere($params)
+    {
+        if ( ! is_array($params)) {
+            return false;
+        }
+        foreach ($params as $name => $value) {
+            if ($value === '' || $value === '-') {
+                continue;
+            }
+            $e = explode('.', $name);
+
+            if (count($e) == 2) {
+                list($alias, $column) = $e;
+
+                $map   = $this->query->getAliasDeclaration($alias);
+                $table = $map['table'];
+
+                if ( ! $table) {
+                    throw new Doctrine_Exception('Unknown alias ' . $alias);
+                }
+
+                if ($def = $table->getDefinitionOf($column)) {
+
+                $def[0] = gettype($value);
+                    if (isset($this->typeParsers[$def[0]])) {
+                        $name   = $this->typeParsers[$def[0]];
+                        $parser = new $name;
+                    }
+
+                    $parser->parse($alias, $column, $value);
+
+                    $this->query->addWhere($parser->getCondition(), $parser->getParams());
+                }
+            }
+        }
+
+        return true;
+    }
+    /**
+     * hookOrderBy
+     * builds DQL query orderby part from given parameter array
+     *
+     * @param array $params         an array containing all fields which the built query
+     *                              should be ordered by
+     * @return boolean              whether or not the hooking was successful
+     */
+    public function hookOrderby($params)
+    {
+        if ( ! is_array($params)) {
+            return false;
+        }
+        foreach ($params as $name) {
+            $e = explode(' ', $name);
+
+            $order = 'ASC';
+
+            if (count($e) > 1) {
+                $order = ($e[1] == 'DESC') ? 'DESC' : 'ASC';
+            }
+
+            $e = explode('.', $e[0]);
+
+            if (count($e) == 2) {
+                list($alias, $column) = $e;
+
+                $map   = $this->query->getAliasDeclaration($alias);
+                $table = $map['table'];
+
+                if ($def = $table->getDefinitionOf($column)) {   
+                    $this->query->addOrderBy($alias . '.' . $column . ' ' . $order);
+                }
+            }
+        }
+        return true;
+    }
+    /**
+     * @param integer $limit
+     */
+    public function hookLimit($limit)
+    {
+        $this->query->limit((int) $limit);
+    }
+    /**
+     * @param integer $offset
+     */
+    public function hookOffset($offset)
+    {
+        $this->query->offset((int) $offset);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Equal.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Equal.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2754ff59ebe9ad91bedc2bb3db525ada54395d6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Equal.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ *  $Id: Equal.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Hook_Parser');
+/**
+ * Doctrine_Hook_Equal
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hook_Equal extends Doctrine_Hook_Parser
+{
+    /**
+     * parse
+     * Parses given field and field value to DQL condition
+     * and parameters. This method should always return
+     * prepared statement conditions (conditions that use
+     * placeholders instead of literal values).
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parse($alias, $field, $value)
+    {
+        $this->params    = (array) $value;
+        $this->condition = $alias . '.' . $field . ' = ?';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Integer.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Integer.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c7276c0b4438fa0a542732fc998a73617dc7815
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Integer.php
@@ -0,0 +1,75 @@
+<?php
+/*
+ *  $Id: Integer.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Hook_Parser_Complex');
+/**
+ * Doctrine_Hook_Integer
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hook_Integer extends Doctrine_Hook_Parser_Complex
+{
+    /**
+     * parse
+     * Parses given field and field value to DQL condition
+     * and parameters. This method should always return
+     * prepared statement conditions (conditions that use
+     * placeholders instead of literal values).
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parseSingle($alias, $field, $value)
+    {
+        $e = explode(' ', $value);
+
+        foreach ($e as $v) {
+             $v = trim($v);
+
+             $e2   = explode('-', $v);
+
+            $name = $alias. '.' . $field;
+
+             if (count($e2) == 1) {
+                 // one '-' found
+
+                $a[] = $name . ' = ?';
+
+                $this->params[] = $v;
+            } else {
+                // more than one '-' found
+
+                $a[] = '(' . $name . ' > ? AND ' . $name . ' < ?)';
+
+                $this->params += array($e2[0], $e2[1]);
+            }
+
+        }
+        return implode(' OR ', $a);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser.php
new file mode 100644
index 0000000000000000000000000000000000000000..e40c729eb30ced1c75bdeb245bc57c223839f614
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser.php
@@ -0,0 +1,65 @@
+<?php
+/*
+ *  $Id: Parser.php 1158 2007-03-02 20:47:17Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Hook_Parser
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1158 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Hook_Parser
+{
+    protected $condition;
+    protected $params = array();
+
+    public function getCondition()
+    {
+        return $this->condition;
+    }
+    /**
+     * getParams
+     * returns the parameters associated with this parser
+     *
+     * @return array
+     */
+    public function getParams()
+    {
+        return $this->params;
+    }
+    /**
+     * parse
+     * Parses given field and field value to DQL condition
+     * and parameters. This method should always return
+     * prepared statement conditions (conditions that use
+     * placeholders instead of literal values).
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    abstract public function parse($alias, $field, $value);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser/Complex.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser/Complex.php
new file mode 100644
index 0000000000000000000000000000000000000000..24d24caede25cd7809e9a051c1443d079f48bafe
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/Parser/Complex.php
@@ -0,0 +1,95 @@
+<?php
+/*
+ *  $Id: Complex.php 1482 2007-05-26 16:49:58Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Hook_Parser');
+/**
+ * Doctrine_Hook_Parser_Complex
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1482 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Hook_Parser_Complex extends Doctrine_Hook_Parser
+{
+    /**
+     * parse
+     * Parses given field and field value to DQL condition
+     * and parameters. This method should always return
+     * prepared statement conditions (conditions that use
+     * placeholders instead of literal values).
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parse($alias, $field, $value)
+    {
+        $this->condition = $this->parseClause($alias, $field, $value);
+    }
+    /**
+     * parseClause
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parseClause($alias, $field, $value)
+    {
+        $parts = Doctrine_Tokenizer::quoteExplode($value, ' AND ');
+
+        if (count($parts) > 1) {
+            $ret = array();
+            foreach ($parts as $part) {
+                $ret[] = $this->parseSingle($alias, $field, $part);
+            }
+
+            $r = implode(' AND ', $ret);
+        } else {
+            $parts = Doctrine_Tokenizer::quoteExplode($value, ' OR ');
+            if (count($parts) > 1) {
+                $ret = array();
+                foreach ($parts as $part) {
+                    $ret[] = $this->parseClause($alias, $field, $part);
+                }
+
+                $r = implode(' OR ', $ret);
+            } else {
+                $ret = $this->parseSingle($alias, $field, $parts[0]);
+                return $ret;
+            }
+        }
+        return '(' . $r . ')';
+    }
+    /**
+     * parseSingle
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    abstract public function parseSingle($alias, $field, $value);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/WordLike.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/WordLike.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c6fb15072c4ea0d663edd10b823ff55c9fd492d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hook/WordLike.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ *  $Id: WordLike.php 1482 2007-05-26 16:49:58Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Hook_Parser');
+/**
+ * Doctrine_Hook_WordLike
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1482 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hook_WordLike extends Doctrine_Hook_Parser_Complex
+{
+    /**
+     * parse
+     * Parses given field and field value to DQL condition
+     * and parameters. This method should always return
+     * prepared statement conditions (conditions that use
+     * placeholders instead of literal values).
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parseSingle($alias, $field, $value)
+    {
+        if (strpos($value, "'") !== false) {
+            $value = Doctrine_Tokenizer::bracketTrim($value, "'", "'");
+        
+            $a[]   = $alias . '.' . $field . ' LIKE ?';
+            $this->params[] = $value . '%';
+
+        } else {
+            $e2 = explode(' ',$value);
+    
+            foreach ($e2 as $v) {
+                $v = trim($v);
+                $a[] = $alias . '.' . $field . ' LIKE ?';
+                $this->params[] = $v . '%';
+            }
+        }
+        return implode(' OR ', $a);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate.php
new file mode 100644
index 0000000000000000000000000000000000000000..7978cc46ff32568870343100ce500ce0b0fe4bb3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate.php
@@ -0,0 +1,1217 @@
+<?php
+/*
+ *  $Id: Hydrate.php 2234 2007-08-14 18:28:35Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Hydrate is a base class for Doctrine_RawSql and Doctrine_Query.
+ * Its purpose is to populate object graphs.
+ *
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2234 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hydrate extends Doctrine_Object implements Serializable
+{
+    /**
+     * QUERY TYPE CONSTANTS
+     */
+
+    /**
+     * constant for SELECT queries
+     */
+    const SELECT = 0;
+    /**
+     * constant for DELETE queries
+     */
+    const DELETE = 1;
+    /**
+     * constant for UPDATE queries
+     */
+    const UPDATE = 2;
+    /**
+     * constant for INSERT queries
+     */
+    const INSERT = 3;
+    /**
+     * constant for CREATE queries
+     */
+    const CREATE = 4;
+    /**
+     * Constant for the array hydration mode.
+     */
+    const HYDRATE_ARRAY = 3;
+    /**
+     * Constant for the record (object) hydration mode.
+     */
+    const HYDRATE_RECORD = 2;
+
+    /**
+     * @var array $params                       query input parameters
+     */
+    protected $_params      = array();
+    /**
+     * @var Doctrine_Connection $conn           Doctrine_Connection object
+     */
+    protected $_conn;
+    /**
+     * @var Doctrine_View $_view                Doctrine_View object, when set this object will use the
+     *                                          the query given by the view object for object population
+     */
+    protected $_view;
+    /**
+     * @var array $_aliasMap                    two dimensional array containing the map for query aliases
+     *      Main keys are component aliases
+     *
+     *          table               table object associated with given alias
+     *
+     *          relation            the relation object owned by the parent
+     *
+     *          parent              the alias of the parent
+     *
+     *          agg                 the aggregates of this component
+     */
+    protected $_aliasMap         = array();
+    /**
+     *
+     */
+    protected $pendingAggregates = array();
+    /**
+     * @var array $aggregateMap             an array containing all aggregate aliases, keys as dql aliases
+     *                                      and values as sql aliases
+     */
+    protected $aggregateMap      = array();
+    /**
+     * @var array $_options                 an array of options
+     */
+    protected $_options    = array(
+                            'fetchMode'      => Doctrine::FETCH_RECORD,
+                            'parserCache'    => false,
+                            'resultSetCache' => false,
+                            );
+    /**
+     * @var string $_sql            cached SQL query
+     */
+    protected $_sql;
+    /**
+     * @var array $parts            SQL query string parts
+     */
+    protected $parts = array(
+        'select'    => array(),
+        'distinct'  => false,
+        'forUpdate' => false,
+        'from'      => array(),
+        'set'       => array(),
+        'join'      => array(),
+        'where'     => array(),
+        'groupby'   => array(),
+        'having'    => array(),
+        'orderby'   => array(),
+        'limit'     => false,
+        'offset'    => false,
+        );
+    /**
+     * @var integer $type                   the query type
+     *
+     * @see Doctrine_Query::* constants
+     */
+    protected $type            = self::SELECT;
+    /**
+     * @var array
+     */
+    protected $_cache;
+    /**
+     * The current hydration mode.
+     */
+    protected $_hydrationMode = self::HYDRATE_RECORD;
+    /**
+     * @var boolean $_expireCache           a boolean value that indicates whether or not to force cache expiration
+     */
+    protected $_expireCache     = false;
+
+    protected $_timeToLive;
+
+    protected $_tableAliases    = array();
+    /**
+     * @var array $_tableAliasSeeds         A simple array keys representing table aliases and values
+     *                                      as table alias seeds. The seeds are used for generating short table
+     *                                      aliases.
+     */
+    protected $_tableAliasSeeds = array();
+    /**
+     * constructor
+     *
+     * @param Doctrine_Connection|null $connection
+     */
+    public function __construct($connection = null)
+    {
+        if ( ! ($connection instanceof Doctrine_Connection)) {
+            $connection = Doctrine_Manager::getInstance()->getCurrentConnection();
+        }
+        $this->_conn = $connection;
+    }
+    /**
+     * getRootAlias
+     * returns the alias of the the root component
+     *
+     * @return array
+     */
+    public function getRootAlias()
+    {
+        if (!$this->_aliasMap) {
+          $this->getSql();
+        }
+        
+        reset($this->_aliasMap);
+
+        return key($this->_aliasMap);
+    }
+    /**
+     * getRootDeclaration
+     * returns the root declaration
+     *
+     * @return array
+     */
+    public function getRootDeclaration()
+    {
+        $map = reset($this->_aliasMap);
+
+        return $map;
+    }
+    /**
+     * getRoot
+     * returns the root component for this object
+     *
+     * @return Doctrine_Table       root components table
+     */
+    public function getRoot()
+    {
+        $map = reset($this->_aliasMap);
+
+        if ( ! isset($map['table'])) {
+            throw new Doctrine_Hydrate_Exception('Root component not initialized.');
+        }
+
+        return $map['table'];
+    }
+    /**
+     * getSql
+     * return the sql associated with this object
+     *
+     * @return string   sql query string
+     */
+    public function getSql()
+    {
+        return $this->getQuery();
+    }
+    /**
+     * useCache
+     *
+     * @param Doctrine_Cache_Interface|bool $driver      cache driver
+     * @param integer $timeToLive                        how long the cache entry is valid
+     * @return Doctrine_Hydrate         this object
+     */
+    public function useCache($driver = true, $timeToLive = null)
+    {
+        if ($driver !== null) {
+            if ($driver !== true) {
+                if ( ! ($driver instanceof Doctrine_Cache_Interface)) {
+                    $msg = 'First argument should be instance of Doctrine_Cache_Interface or null.';
+
+                    throw new Doctrine_Hydrate_Exception($msg);
+                }
+            }
+        }
+        $this->_cache = $driver;
+
+        return $this->setCacheLifeSpan($timeToLive);
+    }
+    /**
+     * expireCache
+     *
+     * @param boolean $expire       whether or not to force cache expiration
+     * @return Doctrine_Hydrate     this object
+     */
+    public function expireCache($expire = true)
+    {
+        $this->_expireCache = true;
+
+        return $this;
+    }
+    /**
+     * setCacheLifeSpan
+     *
+     * @param integer $timeToLive   how long the cache entry is valid
+     * @return Doctrine_Hydrate     this object
+     */
+    public function setCacheLifeSpan($timeToLive)
+    {
+        if ($timeToLive !== null) {
+            $timeToLive = (int) $timeToLive;
+        }
+        $this->_timeToLive = $timeToLive;
+
+        return $this;
+    }
+    /**
+     * getCacheDriver
+     * returns the cache driver associated with this object
+     *
+     * @return Doctrine_Cache_Interface|boolean|null    cache driver
+     */
+    public function getCacheDriver()
+    {
+        if ($this->_cache instanceof Doctrine_Cache_Interface) {
+            return $this->_cache;
+        } else {
+            return $this->_conn->getCacheDriver();
+        }
+    }
+    /**
+     * Sets the fetchmode.
+     *
+     * @param integer $fetchmode  One of the Doctrine_Hydrate::HYDRATE_* constants.
+     */
+    public function setHydrationMode($hydrationMode)
+    {
+        $this->_hydrationMode = $hydrationMode;
+        return $this;
+    }
+    /**
+     * serialize
+     * this method is automatically called when this Doctrine_Hydrate is serialized
+     *
+     * @return array    an array of serialized properties
+     */
+    public function serialize()
+    {
+        $vars = get_object_vars($this);
+
+    }
+    /**
+     * unseralize
+     * this method is automatically called everytime a Doctrine_Hydrate object is unserialized
+     *
+     * @param string $serialized                Doctrine_Record as serialized string
+     * @return void
+     */
+    public function unserialize($serialized)
+    {
+
+    }
+    /**
+     * generateNewTableAlias
+     * generates a new alias from given table alias
+     *
+     * @param string $tableAlias    table alias from which to generate the new alias from
+     * @return string               the created table alias
+     */
+    public function generateNewTableAlias($tableAlias)
+    {
+        if (isset($this->_tableAliases[$tableAlias])) {
+            // generate a new alias
+            $name = substr($tableAlias, 0, 1);
+            $i    = ((int) substr($tableAlias, 1));
+
+            if ($i == 0) {
+                $i = 1;
+            }
+
+            $newIndex  = ($this->_tableAliasSeeds[$name] + $i);
+
+            return $name . $newIndex;
+        }
+
+        return $tableAlias;
+    }
+    /**
+     * hasTableAlias
+     * whether or not this object has given tableAlias
+     *
+     * @param string $tableAlias    the table alias to be checked
+     * @return boolean              true if this object has given alias, otherwise false
+     */
+    public function hasTableAlias($tableAlias)
+    {
+        return (isset($this->_tableAliases[$tableAlias]));
+    }
+    /**
+     * getComponentAlias
+     * get component alias associated with given table alias
+     *
+     * @param string $tableAlias    the table alias that identifies the component alias
+     * @return string               component alias
+     */
+    public function getComponentAlias($tableAlias)
+    {
+        if ( ! isset($this->_tableAliases[$tableAlias])) {
+            throw new Doctrine_Hydrate_Exception('Unknown table alias ' . $tableAlias);
+        }
+        return $this->_tableAliases[$tableAlias];
+    }
+    /**
+     * getTableAliasSeed
+     * returns the alias seed for given table alias
+     *
+     * @param string $tableAlias    table alias that identifies the alias seed
+     * @return integer              table alias seed
+     */
+    public function getTableAliasSeed($tableAlias)
+    {
+        if ( ! isset($this->_tableAliasSeeds[$tableAlias])) {
+            return 0;
+        }
+        return $this->_tableAliasSeeds[$tableAlias];
+    }
+    /**
+     * generateTableAlias
+     * generates a table alias from given table name and associates 
+     * it with given component alias
+     *
+     * @param string $componentAlias    the component alias to be associated with generated table alias
+     * @param string $tableName         the table name from which to generate the table alias
+     * @return string                   the generated table alias
+     */
+    public function generateTableAlias($componentAlias, $tableName)
+    {
+        $char   = strtolower(substr($tableName, 0, 1));
+
+        $alias  = $char;
+
+        if ( ! isset($this->_tableAliasSeeds[$alias])) {
+            $this->_tableAliasSeeds[$alias] = 1;
+        }
+
+        while (isset($this->_tableAliases[$alias])) {
+            if ( ! isset($this->_tableAliasSeeds[$alias])) {
+                $this->_tableAliasSeeds[$alias] = 1;
+            }
+            $alias = $char . ++$this->_tableAliasSeeds[$alias];
+        }
+
+        $this->_tableAliases[$alias] = $componentAlias;
+
+        return $alias;
+    }
+    /**
+     * getTableAliases
+     * returns all table aliases
+     *
+     * @return array        table aliases as an array
+     */
+    public function getTableAliases()
+    {
+        return $this->_tableAliases;
+    }
+    /** 
+     * addTableAlias
+     * adds an alias for table and associates it with given component alias
+     *
+     * @param string $componentAlias    the alias for the query component associated with given tableAlias
+     * @param string $tableAlias        the table alias to be added
+     * @return Doctrine_Hydrate
+     */
+    public function addTableAlias($tableAlias, $componentAlias)
+    {
+        $this->_tableAliases[$tableAlias] = $componentAlias;
+
+        return $this;
+    }
+    /**
+     * getTableAlias
+     * some database such as Oracle need the identifier lengths to be < ~30 chars
+     * hence Doctrine creates as short identifier aliases as possible
+     *
+     * this method is used for the creation of short table aliases, its also
+     * smart enough to check if an alias already exists for given component (componentAlias)
+     *
+     * @param string $componentAlias    the alias for the query component to search table alias for
+     * @param string $tableName         the table name from which the table alias is being created
+     * @return string                   the generated / fetched short alias
+     */
+    public function getTableAlias($componentAlias, $tableName = null)
+    {
+        $alias = array_search($componentAlias, $this->_tableAliases);
+
+        if ($alias !== false) {
+            return $alias;
+        }
+
+        if ($tableName === null) {
+            throw new Doctrine_Hydrate_Exception("Couldn't get short alias for " . $componentAlias);
+        }
+
+        return $this->generateTableAlias($componentAlias, $tableName);
+    }
+    /**
+     * addQueryPart
+     * adds a query part in the query part array
+     *
+     * @param string $name          the name of the query part to be added
+     * @param string $part          query part string
+     * @throws Doctrine_Hydrate_Exception   if trying to add unknown query part
+     * @return Doctrine_Hydrate     this object
+     */
+    public function addQueryPart($name, $part)
+    {
+        if ( ! isset($this->parts[$name])) {
+            throw new Doctrine_Hydrate_Exception('Unknown query part ' . $name);
+        }
+        if (is_array($part)) {
+            $this->parts[$name] = array_merge($this->parts[$name], $part);
+        } else {
+            $this->parts[$name][] = $part;
+        }
+        return $this;
+    }
+    /**
+     * setQueryPart
+     * sets a query part in the query part array
+     *
+     * @param string $name          the name of the query part to be set
+     * @param string $part          query part string
+     * @throws Doctrine_Hydrate_Exception   if trying to set unknown query part
+     * @return Doctrine_Hydrate     this object
+     */
+    public function getQueryPart($part)
+    {
+        if ( ! isset($this->parts[$part])) {
+            throw new Doctrine_Hydrate_Exception('Unknown query part ' . $part);
+        }
+
+        return $this->parts[$part];
+    }
+    /**
+     * removeQueryPart
+     * removes a query part from the query part array
+     *
+     * @param string $name          the name of the query part to be removed
+     * @throws Doctrine_Hydrate_Exception   if trying to remove unknown query part
+     * @return Doctrine_Hydrate     this object
+     */
+    public function removeQueryPart($name)
+    {
+        if (isset($this->parts[$name])) {
+            if ($name == 'limit' || $name == 'offset') {
+                $this->parts[$name] = false;
+            } else {
+                $this->parts[$name] = array();
+            }
+        } else {
+            throw new Doctrine_Hydrate_Exception('Unknown query part ' . $name);
+        }
+        return $this;
+    }
+    /**
+     * setQueryPart
+     * sets a query part in the query part array
+     *
+     * @param string $name          the name of the query part to be set
+     * @param string $part          query part string
+     * @throws Doctrine_Hydrate_Exception   if trying to set unknown query part
+     * @return Doctrine_Hydrate     this object
+     */
+    public function setQueryPart($name, $part)
+    {
+        if ( ! isset($this->parts[$name])) {
+            throw new Doctrine_Hydrate_Exception('Unknown query part ' . $name);
+        }
+
+        if ($name !== 'limit' && $name !== 'offset') {
+            if (is_array($part)) {
+                $this->parts[$name] = $part;
+            } else {
+                $this->parts[$name] = array($part);
+            }
+        } else {
+            $this->parts[$name] = $part;
+        }
+
+        return $this;
+    }
+    /**
+     * hasAliasDeclaration
+     * whether or not this object has a declaration for given component alias
+     *
+     * @param string $componentAlias    the component alias the retrieve the declaration from
+     * @return boolean
+     */
+    public function hasAliasDeclaration($componentAlias)
+    {
+        return isset($this->_aliasMap[$componentAlias]);
+    }
+    /**
+     * getAliasDeclaration
+     * get the declaration for given component alias
+     *
+     * @param string $componentAlias    the component alias the retrieve the declaration from
+     * @return array                    the alias declaration
+     */
+    public function getAliasDeclaration($componentAlias)
+    {
+        if ( ! isset($this->_aliasMap[$componentAlias])) {
+            throw new Doctrine_Hydrate_Exception('Unknown component alias ' . $componentAlias);
+        }
+
+        return $this->_aliasMap[$componentAlias];
+    }
+    /**
+     * copyAliases
+     * copy aliases from another Hydrate object
+     *
+     * this method is needed by DQL subqueries which need the aliases
+     * of the parent query
+     *
+     * @param Doctrine_Hydrate $query   the query object from which the
+     *                                  aliases are copied from
+     * @return Doctrine_Hydrate         this object
+     */
+    public function copyAliases(Doctrine_Hydrate $query)
+    {
+        $this->_tableAliases = $query->_tableAliases;
+        $this->_aliasMap     = $query->_aliasMap;
+        $this->_tableAliasSeeds = $query->_tableAliasSeeds;
+        return $this;
+    }
+    /**
+     * createSubquery
+     * creates a subquery
+     *
+     * @return Doctrine_Hydrate
+     */
+    public function createSubquery()
+    {
+        $class = get_class($this);
+        $obj   = new $class();
+
+        // copy the aliases to the subquery
+        $obj->copyAliases($this);
+
+        // this prevents the 'id' being selected, re ticket #307
+        $obj->isSubquery(true);
+
+        return $obj;
+    }
+    /**
+     * limitSubqueryUsed
+     * whether or not limit subquery was used
+     *
+     * @return boolean
+     */
+    public function isLimitSubqueryUsed()
+    {
+        return false;
+    }
+    /**
+     * clear
+     * resets all the variables
+     *
+     * @return void
+     */
+    protected function clear()
+    {
+        $this->parts = array(
+                    'select'    => array(),
+                    'distinct'  => false,
+                    'forUpdate' => false,
+                    'from'      => array(),
+                    'set'       => array(),
+                    'join'      => array(),
+                    'where'     => array(),
+                    'groupby'   => array(),
+                    'having'    => array(),
+                    'orderby'   => array(),
+                    'limit'     => false,
+                    'offset'    => false,
+                    );
+        $this->inheritanceApplied = false;
+    }
+    /**
+     * getConnection
+     *
+     * @return Doctrine_Connection
+     */
+    public function getConnection()
+    {
+        return $this->_conn;
+    }
+    /**
+     * setView
+     * sets a database view this query object uses
+     * this method should only be called internally by doctrine
+     *
+     * @param Doctrine_View $view       database view
+     * @return void
+     */
+    public function setView(Doctrine_View $view)
+    {
+        $this->_view = $view;
+    }
+    /**
+     * getView
+     * returns the view associated with this query object (if any)
+     *
+     * @return Doctrine_View        the view associated with this query object
+     */
+    public function getView()
+    {
+        return $this->_view;
+    }
+    /**
+     * getParams
+     *
+     * @return array
+     */
+    public function getParams()
+    {
+        return $this->_params;
+    }
+    /**
+     * setParams
+     *
+     * @param array $params
+     */
+    public function setParams(array $params = array()) {
+        $this->_params = $params;
+    }
+    public function convertEnums($params)
+    {
+        return $params;
+    }
+    /**
+     * setAliasMap
+     * sets the whole component alias map
+     *
+     * @param array $map            alias map
+     * @return Doctrine_Hydrate     this object
+     */
+    public function setAliasMap(array $map)
+    {
+        $this->_aliasMap = $map;
+
+        return $this;
+    }
+    /**
+     * getAliasMap
+     * returns the component alias map
+     *
+     * @return array    component alias map
+     */
+    public function getAliasMap()
+    {
+        return $this->_aliasMap;
+    }
+    /**
+     * getCachedForm
+     * returns the cached form of this query for given resultSet
+     *
+     * @param array $resultSet
+     * @return string           serialized string representation of this query
+     */
+    public function getCachedForm(array $resultSet)
+    {
+        $map = '';
+
+        foreach ($this->getAliasMap() as $k => $v) {
+            if ( ! isset($v['parent'])) {
+                $map[$k][] = $v['table']->getComponentName();
+            } else {
+                $map[$k][] = $v['parent'] . '.' . $v['relation']->getAlias();
+            }
+            if (isset($v['agg'])) {
+                $map[$k][] = $v['agg'];
+            }
+        }
+
+        return serialize(array($resultSet, $map, $this->getTableAliases()));
+    }
+    public function _execute($params)
+    {
+        $params = $this->_conn->convertBooleans(array_merge($this->_params, $params));
+
+        if ( ! $this->_view) {
+            $query = $this->getQuery($params);
+        } else {
+            $query = $this->_view->getSelectSql();
+        }
+
+        $params = $this->convertEnums($params);
+
+        if ($this->isLimitSubqueryUsed() &&
+            $this->_conn->getAttribute(Doctrine::ATTR_DRIVER_NAME) !== 'mysql') {
+
+            $params = array_merge($params, $params);
+        }
+
+        if ($this->type !== self::SELECT) {
+            return $this->_conn->exec($query, $params);
+        }
+
+        $stmt = $this->_conn->execute($query, $params);
+        return $stmt;
+    }
+    /**
+     * execute
+     * executes the query and populates the data set
+     *
+     * @param string $params
+     * @return Doctrine_Collection            the root collection
+     */
+    public function execute($params = array(), $hydrationMode = null)
+    {
+        if ($this->_cache) {
+            $cacheDriver = $this->getCacheDriver();
+
+            $dql  = $this->getDql();
+            // calculate hash for dql query
+            $hash = md5($dql . var_export($params, true));
+
+            $cached = ($this->_expireCache) ? null : $cacheDriver->fetch($hash);
+
+
+            if ($cached === null) {
+                // cache miss
+                $stmt = $this->_execute($params);
+                $array = $this->parseData2($stmt, self::HYDRATE_ARRAY);
+
+                $cached = $this->getCachedForm($array);
+
+                $cacheDriver->save($hash, $cached, $this->_timeToLive);
+            } else {
+                $cached = unserialize($cached);
+                $this->_tableAliases = $cached[2];
+                $array = $cached[0];
+
+                $map   = array();
+                foreach ($cached[1] as $k => $v) {
+                    $e = explode('.', $v[0]);
+                    if (count($e) === 1) {
+                        $map[$k]['table'] = $this->_conn->getTable($e[0]);
+                    } else {
+                        $map[$k]['parent']   = $e[0];
+                        $map[$k]['relation'] = $map[$e[0]]['table']->getRelation($e[1]);
+                        $map[$k]['table']    = $map[$k]['relation']->getTable();
+                    }
+                    if (isset($v[1])) {
+                        $map[$k]['agg'] = $v[1];
+                    }
+                }
+                $this->_aliasMap = $map;
+            }
+        } else {
+            $stmt = $this->_execute($params);
+
+            if (is_integer($stmt)) {
+                return $stmt;
+            }
+
+            $array = $this->parseData2($stmt, $hydrationMode);
+        }
+        return $array;
+    }
+
+    /**
+     * getType
+     *
+     * returns the type of this query object
+     * by default the type is Doctrine_Hydrate::SELECT but if update() or delete()
+     * are being called the type is Doctrine_Hydrate::UPDATE and Doctrine_Hydrate::DELETE,
+     * respectively
+     *
+     * @see Doctrine_Hydrate::SELECT
+     * @see Doctrine_Hydrate::UPDATE
+     * @see Doctrine_Hydrate::DELETE
+     *
+     * @return integer      return the query type
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+    /**
+     * applyInheritance
+     * applies column aggregation inheritance to DQL / SQL query
+     *
+     * @return string
+     */
+    public function applyInheritance()
+    {
+        // get the inheritance maps
+        $array = array();
+
+        foreach ($this->_aliasMap as $componentAlias => $data) {
+            $tableAlias = $this->getTableAlias($componentAlias);
+            $array[$tableAlias][] = $data['table']->inheritanceMap;
+        }
+
+        // apply inheritance maps
+        $str = '';
+        $c = array();
+
+        $index = 0;
+        foreach ($array as $tableAlias => $maps) {
+            $a = array();
+
+            // don't use table aliases if the query isn't a select query
+            if ($this->type !== Doctrine_Query::SELECT) {
+                $tableAlias = '';
+            } else {
+                $tableAlias .= '.';
+            }
+
+            foreach ($maps as $map) {
+                $b = array();
+                foreach ($map as $field => $value) {
+                    $identifier = $this->_conn->quoteIdentifier($tableAlias . $field);
+
+                    if ($index > 0) {
+                        $b[] = '(' . $identifier . ' = ' . $this->_conn->quote($value)
+                             . ' OR ' . $identifier . ' IS NULL)';
+                    } else {
+                        $b[] = $identifier . ' = ' . $this->_conn->quote($value);
+                    }
+                }
+
+                if ( ! empty($b)) {
+                    $a[] = implode(' AND ', $b);
+                }
+            }
+
+            if ( ! empty($a)) {
+                $c[] = implode(' AND ', $a);
+            }
+            $index++;
+        }
+
+        $str .= implode(' AND ', $c);
+
+        return $str;
+    }
+    /**
+     * fetchArray
+     * Convenience method to execute using array fetching as hydration mode.
+     *
+     * @param string $params
+     * @return array
+     */
+    public function fetchArray($params = array()) {
+        return $this->execute($params, self::HYDRATE_ARRAY);
+    }
+    /**
+     * fetchOne
+     * Convenience method to execute the query and return the first item
+     * of the collection.
+     *
+     * @param string $params Parameters
+     * @param int $hydrationMode Hydration mode
+     * @return mixed Array or Doctrine_Collection or false if no result.
+     */
+    public function fetchOne($params = array(), $hydrationMode = null)
+    {
+        if (is_null($hydrationMode)) {
+            $hydrationMode = $this->_hydrationMode;
+        }
+
+        $collection = $this->execute($params, $hydrationMode);
+
+        switch ($hydrationMode) {
+            case self::HYDRATE_RECORD:
+                if (count($collection) > 0) {
+                    return $collection->getFirst();
+                }
+            case self::HYDRATE_ARRAY:
+                if (!empty($collection[0])) {
+                    return $collection[0];
+                }
+        }
+
+        return false;
+    }
+    /**
+     * parseData
+     * parses the data returned by statement object
+     *
+     * This is method defines the core of Doctrine object population algorithm
+     * hence this method strives to be as fast as possible
+     *
+     * The key idea is the loop over the rowset only once doing all the needed operations
+     * within this massive loop.
+     *
+     * @param mixed $stmt
+     * @return array
+     */
+    public function parseData2($stmt, $hydrationMode)
+    {
+
+        $cache = array();
+        $rootMap   = reset($this->_aliasMap);
+        $rootAlias = key($this->_aliasMap);
+        $componentName = $rootMap['table']->getComponentName();
+        $index = 0;
+        $incr  = true;
+        $lastAlias = '';
+        $currData  = array();
+
+        if ($hydrationMode === null) {
+            $hydrationMode = $this->_hydrationMode;
+        }
+
+        if ($hydrationMode === self::HYDRATE_ARRAY) {
+            $driver = new Doctrine_Hydrate_Array();
+        } else {
+            $driver = new Doctrine_Hydrate_Record();
+        }
+
+        $array = $driver->getElementCollection($componentName);
+        $identifiable = array();
+
+        if ($stmt === false || $stmt === 0) {
+            return $array;
+        }
+
+        while ($data = $stmt->fetch(Doctrine::FETCH_ASSOC)) {
+            $parse = true;
+
+            foreach ($data as $key => $value) {
+
+                // The following little cache solution ensures that field aliases are
+                // parsed only once. This increases speed on large result sets by an order
+                // of magnitude.
+                if ( ! isset($cache[$key])) {
+                    $e = explode('__', $key);
+                    $cache[$key]['field'] = $field = strtolower(array_pop($e));
+                    $cache[$key]['alias'] = $this->_tableAliases[strtolower(implode('__', $e))];
+                }
+
+
+                $map   = $this->_aliasMap[$cache[$key]['alias']];
+                $table = $map['table'];
+                $alias = $cache[$key]['alias'];
+                $field = $cache[$key]['field'];
+
+                if (isset($this->_aliasMap[$alias]['agg'][$field])) {
+                    $field = $this->_aliasMap[$alias]['agg'][$field];
+                }
+
+
+                $componentName  = $map['table']->getComponentName();
+                if (isset($map['relation'])) {
+                    $componentAlias = $map['relation']->getAlias();
+                } else {
+                    $componentAlias = $map['table']->getComponentName();
+                }
+
+
+                if ( ! isset($currData[$alias])) {
+                    $currData[$alias] = array();
+                }
+
+                if ( ! isset($prev[$alias])) {
+                    $prev[$alias] = array();
+                }
+
+
+                $skip = false;
+                if (($alias !== $lastAlias || $parse) && ! empty($currData[$alias])) {
+
+                    // component changed
+                    $element = $driver->getElement($currData[$alias], $componentName);
+
+                    $oneToOne = false;
+
+                    if ($alias === $rootAlias) {
+                        // dealing with root component
+
+                        $index = $driver->search($element, $array);
+                        if ($index === false) {
+                            $array[] = $element;
+                        }
+
+                        $coll =& $array;
+                    } else {
+                        $parent   = $map['parent'];
+                        $relation = $map['relation'];
+
+                        if (!isset($prev[$parent])) {
+                            break;
+                        }
+
+                        // check the type of the relation
+                        if ( ! $relation->isOneToOne()) {
+                            // initialize the collection
+
+                            if ($driver->initRelated($prev[$parent], $componentAlias)) {
+
+                                // append element
+                                if (isset($identifiable[$alias])) {
+                                    $index = $driver->search($element, $prev[$parent][$componentAlias]);
+
+                                    if ($index === false) {
+                                        $prev[$parent][$componentAlias][] = $element;
+                                    }
+                                }
+                                // register collection for later snapshots
+                                $driver->registerCollection($prev[$parent][$componentAlias]);
+                            }
+                        } else {
+                            if ( ! isset($identifiable[$alias])) {
+                                $prev[$parent][$componentAlias] = $driver->getNullPointer();
+                            } else {
+                                $prev[$parent][$componentAlias] = $element;
+                            }
+                            $oneToOne = true;
+                        }
+                        $coll =& $prev[$parent][$componentAlias];
+                    }
+
+                    $this->_setLastElement($prev, $coll, $index, $alias, $oneToOne);
+
+                    $currData[$alias] = array();
+                    $identifiable[$alias] = null;
+                }
+
+
+
+                $currData[$alias][$field] = $table->prepareValue($field, $value);
+                $index = false;
+                if ($value !== null) {
+                    $identifiable[$alias] = true;
+                }
+                $lastAlias = $alias;
+                $parse = false;
+
+            }
+        }
+
+        foreach ($currData as $alias => $data) {
+            $table = $this->_aliasMap[$alias]['table'];
+            $componentName = $table->getComponentName();
+            // component changed       
+
+            $element = $driver->getElement($currData[$alias], $componentName);
+
+            $oneToOne = false;
+
+            if ($alias === $rootAlias) {
+                // dealing with root component
+                $index = $driver->search($element, $array);
+                if ($index === false) {
+                    $array[] = $element;
+                }
+                $coll =& $array;
+            } else {
+                $parent   = $this->_aliasMap[$alias]['parent'];
+                $relation = $this->_aliasMap[$alias]['relation'];
+                $componentAlias = $relation->getAlias();
+
+                if (!isset($prev[$parent])) {
+                    break;
+                }
+
+                // check the type of the relation
+                if ( ! $relation->isOneToOne()) {
+                    // initialize the collection
+
+                    if ($driver->initRelated($prev[$parent], $componentAlias)) {
+
+                        // append element
+                        if (isset($identifiable[$alias])) {
+                            $index = $driver->search($element, $prev[$parent][$componentAlias]);
+
+                            if ($index === false) {
+                                $prev[$parent][$componentAlias][] = $element;
+                            }
+                        }
+                        // register collection for later snapshots
+                        $driver->registerCollection($prev[$parent][$componentAlias]);
+                    }
+                } else {
+                    if ( ! isset($identifiable[$alias])) {
+                        $prev[$parent][$componentAlias] = $driver->getNullPointer();
+                    } else {
+
+                        $prev[$parent][$componentAlias] = $element;
+                    }
+                    $oneToOne = true;
+                }
+                $coll =& $prev[$parent][$componentAlias];
+            }
+
+            $this->_setLastElement($prev, $coll, $index, $alias, $oneToOne);
+
+            $index = false;
+            $currData[$alias] = array();
+            unset($identifiable[$alias]);
+        }
+
+        $driver->flush();
+
+        $stmt->closeCursor();
+        return $array;
+    }
+    /**
+     * _setLastElement
+     *
+     * sets the last element of given data array / collection
+     * as previous element
+     *
+     * @param boolean|integer $index
+     * @return void
+     */
+    public function _setLastElement(&$prev, &$coll, $index, $alias, $oneToOne)
+    {
+        if ($coll === self::$_null) {
+            return false;
+        }
+        if ($index !== false) {
+            $prev[$alias] =& $coll[$index];
+        } else {
+            // first check the count (we do not want to get the last element
+            // of an empty collection/array)
+            if (count($coll) > 0) {
+                if (is_array($coll)) {
+                    if ($oneToOne) {
+                        $prev[$alias] =& $coll;
+                    } else {
+                        end($coll);
+                        $prev[$alias] =& $coll[key($coll)];
+                    }
+                } else {
+                    $prev[$alias] = $coll->getLast();
+                }
+            } else {
+                if (isset($prev[$alias])) {
+                    unset($prev[$alias]);
+                }
+            }
+        }
+    }
+    /**
+     * @return string                   returns a string representation of this object
+     */
+    public function __toString()
+    {
+        return Doctrine_Lib::formatSql($this->getQuery());
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Array.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Array.php
new file mode 100644
index 0000000000000000000000000000000000000000..729da107e881e153e455c336c78d6fab5e2ba15a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Array.php
@@ -0,0 +1,82 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Hydrate_Array
+ * defines an array fetching strategy for Doctrine_Hydrate
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hydrate_Array
+{
+    public function getElementCollection($component)
+    {
+        return array();
+    }
+    public function getElement(array $data, $component)
+    {
+        return $data;
+    }
+    public function isIdentifiable(array $data, Doctrine_Table $table)
+    {
+        return ( ! empty($data));
+    }
+    public function registerCollection($coll)
+    {
+
+    }
+    public function initRelated(array &$data, $name)
+    {
+    	if ( ! isset($data[$name])) {
+            $data[$name] = array();
+        }
+        return true;
+    }
+    public function getNullPointer() 
+    {
+        return null;	
+    }
+    public function search(array $element, array $data)
+    {
+        foreach ($data as $key => $val) {
+            $found = true;
+            foreach ($element as $k => $e) {
+                if (isset($val[$k]) && $val[$k] !== $e) {
+                    $found = false;
+                }
+            }
+            if ($found) {
+                return $key;
+            }
+        }
+        return false;
+    }
+    public function flush()
+    {
+    	
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..73c4f77ee820beab587444932ecf410bd9b2b378
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Hydrate_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hydrate_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Record.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Record.php
new file mode 100644
index 0000000000000000000000000000000000000000..40377efac22c96d4bfc8c937d448ff7885d583e0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Hydrate/Record.php
@@ -0,0 +1,118 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Hydrate_Record 
+ * defines a record fetching strategy for Doctrine_Hydrate
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Hydrate_Record extends Doctrine_Object
+{
+    protected $_collections = array();
+    
+    protected $_records = array();
+    
+    protected $_tables = array();
+
+    public function getElementCollection($component)
+    {
+        $coll = new Doctrine_Collection($component);
+        $this->_collections[] = $coll;
+
+        return $coll;
+    }
+    public function search(Doctrine_Record $record, Doctrine_Collection $coll)
+    {
+        return array_search($record, $coll->getData(), true);
+    }
+    public function initRelated($record, $name)
+    {
+    	if ( ! is_array($record)) {
+            $record[$name];
+
+            return true;
+        }
+        return false;
+    }
+    public function registerCollection(Doctrine_Collection $coll)
+    {
+        $this->_collections[] = $coll;
+    }
+    /**
+     * isIdentifiable
+     * returns whether or not a given data row is identifiable (it contains
+     * all primary key fields specified in the second argument)
+     *
+     * @param array $row
+     * @param Doctrine_Table $table
+     * @return boolean
+     */
+    public function isIdentifiable(array $row, Doctrine_Table $table)
+    {
+    	$primaryKeys = $table->getIdentifier();
+
+        if (is_array($primaryKeys)) {
+            foreach ($primaryKeys as $id) {
+                if ( ! isset($row[$id])) {
+                    return false;
+                }
+            }
+        } else {
+            if ( ! isset($row[$primaryKeys])) {
+                return false;
+            }
+        }
+        return true;
+    }
+    public function getNullPointer() 
+    {
+        return self::$_null;
+    }
+    public function getElement(array $data, $component)
+    {
+    	if ( ! isset($this->_tables[$component])) {
+            $this->_tables[$component] = Doctrine_Manager::getInstance()->getTable($component);
+            $this->_tables[$component]->setAttribute(Doctrine::ATTR_LOAD_REFERENCES, false);
+        }
+        $this->_tables[$component]->setData($data);
+        $record = $this->_tables[$component]->getRecord();
+        $this->_records[] = $record;
+
+        return $record;
+    }
+    public function flush()
+    {
+        // take snapshots from all initialized collections
+        foreach ($this->_collections as $key => $coll) {
+            $coll->takeSnapshot();
+        }
+        foreach ($this->_tables as $table) {
+            $table->setAttribute(Doctrine::ATTR_LOAD_REFERENCES, true);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import.php
new file mode 100644
index 0000000000000000000000000000000000000000..714e65ace1bbbcada57c1b1e9a0b793aac7115cf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import.php
@@ -0,0 +1,203 @@
+<?php
+/*
+ *  $Id: Import.php 2255 2007-08-16 22:42:35Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * class Doctrine_Import
+ * Main responsible of performing import operation. Delegates database schema
+ * reading to a reader object and passes the result to a builder object which
+ * builds a Doctrine data model.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 2255 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ */
+class Doctrine_Import extends Doctrine_Connection_Module
+{
+    protected $sql = array();
+    /**
+     * lists all databases
+     *
+     * @return array
+     */
+    public function listDatabases()
+    {
+        if ( ! isset($this->sql['listDatabases'])) {
+            throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+        }
+
+        return $this->conn->fetchColumn($this->sql['listDatabases']);
+    }
+    /**
+     * lists all availible database functions
+     *
+     * @return array
+     */
+    public function listFunctions()
+    {
+        if ( ! isset($this->sql['listFunctions'])) {
+            throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+        }
+
+        return $this->conn->fetchColumn($this->sql['listFunctions']);
+    }
+    /**
+     * lists all database triggers
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTriggers($database = null)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists all database sequences
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listSequences($database = null)
+    {
+        if ( ! isset($this->sql['listSequences'])) {
+            throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+        }
+
+        return $this->conn->fetchColumn($this->sql['listSequences']);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableConstraints($table)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists table triggers
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableTriggers($table)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists table views
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableViews($table)
+    {
+        throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+    }
+    /**
+     * lists database users
+     *
+     * @return array
+     */
+    public function listUsers()
+    {
+        if ( ! isset($this->sql['listUsers'])) {
+            throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+        }
+
+        return $this->conn->fetchColumn($this->sql['listUsers']);
+    }
+    /**
+     * lists database views
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listViews($database = null)
+    {
+        if ( ! isset($this->sql['listViews'])) {
+            throw new Doctrine_Import_Exception(__FUNCTION__ . ' not supported by this driver.');
+        }
+
+        return $this->conn->fetchColumn($this->sql['listViews']);
+    }
+    /**
+     * importSchema
+     *
+     * method for importing existing schema to Doctrine_Record classes
+     *
+     * @param string $directory
+     * @param array $databases
+     * @return array                the names of the imported classes
+     */
+    public function importSchema($directory, array $databases = array())
+    {
+        $builder = new Doctrine_Import_Builder();
+        $builder->setTargetPath($directory);
+
+        $classes = array();
+        foreach ($this->listTables() as $table) {
+            $builder->buildRecord(array('tableName' => $table,
+                                        'className' => Doctrine::classify($table)),
+                                  $this->listTableColumns($table),
+                                  array());
+        
+            $classes[] = Doctrine::classify($table);
+        }
+        
+        return $classes;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder.php
new file mode 100644
index 0000000000000000000000000000000000000000..42130a45af2731dadf22aee4193489fc4515c95a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder.php
@@ -0,0 +1,256 @@
+<?php
+/*
+ *  $Id: Builder.php 2051 2007-07-23 20:28:46Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Import_Builder
+ * Import builder is responsible of building Doctrine ActiveRecord classes
+ * based on a database schema.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 2051 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @author      Nicolas Bérard-Nault <nicobn@php.net>
+ */
+class Doctrine_Import_Builder
+{
+    /**
+     * @var string $path    the path where imported files are being generated
+     */
+    private $path = '';
+
+    private $suffix = '.php';
+
+    private static $tpl;
+
+    public function __construct()
+    {
+        $this->loadTemplate();
+    }
+
+    /**
+     * setTargetPath
+     *
+     * @param string path   the path where imported files are being generated
+     * @return
+     */
+    public function setTargetPath($path)
+    {
+        if ( ! file_exists($path)) {
+            mkdir($path, 0777);
+        }
+
+        $this->path = $path;
+    }
+    /**
+     * getTargetPath
+     *
+     * @return string       the path where imported files are being generated
+     */
+    public function getTargetPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * This is a template that was previously in Builder/Record.tpl. Due to the fact
+     * that it was not bundled when compiling, it had to be moved here.
+     *
+     * @return void
+     */
+    public function loadTemplate() 
+    {
+        if (isset(self::$tpl)) {
+            return;
+        }
+
+        self::$tpl =<<<END
+/**
+ * This class has been auto-generated by the Doctrine ORM Framework
+ */
+class %s extends Doctrine_Record
+{
+    public function setTableDefinition()
+    {
+%s
+    }
+    public function setUp()
+    {
+%s
+    }
+}
+END;
+
+    }
+
+    /*
+     * Build the table definition of a Doctrine_Record object
+     *
+     * @param  string $table
+     * @param  array  $tableColumns
+     */
+    public function buildColumnDefinition(array $tableColumns)
+    {
+        $columns   = array();
+        $i = 1;
+
+        foreach ($tableColumns as $name => $column) {
+            $columns[$i] = '        $this->hasColumn(\'' . $name . '\', \'' . $column['type'] . '\'';
+            if ($column['length']) {
+                $columns[$i] .= ', ' . $column['length'];
+            } else {
+                $columns[$i] .= ', null';
+            }
+
+            $a = array();
+
+            if (isset($column['default']) && $column['default']) {
+                $a[] = '\'default\' => ' . var_export($column['default'], true);
+            }
+            if (isset($column['notnull']) && $column['notnull']) {
+                $a[] = '\'notnull\' => true';
+            }
+            if (isset($column['primary']) && $column['primary']) {
+                $a[] = '\'primary\' => true';
+            }
+            if (isset($column['autoinc']) && $column['autoinc']) {
+                $a[] = '\'autoincrement\' => true';
+            }
+            if (isset($column['unique']) && $column['unique']) {
+                $a[] = '\'unique\' => true';
+            }
+            if (isset($column['unsigned']) && $column['unsigned']) {
+                $a[] = '\'unsigned\' => true';
+            }
+            if ($column['type'] == 'enum' && isset($column['values']) && $column['values']) {
+                $a[] = '\'values\' => array(' . implode(',', $column['values']) . ')';
+            }
+
+            if ( ! empty($a)) {
+                $columns[$i] .= ', ' . 'array(';
+                $length = strlen($columns[$i]);
+                $columns[$i] .= implode(',' . PHP_EOL . str_repeat(' ', $length), $a) . ')';
+            }
+            $columns[$i] .= ');';
+
+            if ($i < (count($tableColumns) - 1)) {
+                $columns[$i] .= PHP_EOL;
+            }
+            $i++;
+        }
+        
+        return implode("\n", $columns);
+    }
+    public function buildRelationDefinition(array $relations)
+    {
+    	$ret = array();
+    	$i = 0;
+        foreach ($relations as $name => $relation) {
+            $alias = (isset($relation['alias']) && $relation['alias'] !== $name) ? ' as ' . $relation['alias'] : '';
+
+            if ( ! isset($relation['type'])) {
+                $relation['type'] = Doctrine_Relation::ONE;
+            }
+
+            if ($relation['type'] === Doctrine_Relation::ONE || 
+                $relation['type'] === Doctrine_Relation::ONE_COMPOSITE) {
+                $ret[$i] = '        $this->hasOne(\'' . $name . $alias . '\'';
+            } else {
+                $ret[$i] = '        $this->hasMany(\'' . $name . $alias . '\'';
+            }
+            $a = array();
+
+            if (isset($relation['deferred']) && $relation['deferred']) {
+                $a[] = '\'default\' => ' . var_export($relation['deferred'], true);
+            }
+            if (isset($relation['local']) && $relation['local']) {
+                $a[] = '\'local\' => ' . var_export($relation['local'], true);
+            }
+            if (isset($relation['foreign']) && $relation['foreign']) {
+                $a[] = '\'foreign\' => ' . var_export($relation['foreign'], true);
+            }
+            if (isset($relation['onDelete']) && $relation['onDelete']) {
+                $a[] = '\'onDelete\' => ' . var_export($relation['onDelete'], true);
+            }
+            if (isset($relation['onUpdate']) && $relation['onUpdate']) {
+                $a[] = '\'onUpdate\' => ' . var_export($relation['onUpdate'], true);
+            }
+            if ( ! empty($a)) {
+                $ret[$i] .= ', ' . 'array(';
+                $length = strlen($ret[$i]);
+                $ret[$i] .= implode(',' . PHP_EOL . str_repeat(' ', $length), $a) . ')';
+            }
+            $ret[$i] .= ');';
+            $i++;
+        }
+        return implode("\n", $ret);
+    }
+    
+
+    public function buildDefinition(array $options, array $columns, array $relations = array())
+    {
+    	if ( ! isset($options['className'])) {
+    	    throw new Doctrine_Import_Builder_Exception('Missing class name.');
+    	}
+
+        //$opt     = array(0 => str_repeat(' ', 8) . '$this->setTableName(\''. $table .'\');');
+
+        $content = sprintf(self::$tpl, $options['className'],
+                          $this->buildColumnDefinition($columns),
+                          $this->buildRelationDefinition($relations));
+                          
+        return $content;
+    }
+
+    public function buildRecord($options, $columns, $relations)
+    {
+    	if ( ! isset($options['className'])) {
+    	    throw new Doctrine_Import_Builder_Exception('Missing class name.');
+    	}
+
+        if ( ! isset($options['fileName'])) {
+            if (empty($this->path)) {
+                $errMsg = 'No build target directory set.';
+                throw new Doctrine_Import_Builder_Exception($errMsg);
+            }
+            
+
+            if (is_writable($this->path) === false) {
+                $errMsg = 'Build target directory ' . $this->path . ' is not writable.';
+                throw new Doctrine_Import_Builder_Exception($errMsg);
+            }
+
+            $options['fileName']  = $this->path . DIRECTORY_SEPARATOR . $options['className'] . $this->suffix;
+        }
+
+        $content = $this->buildDefinition($options, $columns, $relations);
+
+        $bytes = file_put_contents($options['fileName'], '<?php' . PHP_EOL . $content);
+
+        if ($bytes === false) {
+            throw new Doctrine_Import_Builder_Exception("Couldn't write file " . $options['fileName']);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/BaseClass.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/BaseClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..64f6e09d6e141da8e0ffa2696e6c7525ea191542
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/BaseClass.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ *  $Id: BaseClass.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import_Builder');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: BaseClass.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Import_Builder_BaseClass
+ * Builds a Doctrine_Record base class definition based on a schema.
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Builder_BaseClass extends Doctrine_Import_Builder
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..426e72424384166d668dbb31c59f8e658e54019d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Builder/Exception.php
@@ -0,0 +1,40 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import_Exception');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Import_Builder_Exception
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Builder_Exception extends Doctrine_Import_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..16b5a281c5fcc3b546635908d05658e0d76f7c32
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * class Doctrine_Import_Exception
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c758957eaab95686e76332be427e4019d7dcc4c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Firebird.php
@@ -0,0 +1,122 @@
+<?php
+/*
+ *  $Id: Firebird.php 1616 2007-06-10 19:17:26Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lorenzo Alberton <l.alberton@quipo.it> (PEAR MDB2 Interbase driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1616 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Firebird extends Doctrine_Import
+{
+    /**
+     * list all tables in the current database
+     *
+     * @return array        data array
+     */
+    public function listTables($database = null)
+    {
+        $query = 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG=0 AND RDB$VIEW_BLR IS NULL';
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * list all fields in a tables in the current database
+     *
+     * @param string $table name of table that should be used in method
+     * @return mixed data array on success, a MDB2 error on failure
+     * @access public
+     */
+    public function listTableFields($table)
+    {
+        $table = $this->conn->quote(strtoupper($table), 'text');
+        $query = 'SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE UPPER(RDB$RELATION_NAME) = ' . $table;
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * list all users
+     *
+     * @return array            data array containing all database users
+     */
+    public function listUsers()
+    {
+        return $this->conn->fetchColumn('SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES');
+    }
+    /**
+     * list the views in the database
+     *
+     * @return array            data array containing all database views
+     */
+    public function listViews($database = null)
+    {
+        return $this->conn->fetchColumn('SELECT DISTINCT RDB$VIEW_NAME FROM RDB$VIEW_RELATIONS');
+    }
+    /**
+     * list the views in the database that reference a given table
+     *
+     * @param string $table     table for which all references views should be found
+     * @return array            data array containing all views for given table
+     */
+    public function listTableViews($table)
+    {
+        $query  = 'SELECT DISTINCT RDB$VIEW_NAME FROM RDB$VIEW_RELATIONS';
+        $table  = $this->conn->quote(strtoupper($table), 'text');
+        $query .= ' WHERE UPPER(RDB$RELATION_NAME) = ' . $table;
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * list all functions in the current database
+     *
+     * @return array              data array containing all availible functions
+     */
+    public function listFunctions()
+    {
+        $query = 'SELECT RDB$FUNCTION_NAME FROM RDB$FUNCTIONS WHERE RDB$SYSTEM_FLAG IS NULL';
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * This function will be called to get all triggers of the
+     * current database ($this->conn->getDatabase())
+     *
+     * @param  string $table      The name of the table from the
+     *                            previous database to query against.
+     * @return array              data array containing all triggers for given table
+     */
+    public function listTableTriggers($table)
+    {
+        $query = 'SELECT RDB$TRIGGER_NAME FROM RDB$TRIGGERS WHERE RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0';
+
+        if ( ! is_null($table)) {
+            $table = $this->conn->quote(strtoupper($table), 'text');
+            $query .= ' WHERE UPPER(RDB$RELATION_NAME) = ' . $table;
+        }
+
+        return $this->conn->fetchColumn($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..46a4521c67ce8bff35d7ad69ac0865b432fde6df
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Informix.php
@@ -0,0 +1,55 @@
+<?php
+/*
+ *  $Id: Informix.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Informix extends Doctrine_Import
+{
+	protected $sql = array(
+                    'listTables'          => "SELECT tabname,tabtype FROM systables WHERE tabtype IN ('T','V') AND owner != 'informix'",
+                    'listColumns'         => "SELECT c.colname, c.coltype, c.collength, d.default, c.colno
+		                                      FROM syscolumns c, systables t,outer sysdefaults d
+		                                      WHERE c.tabid = t.tabid AND d.tabid = t.tabid AND d.colno = c.colno
+		                                      AND tabname='%s' ORDER BY c.colno",
+		            'listPk'              => "SELECT part1, part2, part3, part4, part5, part6, part7, part8 FROM
+		                                      systables t, sysconstraints s, sysindexes i WHERE t.tabname='%s'
+		                                      AND s.tabid=t.tabid AND s.constrtype='P'
+		                                      AND i.idxname=s.idxname",
+                    'listForeignKeys'     => "SELECT tr.tabname,updrule,delrule,
+                                              i.part1 o1,i2.part1 d1,i.part2 o2,i2.part2 d2,i.part3 o3,i2.part3 d3,i.part4 o4,i2.part4 d4,
+                                              i.part5 o5,i2.part5 d5,i.part6 o6,i2.part6 d6,i.part7 o7,i2.part7 d7,i.part8 o8,i2.part8 d8
+                                              from systables t,sysconstraints s,sysindexes i,
+                                              sysreferences r,systables tr,sysconstraints s2,sysindexes i2
+                                              where t.tabname='%s'
+                                              and s.tabid=t.tabid and s.constrtype='R' and r.constrid=s.constrid
+                                              and i.idxname=s.idxname and tr.tabid=r.ptabid
+                                              and s2.constrid=r.primary and i2.idxname=s2.idxname",
+                                        );
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..96fabff6e3e9d6301d97a5143145d632f8a9f62e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mssql.php
@@ -0,0 +1,192 @@
+<?php
+/*
+ *  $Id: Mssql.php 1889 2007-06-28 12:11:55Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @author      Frank M. Kromann <frank@kromann.info> (PEAR MDB2 Mssql driver)
+ * @author      David Coallier <davidc@php.net> (PEAR MDB2 Mssql driver)
+ * @version     $Revision: 1889 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Mssql extends Doctrine_Import
+{
+    /**
+     * lists all database sequences
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listSequences($database = null)
+    {
+        $query = "SELECT name FROM sysobjects WHERE xtype = 'U'";
+        $tableNames = $this->conn->fetchColumn($query);
+
+        return array_map(array($this->conn->formatter, 'fixSequenceName'), $tableNames);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        $sql     = 'EXEC sp_columns @table_name = ' . $this->conn->quoteIdentifier($table, true);
+        $result  = $this->conn->fetchAssoc($sql);
+        $columns = array();
+
+        foreach ($result as $key => $val) {
+            $val = array_change_key_case($val, CASE_LOWER);
+
+            if (strstr($val['type_name'], ' ')) {
+                list($type, $identity) = explode(' ', $val['type_name']);
+            } else {
+                $type = $val['type_name'];
+                $identity = '';
+            }
+
+            if ($type == 'varchar') {
+                $type .= '(' . $val['length'] . ')';
+            }
+
+            $decl = $this->conn->dataDict->getPortableDeclaration($val);
+
+            $description  = array(
+                'name'      => $val['column_name'],
+                'ntype'     => $type,
+                'type'      => $decl['type'][0],
+                'alltypes'  => $decl['type'],
+                'length'    => $decl['length'],
+                'fixed'     => $decl['fixed'],
+                'unsigned'  => $decl['unsigned'],
+                'notnull'   => (bool) ($val['is_nullable'] === 'NO'),
+                'default'   => $val['column_def'],
+                'primary'   => (strtolower($identity) == 'identity'),
+            );
+            $columns[$val['column_name']] = $description;
+        }
+
+        return $columns;
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+
+    }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        $sql = "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
+
+        return $this->conn->fetchColumn($sql);
+    }
+    /**
+     * lists all triggers
+     *
+     * @return array
+     */
+    public function listTriggers($database = null)
+    {
+        $query = "SELECT name FROM sysobjects WHERE xtype = 'TR'";
+
+        $result = $this->conn->fetchColumn($query);
+
+        return $result;
+    }
+    /**
+     * lists table triggers
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableTriggers($table)
+    {
+        $table = $this->conn->quote($table, 'text');
+        $query = "SELECT name FROM sysobjects WHERE xtype = 'TR' AND object_name(parent_obj) = " . $table;
+
+        $result = $this->conn->fetchColumn($query);
+
+        return $result;
+    }
+    /**
+     * lists table views
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableViews($table)
+    {
+        $keyName = 'INDEX_NAME';
+        $pkName = 'PK_NAME';
+        if ($this->conn->options['portability'] & Doctrine::PORTABILITY_FIX_CASE) {
+            if ($this->conn->options['field_case'] == CASE_LOWER) {
+                $keyName = strtolower($keyName);
+                $pkName  = strtolower($pkName);
+            } else {
+                $keyName = strtoupper($keyName);
+                $pkName  = strtoupper($pkName);
+            }
+        }
+        $table = $this->conn->quote($table, 'text');
+        $query = 'EXEC sp_statistics @table_name = ' . $table;
+        $indexes = $this->conn->fetchColumn($query, $keyName);
+
+        $query = 'EXEC sp_pkeys @table_name = ' . $table;
+        $pkAll = $this->conn->fetchColumn($query, $pkName);
+
+        $result = array();
+
+        foreach ($indexes as $index) {
+            if (!in_array($index, $pkAll) && $index != null) {
+                $result[] = $this->conn->formatter->fixIndexName($index);
+            }
+        }
+
+        return $result;
+    }
+    /**
+     * lists database views
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listViews($database = null)
+    {
+        $query = "SELECT name FROM sysobjects WHERE xtype = 'V'";
+
+        return $this->conn->fetchColumn($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..130bc9aa13546ec6c910469db469d2b8e51bba89
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Mysql.php
@@ -0,0 +1,204 @@
+<?php
+/*
+ *  $Id: Mysql.php 2081 2007-07-26 19:52:12Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 2081 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Mysql extends Doctrine_Import
+{
+    protected $sql  = array(
+                            'showDatabases'   => 'SHOW DATABASES',
+                            'listTableFields' => 'DESCRIBE %s',
+                            'listSequences'   => 'SHOW TABLES',
+                            'listTables'      => 'SHOW TABLES',
+                            'listUsers'       => 'SELECT DISTINCT USER FROM USER',
+                            'listViews'       => "SHOW FULL TABLES %sWHERE Table_type = 'VIEW'",
+                            );
+    /**
+     * lists all database sequences
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listSequences($database = null)
+    {
+        $query = 'SHOW TABLES';
+        if (!is_null($database)) {
+            $query .= ' FROM ' . $database;
+        }
+        $tableNames = $this->conn->fetchColumn($query);
+
+        return array_map(array($this->conn, 'fixSequenceName'), $tableNames);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableConstraints($table)
+    {
+        $keyName = 'Key_name';
+        $nonUnique = 'Non_unique';
+        if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_FIX_CASE) {
+            if ($this->conn->options['field_case'] == CASE_LOWER) {
+                $keyName = strtolower($keyName);
+                $nonUnique = strtolower($nonUnique);
+            } else {
+                $keyName = strtoupper($keyName);
+                $nonUnique = strtoupper($nonUnique);
+            }
+        }
+
+        $table = $this->conn->quoteIdentifier($table, true);
+        $query = 'SHOW INDEX FROM ' . $table;
+        $indexes = $this->conn->fetchAssoc($query);
+
+        $result = array();
+        foreach ($indexes as $indexData) {
+            if (!$indexData[$nonUnique]) {
+                if ($indexData[$keyName] !== 'PRIMARY') {
+                    $index = $this->conn->fixIndexName($indexData[$keyName]);
+                } else {
+                    $index = 'PRIMARY';
+                }
+                if ( ! empty($index)) {
+                    $result[] = $index;
+                }
+            }
+        }
+        return $result;
+    }
+    /**
+     * lists table foreign keys
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableForeignKeys($table) 
+    {
+        $sql = 'SHOW CREATE TABLE ' . $this->conn->quoteIdentifier($table, true);	
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        $sql = 'DESCRIBE ' . $this->conn->quoteIdentifier($table, true);
+        $result = $this->conn->fetchAssoc($sql);
+
+        $description = array();
+        foreach ($result as $key => $val) {
+
+            $val = array_change_key_case($val, CASE_LOWER);
+
+            $decl = $this->conn->dataDict->getPortableDeclaration($val);
+
+            $values = isset($decl['values']) ? $decl['values'] : array();
+
+            $description = array(
+                'name'      => $val['field'],
+                'type'      => $decl['type'][0],
+                'alltypes'  => $decl['type'],
+                'ntype'     => $val['type'],
+                'length'    => $decl['length'],
+                'fixed'     => $decl['fixed'],
+                'unsigned'  => $decl['unsigned'],
+                'values'    => $values,
+                'primary'   => (strtolower($val['key']) == 'pri'),
+                'default'   => $val['default'],
+                'notnull'   => (bool) ($val['null'] != 'YES'),
+                'autoinc'   => (bool) (strpos($val['extra'], 'auto_increment') !== false),
+            );
+            $columns[$val['field']] = $description;
+        }
+
+
+        return $columns;
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+        $keyName = 'Key_name';
+        $nonUnique = 'Non_unique';
+        if ($this->conn->options['portability'] & Doctrine::PORTABILITY_FIX_CASE) {
+            if ($this->conn->options['field_case'] == CASE_LOWER) {
+                $keyName = strtolower($keyName);
+                $nonUnique = strtolower($nonUnique);
+            } else {
+                $keyName = strtoupper($keyName);
+                $nonUnique = strtoupper($nonUnique);
+            }
+        }
+
+        $table = $this->conn->quoteIdentifier($table, true);
+        $query = 'SHOW INDEX FROM ' . $table;
+        $indexes = $this->conn->fetchAssoc($query);
+
+
+        $result = array();
+        foreach ($indexes as $indexData) {
+            if ($indexData[$nonUnique] && ($index = $this->conn->fixIndexName($indexData[$keyName]))) {
+                $result[] = $index;
+            }
+        }
+        return $result;
+    }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        return $this->conn->fetchColumn($this->sql['listTables']);
+    }
+    /**
+     * lists database views
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listViews($database = null)
+    {
+        if (!is_null($database)) {
+            $query = sprintf($this->sql['listViews'], ' FROM ' . $database);
+        }
+
+        return $this->conn->fetchColumn($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..60b8015798ba5f4cf611f50f054a6055c6669bdf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Oracle.php
@@ -0,0 +1,225 @@
+<?php
+/*
+ *  $Id: Oracle.php 1889 2007-06-28 12:11:55Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @version     $Revision: 1889 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Oracle extends Doctrine_Import
+{
+    /**
+     * lists all databases
+     *
+     * @return array
+     */
+    public function listDatabases()
+    {
+        if ( ! $this->conn->getAttribute(Doctrine::ATTR_EMULATE_DATABASE)) {
+            throw new Doctrine_Import_Exception('database listing is only supported if the "emulate_database" option is enabled');
+        }
+        /**
+        if ($this->conn->options['database_name_prefix']) {
+            $query = 'SELECT SUBSTR(username, ';
+            $query.= (strlen($this->conn->getAttribute(['database_name_prefix'])+1);
+            $query.= ") FROM sys.dba_users WHERE username LIKE '";
+            $query.= $this->conn->options['database_name_prefix']."%'";
+        } else {
+        */
+        $query   = 'SELECT username FROM sys.dba_users';
+
+        $result2 = $this->conn->standaloneQuery($query);
+        $result  = $result2->fetchColumn();
+
+        return $result;
+    }
+    /**
+     * lists all availible database functions
+     *
+     * @return array
+     */
+    public function listFunctions()
+    {
+        $query = "SELECT name FROM sys.user_source WHERE line = 1 AND type = 'FUNCTION'";
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * lists all database triggers
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTriggers($database = null)
+    {
+
+    }
+    /**
+     * lists all database sequences
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listSequences($database = null)
+    {
+        $query = "SELECT sequence_name FROM sys.user_sequences";
+
+        $tableNames = $this->conn->fetchColumn($query);
+
+        return array_map(array($this->conn->formatter, 'fixSequenceName'), $tableNames);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableConstraints($table)
+    {
+        $table = $this->conn->quote($table, 'text');
+
+        $query = 'SELECT index_name name FROM user_constraints'
+               . ' WHERE table_name = ' . $table . ' OR table_name = ' . strtoupper($table);
+
+        $constraints = $this->conn->fetchColumn($query);
+
+        return array_map(array($this->conn->formatter, 'fixIndexName'), $constraints);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        $table  = strtoupper($table);
+        $sql    = "SELECT column_name, data_type, data_length, nullable, data_default, data_scale, data_precision FROM all_tab_columns"
+                . " WHERE table_name = '" . $table . "' ORDER BY column_name";
+
+        $result = $this->conn->fetchAssoc($sql);
+
+        foreach($result as $val) {
+            $val = array_change_key_case($val, CASE_LOWER);
+            $decl = $this->conn->dataDict->getPortableDeclaration($val);
+
+
+            $descr[$val['column_name']] = array(
+               'name'       => $val['column_name'],
+               'notnull'    => (bool) ($val['nullable'] === 'N'),
+               'ntype'      => $val['data_type'],
+               'type'       => $decl['type'][0],
+               'alltypes'   => $decl['type'],
+               'fixed'      => $decl['fixed'],
+               'unsigned'   => $decl['unsigned'],
+               'default'    => $val['data_default'],
+               'length'     => $val['data_length'],
+               'precision'  => $val['data_precision'],
+               'scale'      => $val['scale'],
+            );
+        }
+        return $result;
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+        $table = $this->conn->quote($table, 'text');
+        $query = 'SELECT index_name name FROM user_indexes'
+               . ' WHERE table_name = ' . $table . ' OR table_name = ' . strtoupper($table)
+               . ' AND generated = ' . $this->conn->quote('N', 'text');
+
+        $indexes = $this->conn->fetchColumn($query);
+
+        return array_map(array($this->conn->formatter, 'fixIndexName'), $indexes);
+    }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        $query = 'SELECT table_name FROM sys.user_tables';
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * lists table triggers
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableTriggers($table)
+    {
+
+    }
+    /**
+     * lists table views
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableViews($table)
+    {
+
+    }
+    /**
+     * lists database users
+     *
+     * @return array
+     */
+    public function listUsers()
+    {
+    	/**
+        if ($this->conn->options['emulate_database'] && $this->conn->options['database_name_prefix']) {
+            $query = 'SELECT SUBSTR(username, ';
+            $query.= (strlen($this->conn->options['database_name_prefix'])+1);
+            $query.= ") FROM sys.dba_users WHERE username NOT LIKE '";
+            $query.= $this->conn->options['database_name_prefix']."%'";
+        } else {
+        */
+
+        $query = 'SELECT username FROM sys.dba_users';
+        //}
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * lists database views
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listViews($database = null)
+    {
+        $query = 'SELECT view_name FROM sys.user_views';
+        return $this->conn->fetchColumn($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c490bfdd1176c494520e05021c7440a5d6ba69d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Pgsql.php
@@ -0,0 +1,234 @@
+<?php
+/*
+ *  $Id: Pgsql.php 1889 2007-06-28 12:11:55Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Paul Cooper <pgc@ucecom.com>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1889 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Pgsql extends Doctrine_Import
+{
+
+    protected $sql = array(
+                        'listDatabases' => 'SELECT datname FROM pg_database',
+                        'listFunctions' => "SELECT
+                                                proname
+                                            FROM
+                                                pg_proc pr,
+                                                pg_type tp
+                                            WHERE
+                                                tp.oid = pr.prorettype
+                                                AND pr.proisagg = FALSE
+                                                AND tp.typname <> 'trigger'
+                                                AND pr.pronamespace IN
+                                                    (SELECT oid FROM pg_namespace
+                                                     WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema'",
+                        'listSequences' => "SELECT
+                                                relname
+                                            FROM
+                                                pg_class
+                                            WHERE relkind = 'S' AND relnamespace IN
+                                                (SELECT oid FROM pg_namespace
+                                                 WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema')",
+                        'listTables'    => "SELECT
+                                                c.relname AS table_name
+                                            FROM pg_class c, pg_user u
+                                            WHERE c.relowner = u.usesysid
+                                                AND c.relkind = 'r'
+                                                AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname)
+                                                AND c.relname !~ '^(pg_|sql_)'
+                                            UNION
+                                            SELECT c.relname AS table_name
+                                            FROM pg_class c
+                                            WHERE c.relkind = 'r'
+                                                AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname)
+                                                AND NOT EXISTS (SELECT 1 FROM pg_user WHERE usesysid = c.relowner)
+                                                AND c.relname !~ '^pg_'",
+                        'listViews'     => 'SELECT viewname FROM pg_views',
+                        'listUsers'     => 'SELECT usename FROM pg_user',
+                        'listTableConstraints' => "SELECT
+                                                        relname
+                                                   FROM
+                                                        pg_class
+                                                   WHERE oid IN (
+                                                        SELECT indexrelid
+                                                        FROM pg_index, pg_class
+                                                        WHERE pg_class.relname = %s
+                                                            AND pg_class.oid = pg_index.indrelid
+                                                            AND (indisunique = 't' OR indisprimary = 't')
+                                                        )",
+                        'listTableIndexes'     => "SELECT
+                                                        relname
+                                                   FROM
+                                                        pg_class
+                                                   WHERE oid IN (
+                                                        SELECT indexrelid
+                                                        FROM pg_index, pg_class
+                                                        WHERE pg_class.relname = %s
+                                                            AND pg_class.oid=pg_index.indrelid
+                                                            AND indisunique != 't'
+                                                            AND indisprimary != 't'
+                                                        )",
+                        'listTableColumns'     => "SELECT
+                                                        a.attnum,
+                                                        a.attname AS field,
+                                                        t.typname AS type,
+                                                        format_type(a.atttypid, a.atttypmod) AS complete_type,
+                                                        a.attnotnull AS isnotnull,
+                                                        (SELECT 't'
+                                                          FROM pg_index
+                                                          WHERE c.oid = pg_index.indrelid
+                                                          AND pg_index.indkey[0] = a.attnum
+                                                          AND pg_index.indisprimary = 't'
+                                                        ) AS pri,
+                                                        (SELECT pg_attrdef.adsrc
+                                                          FROM pg_attrdef
+                                                          WHERE c.oid = pg_attrdef.adrelid
+                                                          AND pg_attrdef.adnum=a.attnum
+                                                        ) AS default
+                                                  FROM pg_attribute a, pg_class c, pg_type t
+                                                  WHERE c.relname = %s
+                                                        AND a.attnum > 0
+                                                        AND a.attrelid = c.oid
+                                                        AND a.atttypid = t.oid
+                                                  ORDER BY a.attnum",
+                        );
+    /**
+     * lists all database triggers
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTriggers($database = null)
+    {
+
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableConstraints($table)
+    {
+        $table = $this->conn->quote($table);
+        $query = sprintf($this->sql['listTableConstraints'], $table);
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        $table = $this->conn->quote($table);
+        $query = sprintf($this->sql['listTableColumns'], $table);
+        $result = $this->conn->fetchAssoc($query);
+
+        $columns     = array();
+        foreach ($result as $key => $val) {
+            $val = array_change_key_case($val, CASE_LOWER);
+
+            if (strtolower($val['type']) === 'varchar') {
+                // get length from varchar definition
+                $length = preg_replace('~.*\(([0-9]*)\).*~', '$1', $val['complete_type']);
+                $val['length'] = $length;
+            }
+            
+            $decl = $this->conn->dataDict->getPortableDeclaration($val);
+
+            $description = array(
+                'name'      => $val['field'],
+                'ntype'     => $val['type'],
+                'type'      => $decl['type'][0],
+                'alltypes'  => $decl['type'],
+                'length'    => $decl['length'],
+                'fixed'     => $decl['fixed'],
+                'unsigned'  => $decl['unsigned'],
+                'notnull'   => ($val['isnotnull'] == ''),
+                'default'   => $val['default'],
+                'primary'   => ($val['pri'] == 't'),
+            );
+            $columns[$val['field']] = $description;
+        }
+        return $columns;
+    }
+    /**
+     * list all indexes in a table
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+        $table = $this->conn->quote($table);
+        $query = sprintf($this->sql['listTableIndexes'], $table);
+
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        return $this->conn->fetchColumn($this->sql['listTables']);
+    }
+    /**
+     * lists table triggers
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableTriggers($table)
+    {
+        $query = 'SELECT trg.tgname AS trigger_name
+                    FROM pg_trigger trg,
+                         pg_class tbl
+                   WHERE trg.tgrelid = tbl.oid';
+        if ($table !== null) {
+            $table = $this->conn->quote(strtoupper($table), 'string');
+            $query .= " AND tbl.relname = $table";
+        }
+        return $this->conn->fetchColumn($query);
+    }
+    /**
+     * list the views in the database that reference a given table
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableViews($table)
+    {
+        return $this->conn->fetchColumn($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a4b88d73e6c8d1a878d7c7f5dead33bbdda27a1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader.php
@@ -0,0 +1,57 @@
+<?php
+/*
+ *  $Id: Reader.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Reader.php 1080 2007-02-10 18:17:08Z romanb $
+/**
+ * class Doctrine_Import_Reader
+ * Is responsible of reading a database definitions from a source and costructing a
+ * database schema
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Import_Reader
+{
+
+    /** Aggregations: */
+
+    /** Compositions: */
+
+     /*** Attributes: ***/
+
+    /**
+     *
+     * @return Doctrine_Schema
+     * @abstract
+     * @access public
+     */
+    abstract public function read( );
+
+} // end of Doctrine_Import_Reader
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Db.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Db.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc5a8ebeb18e8d993e96f59f24769f859aaf31e9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Db.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Db.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import_Reader');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Db.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Import_Reader_Db
+ * Reads a database using the given PDO connection and constructs a database
+ * schema
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Reader_Db extends Doctrine_Import_Reader
+{
+
+    /** Aggregations: */
+
+    /** Compositions: */
+
+     /*** Attributes: ***/
+
+    /**
+     * @access private
+     */
+    private $pdo;
+
+    /**
+     *
+     * @param object pdo      * @return
+     * @access public
+     */
+    public function setPdo( $pdo )
+    {
+
+    } // end of member function setPdo
+
+    /**
+     *
+     * @return Doctrine_Schema
+     * @access public
+     */
+    public function read( )
+    {
+        $dataDict = Doctrine_Manager::getInstance()->getCurrentConnection()->getDataDict();
+
+        $schema = new Doctrine_Schema(); /* @todo FIXME i am incomplete*/
+        $db = new Doctrine_Schema_Database();
+        $schema->addDatabase($db);
+
+        $dbName = 'XXtest'; // @todo FIXME where should we get
+
+        $this->conn->set("name",$dbName);
+        $tableNames = $dataDict->listTables();
+        foreach ($tableNames as $tableName){
+            $table = new Doctrine_Schema_Table();
+            $table->set("name",$tableName);
+            $tableColumns = $dataDict->listTableColumns($tableName);
+            foreach ($tableColumns as $tableColumn){
+                $table->addColumn($tableColumn);
+            }
+            $this->conn->addTable($table);
+            if ($fks = $dataDict->listTableConstraints($tableName)){
+                foreach ($fks as $fk){
+                    $relation = new Doctrine_Schema_Relation();
+                    $relation->setRelationBetween($fk['referencingColumn'],$fk['referencedTable'],$fk['referencedColumn']);
+                    $table->setRelation($relation);
+                }
+            }
+        }
+
+        return $schema;
+    }
+
+} // end of Doctrine_Import_Reader_Db
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..10c644fa7b69b778cb82aacde50974fd754cee59
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Exception.php
@@ -0,0 +1,47 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+/**
+ * class Doctrine_Import_Reader_Exception
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Reader_Exception
+{
+
+    /** Aggregations: */
+
+    /** Compositions: */
+
+     /*** Attributes: ***/
+
+} // end of Doctrine_Import_Reader_Exception
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Propel.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Propel.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5512d4ce505c4dc34efbd52c0ee8874a7957e94
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Reader/Propel.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ *  $Id: Propel.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import_Reader');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Propel.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Import_Reader_Xml_Propel
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Import_Reader_Xml_Propel extends Doctrine_Import_Reader
+{
+
+    /** Aggregations: */
+
+    /** Compositions: */
+
+     /*** Attributes: ***/
+
+    /**
+     * @access private
+     */
+    private $xml;
+
+    /**
+     *
+     * @param string xml      * @return
+     * @access public
+     */
+    public function setXml( $xml )
+    {
+
+    } // end of member function setXml
+
+    public function read()
+    { }
+
+} // end of Doctrine_Import_Reader_Xml_Propel
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema.php
new file mode 100644
index 0000000000000000000000000000000000000000..f53fc11b1317a7cdc95444c7e93c29a8c1ad0abf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema.php
@@ -0,0 +1,88 @@
+<?php
+/*
+ * $Id: Schema.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Import_Schema
+ *
+ * Different methods to import a XML schema. The logic behind using two different
+ * methods is simple. Some people will like the idea of producing Doctrine_Record
+ * objects directly, which is totally fine. But in fast and growing application,
+ * table definitions tend to be a little bit more volatile. importArr() can be used
+ * to output a table definition in a PHP file. This file can then be stored 
+ * independantly from the object itself.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ * @author      Jonathan H. Wage <jonwage@gmail.com>
+ */
+abstract class Doctrine_Import_Schema
+{
+    /**
+     * parse
+     *
+     * Function to do the actual parsing of the file
+     *
+     * @param string $schema 
+     * @return void
+     * @author Jonathan H. Wage
+     */
+    
+    abstract function parse($schema);
+    
+    /**
+     * Parse the schema and return it in an array
+     *
+     * @param  string $schema
+     * @access public
+     */
+    abstract function parseSchema($schema);
+    
+    /**
+     * importSchema
+     *
+     * A method to import a Schema and translate it into a Doctrine_Record object
+     *
+     * @param  string $schema       The file containing the XML schema
+     * @param  string $directory    The directory where the Doctrine_Record class will
+     *                              be written
+     * @access public
+     */
+    public function importSchema($schema, $directory)
+    {
+        $builder = new Doctrine_Import_Builder();
+        $builder->setTargetPath($directory);
+
+        $array = $this->parseSchema($schema);
+        
+        foreach ($array as $name => $properties) {
+            $options['className'] = $properties['class'];
+            $options['fileName'] = $directory.DIRECTORY_SEPARATOR.$properties['class'].'.class.php';
+            
+            $columns = $properties['columns'];
+            
+            $builder->buildRecord($options, $columns, array());
+        }
+    }    
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Xml.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Xml.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e72c7c7e038fbe30a20da947639f5972244725b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Xml.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ * $Id: Xml.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Import_Xml
+ *
+ * Different methods to import a XML schema. The logic behind using two different
+ * methods is simple. Some people will like the idea of producing Doctrine_Record
+ * objects directly, which is totally fine. But in fast and growing application,
+ * table definitions tend to be a little bit more volatile. importArr() can be used
+ * to output a table definition in a PHP file. This file can then be stored 
+ * independantly from the object itself.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ * @author      Jonathan H. Wage <jonwage@gmail.com>
+ */
+class Doctrine_Import_Schema_Xml extends Doctrine_Import_Schema
+{
+	/**
+	 * parse
+	 *
+	 * @param string $schema 
+	 * @return void
+	 */
+    public function parse($schema)
+    {
+        if (!is_readable($schema)) {
+            throw new Doctrine_Import_Exception('Could not read schema file '. $schema);
+        }
+        
+        if (!($xmlString = file_get_contents($schema))) {
+            throw new Doctrine_Import_Exception('Schema file '. $schema . ' is empty');
+        }
+        
+        return simplexml_load_string($xmlString);
+    }
+    
+    /**
+     * parseSchema
+     *
+     * A method to parse a XML Schema and translate it into a property array. 
+     * The function returns that property array.
+     *
+     * @param  string $schema   Path to the file containing the XML schema
+     * @return array
+     */
+    public function parseSchema($schema)
+    {        
+        $xmlObj = $this->parse($schema);
+        
+        // Go through all tables...
+        foreach ($xmlObj->table as $table) {
+            // Go through all columns... 
+            foreach ($table->declaration->field as $field) {
+                $colDesc = array(
+                    'name'      => (string) $field->name,
+                    'type'      => (string) $field->type,
+                    'ptype'     => (string) $field->type,
+                    'length'    => (int) $field->length,
+                    'fixed'     => (int) $field->fixed,
+                    'unsigned'  => (bool) $field->unsigned,
+                    'primary'   => (bool) (isset($field->primary) && $field->primary),
+                    'default'   => (string) $field->default,
+                    'notnull'   => (bool) (isset($field->notnull) && $field->notnull),
+                    'autoinc'   => (bool) (isset($field->autoincrement) && $field->autoincrement),
+                );
+            
+                $columns[(string) $field->name] = $colDesc;
+            }
+            
+            $class = $table->class ? (string) $table->class:(string) $table->name;
+            
+            $tables[(string) $table->name]['name'] = (string) $table->name;
+            $tables[(string) $table->name]['class'] = (string) $class;
+            
+            $tables[(string) $table->name]['columns'] = $columns;
+        }
+        
+        return $tables;
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Yml.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Yml.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d86e72731e1e9ac5a238724a62d7768130fcd37
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Schema/Yml.php
@@ -0,0 +1,100 @@
+<?php
+/*
+ * $Id: Yml.php 1838 2007-06-26 00:58:21Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * class Doctrine_Import_Schema_Yml
+ *
+ * Different methods to import a YML schema. The logic behind using two different
+ * methods is simple. Some people will like the idea of producing Doctrine_Record
+ * objects directly, which is totally fine. But in fast and growing application,
+ * table definitions tend to be a little bit more volatile. importArr() can be used
+ * to output a table definition in a PHP file. This file can then be stored 
+ * independantly from the object itself.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1838 $
+ * @author      Nicolas Bérard-Nault <nicobn@gmail.com>
+ * @author      Jonathan H. Wage <jonwage@gmail.com>
+ */
+class Doctrine_Import_Schema_Yml extends Doctrine_Import_Schema
+{
+	/**
+	 * parse
+	 *
+	 * @param string $schema 
+	 * @return void
+	 */
+    public function parse($schema)
+    {
+        if (!is_readable($schema)) {
+            throw new Doctrine_Import_Exception('Could not read schema file '. $schema);
+        }
+
+		return array();
+    }
+    
+    /**
+     * parseSchema
+     *
+     * A method to parse a Yml Schema and translate it into a property array. 
+     * The function returns that property array.
+     *
+     * @param  string $schema   Path to the file containing the XML schema
+     * @return array
+     */
+    public function parseSchema($schema)
+    { 
+        $array = $this->parse($schema);
+      	
+		$tables = array();
+		
+		// Not working yet
+		/*
+        // Go through all tables...
+        foreach ($array['table'] as $table) {
+            // Go through all columns... 
+            foreach ($table['declaration']['field'] as $field) {
+                $colDesc = array(
+                    'name'      => (string) $field['name'],
+                    'type'      => (string) $field['type'],
+                    'ptype'     => (string) $field['type'],
+                    'length'    => (int) $field['length'],
+                    'fixed'     => (int) $field['fixed'],
+                    'unsigned'  => (bool) $field['unsigned'],
+                    'primary'   => (bool) (isset($field['primary']) && $field['primary']),
+                    'default'   => (string) $field['default'],
+                    'notnull'   => (bool) (isset($field['notnull']) && $field['notnull']),
+                    'autoinc'   => (bool) (isset($field['autoincrement']) && $field['autoincrement']),
+                );
+            
+                $columns[(string) $field['name']] = $colDesc;
+            }
+            
+            $tables[(string) $table['name']] = $columns;
+        }
+		*/
+        
+        return $tables;
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1849b5f437659bb3b2825df6993aab1377c0d2a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Import/Sqlite.php
@@ -0,0 +1,231 @@
+<?php
+/*
+ *  $Id: Sqlite.php 1889 2007-06-28 12:11:55Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Import');
+/**
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @version     $Revision: 1889 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Import_Sqlite extends Doctrine_Import
+{
+    /**
+     * lists all databases
+     *
+     * @return array
+     */
+    public function listDatabases()
+    {
+
+    }
+    /**
+     * lists all availible database functions
+     *
+     * @return array
+     */
+    public function listFunctions()
+    {
+
+    }
+    /**
+     * lists all database triggers
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTriggers($database = null)
+    {
+
+    }
+    /**
+     * lists all database sequences
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listSequences($database = null)
+    {
+        $query      = "SELECT name FROM sqlite_master WHERE type='table' AND sql NOT NULL ORDER BY name";
+        $tableNames = $this->conn->fetchColumn($query);
+
+        $result = array();
+        foreach ($tableNames as $tableName) {
+            if ($sqn = $this->conn->fixSequenceName($tableName, true)) {
+                $result[] = $sqn;
+            }
+        }
+        if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_FIX_CASE) {
+            $result = array_map(($this->conn->getAttribute(Doctrine::ATTR_FIELD_CASE) == CASE_LOWER ? 'strtolower' : 'strtoupper'), $result);
+        }
+        return $result;
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableConstraints($table)
+    {
+        $table = $this->conn->quote($table, 'text');
+
+        $query = "SELECT sql FROM sqlite_master WHERE type='index' AND ";
+
+        if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_FIX_CASE) {
+            $query .= 'LOWER(tbl_name) = ' . strtolower($table);
+        } else {
+            $query .= 'tbl_name = ' . $table;
+        }
+        $query  .= ' AND sql NOT NULL ORDER BY name';
+        $indexes = $this->conn->fetchColumn($query);
+
+        $result = array();
+        foreach ($indexes as $sql) {
+            if (preg_match("/^create unique index ([^ ]+) on /i", $sql, $tmp)) {
+                $index = $this->conn->fixIndexName($tmp[1]);
+                if ( ! empty($index)) {
+                    $result[$index] = true;
+                }
+            }
+        }
+
+        if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_FIX_CASE) {
+            $result = array_change_key_case($result, $this->conn->getAttribute(Doctrine::ATTR_FIELD_CASE));
+        }
+        return array_keys($result);
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableColumns($table)
+    {
+        $sql    = 'PRAGMA table_info(' . $table . ')';
+        $result = $this->conn->fetchAll($sql);
+
+        $description = array();
+        $columns     = array();
+        foreach ($result as $key => $val) {
+            $val = array_change_key_case($val, CASE_LOWER);
+            $decl = $this->conn->dataDict->getPortableDeclaration($val);
+
+            $description = array(
+                    'name'      => $val['name'],
+                    'ntype'     => $val['type'],
+                    'type'      => $decl['type'][0],
+                    'alltypes'  => $decl['type'],
+                    'notnull'   => (bool) $val['notnull'],
+                    'default'   => $val['dflt_value'],
+                    'primary'   => (bool) $val['pk'],
+                    'length'    => null,
+                    'scale'     => null,
+                    'precision' => null,
+                    'unsigned'  => null,
+                    );
+            $columns[$val['name']] = $description;
+        }
+        return $columns;
+    }
+    /**
+     * lists table constraints
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableIndexes($table)
+    {
+        $sql  = 'PRAGMA index_list(' . $table . ')';
+        return $this->conn->fetchColumn($sql);
+   }
+    /**
+     * lists tables
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listTables($database = null)
+    {
+        $sql = "SELECT name FROM sqlite_master WHERE type = 'table' "
+             . "UNION ALL SELECT name FROM sqlite_temp_master "
+             . "WHERE type = 'table' ORDER BY name";
+
+        return $this->conn->fetchColumn($sql);
+    }
+    /**
+     * lists table triggers
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableTriggers($table)
+    {
+
+    }
+    /**
+     * lists table views
+     *
+     * @param string $table     database table name
+     * @return array
+     */
+    public function listTableViews($table)
+    {
+        $query = "SELECT name, sql FROM sqlite_master WHERE type='view' AND sql NOT NULL";
+        $views = $db->fetchAll($query);
+
+        $result = array();
+        foreach ($views as $row) {
+            if (preg_match("/^create view .* \bfrom\b\s+\b{$table}\b /i", $row['sql'])) {
+                if ( ! empty($row['name'])) {
+                    $result[$row['name']] = true;
+                }
+            }
+        }
+        return $result;
+    }
+    /**
+     * lists database users
+     *
+     * @return array
+     */
+    public function listUsers()
+    {
+
+    }
+    /**
+     * lists database views
+     *
+     * @param string|null $database
+     * @return array
+     */
+    public function listViews($database = null)
+    {
+        $query = "SELECT name FROM sqlite_master WHERE type='view' AND sql NOT NULL";
+
+        return $this->conn->fetchColumn($query);
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/IntegrityMapper.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/IntegrityMapper.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d1b86ff3bc4d71299d06ec8aeb1849853d3b571
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/IntegrityMapper.php
@@ -0,0 +1,142 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_IntegrityMapper
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_IntegrityMapper 
+{
+    public function processDeleteIntegrity(Doctrine_Record $record)
+    {
+        $coll = $this->buildIntegrityRelationQuery($record);
+        
+        $this->invokeIntegrityActions($record);
+    }
+    public function invokeIntegrityActions(Doctrine_Record $record)
+    {
+    	$deleteActions = Doctrine_Manager::getInstance()
+                         ->getDeleteActions($record->getTable()->getComponentName());
+                         
+        foreach ($record->getTable()->getRelations() as $relation) {
+            $componentName = $relation->getTable()->getComponentName();
+            
+            foreach($record->get($relation->getAlias()) as $coll) {
+                if ( ! ($coll instanceof Doctrine_Collection)) {
+                    $coll = array($coll);
+                }
+                foreach ($coll as $record) {
+                    $this->invokeIntegrityActions($record);
+
+                    if (isset($deleteActions[$componentName])) {
+                        if ($deleteActions[$componentName] === 'SET NULL') {
+                            $record->set($relation->getForeign(), null);
+                        } elseif ($deleteActions[$componentName] === 'CASCADE') {
+                            $this->conn->transaction->addDelete($record);
+                        }
+                    }
+
+                }
+            }
+        }
+    }
+    public function buildIntegrityRelationQuery(Doctrine_Record $record)
+    {
+        $q = new Doctrine_Query();
+        
+        $aliases = array();
+        $indexes = array();
+
+        $root = $record->getTable()->getComponentName();
+        $rootAlias = strtolower(substr($root, 0, 1));
+        $aliases[$rootAlias] = $root;
+
+        foreach ((array) $record->getTable()->getIdentifier() as $id) {
+            $field = $rootAlias . '.' . $id;
+            $cond[]   = $field . ' = ?';
+            $fields[] = $field;
+            $params   = $record->get($id);
+        }
+        $fields = implode(', ', $fields);
+        $components[] = $root;
+        $this->buildIntegrityRelations($record->getTable(), $aliases, $fields, $indexes, $components);
+
+        $q->select($fields)->from($root. ' ' . $rootAlias);
+
+        foreach ($aliases as $alias => $name) {
+            $q->leftJoin($rootAlias . '.' . $name . ' ' . $alias);
+        }
+        $q->where(implode(' AND ', $cond));
+
+        return $q->execute(array($params));
+    }
+    public function buildIntegrityRelations(Doctrine_Table $table, &$aliases, &$fields, &$indexes, &$components)
+    {
+    	$deleteActions = Doctrine_Manager::getInstance()
+                         ->getDeleteActions($table->getComponentName());
+
+        foreach ($table->getRelations() as $relation) {
+            $componentName = $relation->getTable()->getComponentName();
+            if (in_array($componentName, $components)) {
+                continue;
+            }
+            $components[] = $componentName;
+
+            $alias = strtolower(substr($relation->getAlias(), 0, 1));
+
+            if ( ! isset($indexes[$alias])) {
+                $indexes[$alias] = 1;
+            }
+
+            if (isset($deleteActions[$componentName])) {
+                if (isset($aliases[$alias])) {
+                    $alias = $alias . ++$indexes[$alias];
+                }
+                $aliases[$alias] = $relation->getAlias();
+
+                if ($deleteActions[$componentName] === 'SET NULL') {
+                    if ($relation instanceof Doctrine_Relation_ForeignKey) {
+                        foreach ((array) $relation->getForeign() as $foreign) {
+                            $fields .= ', ' . $alias . '.' . $foreign;
+                        }
+                    } elseif ($relation instanceof Doctrine_Relation_LocalKey) {
+                        foreach ((array) $relation->getLocal() as $foreign) {
+                            $fields .= ', ' . $alias . '.' . $foreign;
+                        }
+                    }
+                }
+                foreach ((array) $relation->getTable()->getIdentifier() as $id) {
+                    $fields .= ', ' . $alias . '.' . $id;
+                }
+                if ($deleteActions[$componentName] === 'CASCADE') {
+                    $this->buildIntegrityRelations($relation->getTable(), $aliases, $fields, $indexes, $components);
+                }
+            }
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Lib.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Lib.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5522fdc4cd54e5db382a2bbd9d0c5597adab49a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Lib.php
@@ -0,0 +1,260 @@
+<?php
+/*
+ *  $Id: Lib.php 1916 2007-07-01 10:47:44Z meus $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Lib has not commonly used static functions, mostly for debugging purposes
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1916 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Lib
+{
+    /**
+     * @param integer $state                the state of record
+     * @see Doctrine_Record::STATE_* constants
+     * @return string                       string representation of given state
+     */
+    public static function getRecordStateAsString($state)
+    {
+        switch ($state) {
+        case Doctrine_Record::STATE_PROXY:
+            return "proxy";
+            break;
+        case Doctrine_Record::STATE_CLEAN:
+            return "persistent clean";
+            break;
+        case Doctrine_Record::STATE_DIRTY:
+            return "persistent dirty";
+            break;
+        case Doctrine_Record::STATE_TDIRTY:
+            return "transient dirty";
+            break;
+        case Doctrine_Record::STATE_TCLEAN:
+            return "transient clean";
+            break;
+        }
+    }
+    /**
+     * returns a string representation of Doctrine_Record object
+     * @param Doctrine_Record $record
+     * @return string
+     */
+    public static function getRecordAsString(Doctrine_Record $record)
+    {
+        $r[] = '<pre>';
+        $r[] = 'Component  : ' . $record->getTable()->getComponentName();
+        $r[] = 'ID         : ' . $record->obtainIdentifier();
+        $r[] = 'References : ' . count($record->getReferences());
+        $r[] = 'State      : ' . Doctrine_Lib::getRecordStateAsString($record->getState());
+        $r[] = 'OID        : ' . $record->getOID();
+        $r[] = 'data       : ' . Doctrine::dump($record->getData(), false);
+        $r[] = '</pre>';
+        return implode("\n",$r)."<br />";
+    }
+    /**
+     * Return an collection of records as XML. 
+     * 
+     * @see getRecordAsXml for options to set in the record class to control this.
+     *
+     * @param Doctrine_Collection $collection
+     * @param SimpleXMLElement $xml
+     * @return string Xml as string 
+     */
+
+    public static function getCollectionAsXml(Doctrine_Collection $collection, SimpleXMLElement $incomming_xml = null){
+
+        $collectionName = Doctrine_Lib::plurelize($collection->getTable()->tableName);
+				if ( $collection->count != 0) {
+					$record = $collection[0];
+        	$xml_options = $record->option("xml");
+					if ( isset($xml_options["collection_name"])) {
+						$collectionName = $xml_options["collection_name"];
+					}
+				}
+
+        if ( ! isset($incomming_xml)) {
+						$new_xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><" . $collectionName . "></" . $collectionName . ">";
+            $xml = new SimpleXMLElement($new_xml_string);
+        } else {
+            $xml = $incomming_xml->addChild($collectionName);
+        }
+        foreach ($collection as $key => $record) {
+            Doctrine_Lib::getRecordAsXml($record, $xml);
+        }
+        return $xml->asXML();
+    }
+
+    public static function plurelize($string){
+        return $string . "s";
+    }
+
+    /**
+     * Return a recrd as XML. 
+     *
+     * In order to control how this is done set the "xml" option in a record. 
+     * This option is an array that has the keys "ignore_fields" and "include_relations". Both of these are arrays that list the name of fields/relations to include/process. 
+     *
+     * If you want to insert this xml as a part inside another xml send a 
+     * SimpleXMLElement to the function. Because of the nature of SimpleXML the 
+     * content you add to this element will be avilable after the function is 
+     * complete.
+     *
+     * @param Doctrine_Record $record
+     * @param SimpleXMLElement $xml
+     * @return string Xml as string
+     */
+    public static function getRecordAsXml(Doctrine_Record $record, SimpleXMlElement $incomming_xml = NULL)
+    {
+        $recordname = $record->getTable()->tableName;
+        if ( !isset($incomming_xml)) {
+						$new_xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><" . $recordname . "></" . $recordname . ">";
+            $xml = new SimpleXMLElement($new_xml_string);
+        }else{
+            $xml = $incomming_xml->addChild($recordname);
+        }
+				foreach($record->obtainIdentifier() as $pk_field => $pk_value){
+					$xml->addChild($pk_field,$pk_value); 
+				}
+        $xml_options = $record->option("xml");
+				if ( isset($xml_options["record_name"])) {
+					$recordname = $xml_options["record_name"];
+				}
+        foreach ($record->getData() as $field => $value) {
+            if ((isset($xml_options["ignore_fields"]) && !in_array($field, $xml_options["ignore_fields"])) || !isset($xml_options["ignore_fields"])) {
+                if ($value instanceOf Doctrine_Null) {
+                    $xml->addChild($field);
+                } else {	
+                    $xml->addChild($field, $value);
+                }
+            }
+        }
+        if (!isset($xml_options["include_relations"])) {
+            return $xml->asXML();
+        }
+        $relations = $record->getTable()->getRelations();
+        foreach ($relations as $name => $relation) {
+            if (in_array($name, $xml_options["include_relations"])) {
+                $relation_type = $relation->getType();
+                $related_records = $record->get($name);
+                if ($relation_type == Doctrine_Relation::ONE && $related_records instanceOf Doctrine_Record) {
+                    Doctrine_Lib::getRecordAsXml($related_records, $xml);
+                } else {
+                    Doctrine_Lib::getCollectionAsXml($related_records, $xml);
+                }
+            }
+        }
+        return $xml->asXML();
+    }
+
+
+    /**
+     * getStateAsString
+     * returns a given connection state as string
+     * @param integer $state        connection state
+     */
+    public static function getConnectionStateAsString($state)
+    {
+        switch ($state) {
+        case Doctrine_Transaction::STATE_SLEEP:
+            return "open";
+            break;
+        case Doctrine_Transaction::STATE_BUSY:
+            return "busy";
+            break;
+        case Doctrine_Transaction::STATE_ACTIVE:
+            return "active";
+            break;
+        }
+    }
+    /**
+     * returns a string representation of Doctrine_Connection object
+     * @param Doctrine_Connection $connection
+     * @return string
+     */
+    public static function getConnectionAsString(Doctrine_Connection $connection)
+    {
+        $r[] = '<pre>';
+        $r[] = 'Doctrine_Connection object';
+        $r[] = 'State               : ' . Doctrine_Lib::getConnectionStateAsString($connection->transaction->getState());
+        $r[] = 'Open Transactions   : ' . $connection->transaction->getTransactionLevel();
+        $r[] = 'Table in memory     : ' . $connection->count();
+        $r[] = 'Driver name         : ' . $connection->getAttribute(Doctrine::ATTR_DRIVER_NAME);
+
+        $r[] = "</pre>";
+        return implode("\n",$r)."<br>";
+    }
+    /**
+     * returns a string representation of Doctrine_Table object
+     * @param Doctrine_Table $table
+     * @return string
+     */
+    public static function getTableAsString(Doctrine_Table $table)
+    {
+        $r[] = "<pre>";
+        $r[] = "Component   : ".$table->getComponentName();
+        $r[] = "Table       : ".$table->getTableName();
+        $r[] = "</pre>";
+        return implode("\n",$r)."<br>";
+    }
+    /**
+     * @return string
+     */
+    public static function formatSql($sql)
+    {
+        $e = explode("\n",$sql);
+        $color = "367FAC";
+        $l = $sql;
+        $l = str_replace("SELECT ", "<font color='$color'><b>SELECT </b></font><br \>  ",$l);
+        $l = str_replace("FROM ", "<font color='$color'><b>FROM </b></font><br \>",$l);
+        $l = str_replace(" LEFT JOIN ", "<br \><font color='$color'><b> LEFT JOIN </b></font>",$l);
+        $l = str_replace(" INNER JOIN ", "<br \><font color='$color'><b> INNER JOIN </b></font>",$l);
+        $l = str_replace(" WHERE ", "<br \><font color='$color'><b> WHERE </b></font>",$l);
+        $l = str_replace(" GROUP BY ", "<br \><font color='$color'><b> GROUP BY </b></font>",$l);
+        $l = str_replace(" HAVING ", "<br \><font color='$color'><b> HAVING </b></font>",$l);
+        $l = str_replace(" AS ", "<font color='$color'><b> AS </b></font><br \>  ",$l);
+        $l = str_replace(" ON ", "<font color='$color'><b> ON </b></font>",$l);
+        $l = str_replace(" ORDER BY ", "<font color='$color'><b> ORDER BY </b></font><br \>",$l);
+        $l = str_replace(" LIMIT ", "<font color='$color'><b> LIMIT </b></font><br \>",$l);
+        $l = str_replace(" OFFSET ", "<font color='$color'><b> OFFSET </b></font><br \>",$l);
+        $l = str_replace("  ", "<dd>",$l);
+
+        return $l;
+    }
+    /**
+     * returns a string representation of Doctrine_Collection object
+     * @param Doctrine_Collection $collection
+     * @return string
+     */
+    public static function getCollectionAsString(Doctrine_Collection $collection)
+    {
+        $r[] = "<pre>";
+        $r[] = get_class($collection);
+        $r[] = 'data : ' . Doctrine::dump($collection->getData(), false);
+        //$r[] = 'snapshot : ' . Doctrine::dump($collection->getSnapshot());
+
+        $r[] = "</pre>";
+        return implode("\n",$r);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab6f608baa3fd47494a1b4a5ba449a0f381d83aa
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Exception.php
@@ -0,0 +1,16 @@
+<?PHP
+/**
+ * Locking exception class
+ *
+ * A loking exception represents an error that occured during a locking process
+ * (obtain/release locks).
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Locking_Exception extends Doctrine_Exception
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Manager/Pessimistic.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Manager/Pessimistic.php
new file mode 100644
index 0000000000000000000000000000000000000000..5531efe9d095df3d5215441e11c3e4e0159ca3ee
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Locking/Manager/Pessimistic.php
@@ -0,0 +1,290 @@
+<?php
+/*
+ *  $Id: Pessimistic.php 1468 2007-05-24 16:54:42Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Offline locking of records comes in handy where you need to make sure that
+ * a time-consuming task on a record or many records, which is spread over several
+ * page requests can't be interfered by other users.
+ *
+ * @link        www.phpdoctrine.com
+ * @author      Roman Borschel <roman@code-factory.org>
+ * @author      Pierre Minnieur <pm@pierre-minnieur.de>
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @version     $Revision: 1468 $
+ */
+class Doctrine_Locking_Manager_Pessimistic
+{
+    /**
+     * The conn that is used by the locking manager
+     *
+     * @var Doctrine_Connection object
+     */
+    private $conn;
+    /**
+     * The database table name for the lock tracking
+     */
+    private $_lockTable = 'doctrine_lock_tracking';
+
+    /**
+     * Constructs a new locking manager object
+     *
+     * When the CREATE_TABLES attribute of the connection on which the manager
+     * is supposed to work on is set to true, the locking table is created.
+     *
+     * @param Doctrine_Connection $conn The database connection to use
+     */
+    public function __construct(Doctrine_Connection $conn)
+    {
+        $this->conn = $conn;
+
+        if ($this->conn->getAttribute(Doctrine::ATTR_EXPORT) & Doctrine::EXPORT_TABLES) {
+            $columns = array();
+            $columns['object_type']        = array('type'    => 'string',
+                                                   'length'  => 50,
+                                                   'notnull' => true,
+                                                   'primary' => true);
+
+            $columns['object_key']         = array('type'    => 'string',
+                                                   'length'  => 250,
+                                                   'notnull' => true,
+                                                   'primary' => true);
+
+            $columns['user_ident']         = array('type'    => 'string',
+                                                   'length'  => 50,
+                                                   'notnull' => true);
+
+            $columns['timestamp_obtained'] = array('type'    => 'integer',
+                                                   'length'  => 10,
+                                                   'notnull' => true);
+
+            $options = array('primary' => array('object_type', 'object_key'));
+            try {
+                $this->conn->export->createTable($this->_lockTable, $columns, $options);
+            } catch(Exception $e) {
+
+            }
+        }
+    }
+
+    /**
+     * Obtains a lock on a {@link Doctrine_Record}
+     *
+     * @param  Doctrine_Record $record     The record that has to be locked
+     * @param  mixed           $userIdent  A unique identifier of the locking user
+     * @return boolean  TRUE if the locking was successful, FALSE if another user
+     *                  holds a lock on this record
+     * @throws Doctrine_Locking_Exception  If the locking failed due to database errors
+     */
+    public function getLock(Doctrine_Record $record, $userIdent)
+    {
+        $objectType = $record->getTable()->getComponentName();
+        $key        = $record->obtainIdentifier();
+
+        $gotLock = false;
+        $time = time();
+
+        if (is_array($key)) {
+            // Composite key
+            $key = implode('|', $key);
+        }
+
+        try {
+            $dbh = $this->conn->getDbh();
+            $dbh->beginTransaction();
+
+            $stmt = $dbh->prepare('INSERT INTO ' . $this->_lockTable
+                                  . ' (object_type, object_key, user_ident, timestamp_obtained)'
+                                  . ' VALUES (:object_type, :object_key, :user_ident, :ts_obtained)');
+
+            $stmt->bindParam(':object_type', $objectType);
+            $stmt->bindParam(':object_key', $key);
+            $stmt->bindParam(':user_ident', $userIdent);
+            $stmt->bindParam(':ts_obtained', $time);
+
+            try {
+                $stmt->execute();
+                $gotLock = true;
+
+            // we catch an Exception here instead of PDOException since we might also be catching Doctrine_Exception
+            } catch(Exception $pkviolation) {
+                // PK violation occured => existing lock!
+            }
+
+            if ( ! $gotLock) {
+                $lockingUserIdent = $this->_getLockingUserIdent($objectType, $key);
+                if ($lockingUserIdent !== null && $lockingUserIdent == $userIdent) {
+                    $gotLock = true; // The requesting user already has a lock
+                    // Update timestamp
+                    $stmt = $dbh->prepare('UPDATE ' . $this->_lockTable 
+                                          . ' SET timestamp_obtained = :ts'
+                                          . ' WHERE object_type = :object_type AND'
+                                          . ' object_key  = :object_key  AND'
+                                          . ' user_ident  = :user_ident');
+                    $stmt->bindParam(':ts', $time);
+                    $stmt->bindParam(':object_type', $objectType);
+                    $stmt->bindParam(':object_key', $key);
+                    $stmt->bindParam(':user_ident', $lockingUserIdent);
+                    $stmt->execute();
+                }
+            }
+            $dbh->commit();
+        } catch (Exception $pdoe) {
+            $dbh->rollback();
+            throw new Doctrine_Locking_Exception($pdoe->getMessage());
+        }
+
+        return $gotLock;
+    }
+
+    /**
+     * Releases a lock on a {@link Doctrine_Record}
+     *
+     * @param  Doctrine_Record $record    The record for which the lock has to be released
+     * @param  mixed           $userIdent The unique identifier of the locking user
+     * @return boolean  TRUE if a lock was released, FALSE if no lock was released
+     * @throws Doctrine_Locking_Exception If the release procedure failed due to database errors
+     */
+    public function releaseLock(Doctrine_Record $record, $userIdent)
+    {
+        $objectType = $record->getTable()->getComponentName();
+        $key        = $record->obtainIdentifier();
+
+        if (is_array($key)) {
+            // Composite key
+            $key = implode('|', $key);
+        }
+
+        try {
+            $dbh = $this->conn->getDbh();
+            $stmt = $dbh->prepare("DELETE FROM $this->_lockTable WHERE
+                                        object_type = :object_type AND
+                                        object_key  = :object_key  AND
+                                        user_ident  = :user_ident");
+            $stmt->bindParam(':object_type', $objectType);
+            $stmt->bindParam(':object_key', $key);
+            $stmt->bindParam(':user_ident', $userIdent);
+            $stmt->execute();
+
+            $count = $stmt->rowCount();
+
+            return ($count > 0);
+        } catch (PDOException $pdoe) {
+            throw new Doctrine_Locking_Exception($pdoe->getMessage());
+        }
+    }
+
+    /**
+     * Gets the unique user identifier of a lock
+     *
+     * @param  string $objectType  The type of the object (component name)
+     * @param  mixed  $key         The unique key of the object
+     * @return mixed  The unique user identifier for the specified lock
+     * @throws Doctrine_Locking_Exception If the query failed due to database errors
+     */
+    private function _getLockingUserIdent($objectType, $key)
+    {
+        if (is_array($key)) {
+            // Composite key
+            $key = implode('|', $key);
+        }
+
+        try {
+            $dbh = $this->conn->getDbh();
+            $stmt = $dbh->prepare('SELECT user_ident FROM ' . $this->_lockTable
+                                  . ' WHERE object_type = :object_type AND object_key = :object_key');
+            $stmt->bindParam(':object_type', $objectType);
+            $stmt->bindParam(':object_key', $key);
+            $success = $stmt->execute();
+
+            if (!$success) {
+                throw new Doctrine_Locking_Exception("Failed to determine locking user");
+            }
+
+            $userIdent = $stmt->fetchColumn();
+        } catch (PDOException $pdoe) {
+            throw new Doctrine_Locking_Exception($pdoe->getMessage());
+        }
+
+        return $userIdent;
+    }
+
+    /**
+     * Gets the identifier that identifies the owner of the lock on the given
+     * record.
+     *
+     * @param Doctrine_Record $lockedRecord  The record.
+     * @return mixed The unique user identifier that identifies the owner of the lock.
+     */
+    public function getLockOwner($lockedRecord)
+    {
+        $objectType = $lockedRecord->getTable()->getComponentName();
+        $key        = $lockedRecord->obtainIdentifier();
+        return $this->_getLockingUserIdent($objectType, $key);
+    }
+
+    /**
+     * Releases locks older than a defined amount of seconds
+     *
+     * When called without parameters all locks older than 15 minutes are released.
+     *
+     * @param  integer $age  The maximum valid age of locks in seconds
+     * @param  string  $objectType  The type of the object (component name)
+     * @param  mixed   $userIdent The unique identifier of the locking user
+     * @return integer The number of locks that have been released
+     * @throws Doctrine_Locking_Exception If the release process failed due to database errors
+     */
+    public function releaseAgedLocks($age = 900, $objectType = null, $userIdent = null)
+    {
+        $age = time() - $age;
+
+        try {
+            $dbh = $this->conn->getDbh();
+            $stmt = $dbh->prepare('DELETE FROM ' . $this->_lockTable . ' WHERE timestamp_obtained < :age');
+            $stmt->bindParam(':age', $age);
+            $query = 'DELETE FROM ' . $this->_lockTable . ' WHERE timestamp_obtained < :age';
+            if ($objectType) {
+                $query .= ' AND object_type = :object_type';
+            }
+            if ($userIdent) {
+                $query .= ' AND user_ident = :user_ident';
+            }
+            $stmt = $dbh->prepare($query);
+            $stmt->bindParam(':age', $age);
+            if ($objectType) {
+                $stmt->bindParam(':object_type', $objectType);
+            }
+            if ($userIdent) {
+                $stmt->bindParam(':user_ident', $userIdent);
+            }
+            $stmt->execute();
+
+            $count = $stmt->rowCount();
+
+            return $count;
+        } catch (PDOException $pdoe) {
+            throw new Doctrine_Locking_Exception($pdoe->getMessage());
+        }
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fbac5272fe25a5f3d3ba0224bd595f5b581058d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager.php
@@ -0,0 +1,554 @@
+<?php
+/*
+ *  $Id: Manager.php 2044 2007-07-23 18:32:29Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ *
+ * Doctrine_Manager is the base component of all doctrine based projects.
+ * It opens and keeps track of all connections (database connections).
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2044 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Manager extends Doctrine_Configurable implements Countable, IteratorAggregate
+{
+    /**
+     * @var array $connections      an array containing all the opened connections
+     */
+    protected $_connections   = array();
+    /**
+     * @var array $bound            an array containing all components that have a bound connection
+     */
+    protected $_bound         = array();
+    /**
+     * @var integer $index          the incremented index
+     */
+    protected $_index         = 0;
+    /**
+     * @var integer $currIndex      the current connection index
+     */
+    protected $_currIndex     = 0;
+    /**
+     * @var string $root            root directory
+     */
+    protected $_root;
+    /**
+     * @var array $_integrityActions    an array containing all registered integrity actions
+     *                                  used when emulating these actions
+     */
+    protected $_integrityActions = array();
+    
+    protected static $driverMap = array('oci' => 'oracle');
+    /**
+     * constructor
+     *
+     * this is private constructor (use getInstance to get an instance of this class)
+     */
+    private function __construct()
+    {
+        $this->_root = dirname(__FILE__);
+
+        Doctrine_Object::initNullObject(new Doctrine_Null);
+    }
+    public function addDeleteAction($componentName, $foreignComponent, $action)
+    {
+        $this->_integrityActions[$componentName]['onDelete'][$foreignComponent] = $action;
+    }
+    public function addUpdateAction($componentName, $foreignComponent, $action)
+    {
+        $this->_integrityActions[$componentName]['onUpdate'][$foreignComponent] = $action;
+    }
+    public function getDeleteActions($componentName)
+    {
+        if ( ! isset($this->_integrityActions[$componentName]['onDelete'])) {
+            return null;
+        }
+        
+        return $this->_integrityActions[$componentName]['onDelete'];
+    }
+    public function getUpdateActions($componentName)
+    {
+        if ( ! isset($this->_integrityActions[$componentName]['onUpdate'])) {
+            return null;
+        }
+        
+        return $this->_integrityActions[$componentName]['onUpdate'];
+    }
+    /**
+     * setDefaultAttributes
+     * sets default attributes
+     *
+     * @return boolean
+     */
+    public function setDefaultAttributes()
+    {
+        static $init = false;
+        if ( ! $init) {
+            $init = true;
+            $attributes = array(
+                        Doctrine::ATTR_CACHE            => null,
+                        Doctrine::ATTR_LOAD_REFERENCES  => true,
+                        Doctrine::ATTR_LISTENER         => new Doctrine_EventListener(),
+                        Doctrine::ATTR_RECORD_LISTENER  => new Doctrine_Record_Listener(),
+                        Doctrine::ATTR_THROW_EXCEPTIONS => true,
+                        Doctrine::ATTR_LOCKMODE         => 1,
+                        Doctrine::ATTR_VLD              => false,
+                        Doctrine::ATTR_AUTO_LENGTH_VLD  => true,
+                        Doctrine::ATTR_AUTO_TYPE_VLD    => true,
+                        Doctrine::ATTR_QUERY_LIMIT      => Doctrine::LIMIT_RECORDS,
+                        Doctrine::ATTR_IDXNAME_FORMAT   => "%s_idx",
+                        Doctrine::ATTR_SEQNAME_FORMAT   => "%s_seq",
+                        Doctrine::ATTR_QUOTE_IDENTIFIER => false,
+                        Doctrine::ATTR_SEQCOL_NAME      => 'id',
+                        Doctrine::ATTR_PORTABILITY      => Doctrine::PORTABILITY_ALL,
+                        Doctrine::ATTR_EXPORT           => Doctrine::EXPORT_ALL,
+                        Doctrine::ATTR_DECIMAL_PLACES   => 2,
+                        );
+            foreach ($attributes as $attribute => $value) {
+                $old = $this->getAttribute($attribute);
+                if ($old === null) {
+                    $this->setAttribute($attribute,$value);
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+    /**
+     * returns the root directory of Doctrine
+     *
+     * @return string
+     */
+    final public function getRoot()
+    {
+        return $this->_root;
+    }
+    /**
+     * getInstance
+     * returns an instance of this class
+     * (this class uses the singleton pattern)
+     *
+     * @return Doctrine_Manager
+     */
+    public static function getInstance()
+    {
+        static $instance;
+        if ( ! isset($instance)) {
+            $instance = new self();
+        }
+        return $instance;
+    }
+    /**
+     * connection
+     *
+     * if the adapter parameter is set this method acts as
+     * a short cut for Doctrine_Manager::getInstance()->openConnection($adapter, $name);
+     *
+     * if the adapter paramater is not set this method acts as
+     * a short cut for Doctrine_Manager::getInstance()->getCurrentConnection()
+     *
+     * @param PDO|Doctrine_Adapter_Interface $adapter   database driver
+     * @param string $name                              name of the connection, if empty numeric key is used
+     * @throws Doctrine_Manager_Exception               if trying to bind a connection with an existing name
+     * @return Doctrine_Connection
+     */
+    public static function connection($adapter = null, $name = null)
+    {
+        if ($adapter == null) {
+            return Doctrine_Manager::getInstance()->getCurrentConnection();
+        } else {
+            return Doctrine_Manager::getInstance()->openConnection($adapter, $name);
+        }
+    }
+    /**
+     * openConnection
+     * opens a new connection and saves it to Doctrine_Manager->connections
+     *
+     * @param PDO|Doctrine_Adapter_Interface $adapter   database driver
+     * @param string $name                              name of the connection, if empty numeric key is used
+     * @throws Doctrine_Manager_Exception               if trying to bind a connection with an existing name
+     * @throws Doctrine_Manager_Exception               if trying to open connection for unknown driver
+     * @return Doctrine_Connection
+     */
+    public function openConnection($adapter, $name = null, $setCurrent = true)
+    {
+    	if (is_object($adapter)) {
+            if ( ! ($adapter instanceof PDO) && ! in_array('Doctrine_Adapter_Interface', class_implements($adapter))) {
+                throw new Doctrine_Manager_Exception("First argument should be an instance of PDO or implement Doctrine_Adapter_Interface");
+            }
+
+            $driverName = $adapter->getAttribute(Doctrine::ATTR_DRIVER_NAME);
+        } elseif (is_array($adapter)) {
+            if ( ! isset($adapter[0])) {
+                throw new Doctrine_Manager_Exception('Empty data source name given.');
+            }
+            $e = explode(':', $adapter[0]);
+
+            if($e[0] == 'uri') {
+                $e[0] = 'odbc';
+            }
+
+            $parts['dsn']    = $adapter[0];
+            $parts['scheme'] = $e[0];
+            $parts['user']   = (isset($adapter[1])) ? $adapter[1] : null;
+            $parts['pass']   = (isset($adapter[2])) ? $adapter[2] : null;
+            
+            $driverName = $e[0];
+            $adapter = $parts;
+        } else {
+            $parts = $this->parseDsn($adapter);
+            
+            $driverName = $parts['scheme'];
+            
+            $adapter = $parts;
+        }
+
+        // initialize the default attributes
+        $this->setDefaultAttributes();
+
+        if ($name !== null) {
+            $name = (string) $name;
+            if (isset($this->_connections[$name])) {
+                return $this->_connections[$name];
+            }
+        } else {
+            $name = $this->_index;
+            $this->_index++;
+        }
+
+        $drivers = array('mysql'    => 'Doctrine_Connection_Mysql',
+                         'sqlite'   => 'Doctrine_Connection_Sqlite',
+                         'pgsql'    => 'Doctrine_Connection_Pgsql',
+                         'oci'      => 'Doctrine_Connection_Oracle',
+                         'oci8'     => 'Doctrine_Connection_Oracle',
+                         'oracle'   => 'Doctrine_Connection_Oracle',
+                         'mssql'    => 'Doctrine_Connection_Mssql',
+                         'dblib'    => 'Doctrine_Connection_Mssql',
+                         'firebird' => 'Doctrine_Connection_Firebird',
+                         'informix' => 'Doctrine_Connection_Informix',
+                         'mock'     => 'Doctrine_Connection_Mock');
+        if ( ! isset($drivers[$driverName])) {
+            throw new Doctrine_Manager_Exception('Unknown driver ' . $driverName);
+        }
+        $className = $drivers[$driverName];
+        $conn = new $className($this, $adapter);
+
+        $this->_connections[$name] = $conn;
+
+        if ($setCurrent) {
+            $this->_currIndex = $name;
+        }
+        return $this->_connections[$name];
+    }
+    /**
+     * parseDsn
+     *
+     * @param string $dsn
+     * @return array Parsed contents of DSN
+     */
+    public function parseDsn($dsn)
+    {
+        // silence any warnings
+        $parts = @parse_url($dsn);
+
+        $names = array('dsn', 'scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment');
+
+        foreach ($names as $name) {
+            if ( ! isset($parts[$name])) {
+                $parts[$name] = null;
+            }
+        }
+
+        if (count($parts) == 0 || ! isset($parts['scheme'])) {
+            throw new Doctrine_Manager_Exception('Empty data source name');
+        }
+
+        switch ($parts['scheme']) {
+            case 'sqlite':
+            case 'sqlite2':
+            case 'sqlite3':
+                if (isset($parts['host']) && $parts['host'] == ':memory') {
+                    $parts['database'] = ':memory:';
+                    $parts['dsn']      = 'sqlite::memory:';
+                }
+
+                break;
+            case 'mysql':
+            case 'informix':
+            case 'oci8':
+            case 'oci':
+            case 'mssql':
+            case 'firebird':
+            case 'dblib':
+            case 'pgsql':
+            case 'odbc':
+            case 'mock':
+            case 'oracle':
+                if ( ! isset($parts['path']) || $parts['path'] == '/') {
+                    throw new Doctrine_Manager_Exception('No database available in data source name');
+                }
+                if (isset($parts['path'])) {
+                    $parts['database'] = substr($parts['path'], 1);
+                }
+                if ( ! isset($parts['host'])) {
+                    throw new Doctrine_Manager_Exception('No hostname set in data source name');
+                }
+                
+                if (isset(self::$driverMap[$parts['scheme']])) {
+                    $parts['scheme'] = self::$driverMap[$parts['scheme']];
+                }
+
+                $parts['dsn'] = $parts['scheme'] . ':host='
+                              . $parts['host'] . ';dbname='
+                              . $parts['database'];
+                
+                if (isset($parts['port'])) {
+                    // append port to dsn if supplied
+                    $parts['dsn'] .= ';port=' . $parts['port'];
+                }
+                break;
+            default:
+                throw new Doctrine_Manager_Exception('Unknown driver '.$parts['scheme']);
+        }
+
+
+        return $parts;
+    }
+    /**
+     * getConnection
+     * @param integer $index
+     * @return object Doctrine_Connection
+     * @throws Doctrine_Manager_Exception   if trying to get a non-existent connection
+     */
+    public function getConnection($name)
+    {
+        if ( ! isset($this->_connections[$name])) {
+            throw new Doctrine_Manager_Exception('Unknown connection: ' . $name);
+        }
+
+        return $this->_connections[$name];
+    }
+    /**
+     * getComponentAlias
+     * retrieves the alias for given component name
+     * if the alias couldn't be found, this method returns the given
+     * component name
+     *
+     * @param string $componentName
+     * @return string                   the component alias
+     */
+    public function getComponentAlias($componentName)
+    {
+        if (isset($this->componentAliases[$componentName])) {
+            return $this->componentAliases[$componentName];
+        }
+
+        return $componentName;
+    }
+    /**
+     * sets an alias for given component name
+     * very useful when building a large framework with a possibility
+     * to override any given class
+     *
+     * @param string $componentName         the name of the component
+     * @param string $alias
+     * @return Doctrine_Manager
+     */
+    public function setComponentAlias($componentName, $alias)
+    {
+        $this->componentAliases[$componentName] = $alias;
+
+        return $this;
+    }
+    /**
+     * getConnectionName
+     *
+     * @param Doctrine_Connection $conn     connection object to be searched for
+     * @return string                       the name of the connection
+     */
+    public function getConnectionName(Doctrine_Connection $conn)
+    {
+        return array_search($conn, $this->_connections, true);
+    }
+    /**
+     * bindComponent
+     * binds given component to given connection
+     * this means that when ever the given component uses a connection
+     * it will be using the bound connection instead of the current connection
+     *
+     * @param string $componentName
+     * @param string $connectionName
+     * @return boolean
+     */
+    public function bindComponent($componentName, $connectionName)
+    {
+        $this->_bound[$componentName] = $connectionName;
+    }
+    /**
+     * getConnectionForComponent
+     *
+     * @param string $componentName
+     * @return Doctrine_Connection
+     */
+    public function getConnectionForComponent($componentName = null)
+    {
+        if (isset($this->_bound[$componentName])) {
+            return $this->getConnection($this->_bound[$componentName]);
+        }
+        return $this->getCurrentConnection();
+    }
+    /**
+     * getTable
+     * this is the same as Doctrine_Connection::getTable() except
+     * that it works seamlessly in multi-server/connection environment
+     *
+     * @see Doctrine_Connection::getTable()
+     * @param string $componentName
+     * @return Doctrine_Table
+     */
+    public function getTable($componentName)
+    {
+        return $this->getConnectionForComponent($componentName)->getTable($componentName);
+    }
+    /**
+     * table
+     * this is the same as Doctrine_Connection::getTable() except
+     * that it works seamlessly in multi-server/connection environment
+     *
+     * @see Doctrine_Connection::getTable()
+     * @param string $componentName
+     * @return Doctrine_Table
+     */
+    public static function table($componentName)
+    {
+        return Doctrine_Manager::getInstance()
+               ->getConnectionForComponent($componentName)
+               ->getTable($componentName);
+    }
+    /**
+     * closes the connection
+     *
+     * @param Doctrine_Connection $connection
+     * @return void
+     */
+    public function closeConnection(Doctrine_Connection $connection)
+    {
+        $connection->close();
+
+        $key = array_search($connection, $this->_connections, true);
+
+        if ($key !== false) {
+            unset($this->_connections[$key]);
+        }
+        $this->_currIndex = key($this->_connections);
+
+        unset($connection);
+    }
+    /**
+     * getConnections
+     * returns all opened connections
+     *
+     * @return array
+     */
+    public function getConnections()
+    {
+        return $this->_connections;
+    }
+    /**
+     * setCurrentConnection
+     * sets the current connection to $key
+     *
+     * @param mixed $key                        the connection key
+     * @throws InvalidKeyException
+     * @return void
+     */
+    public function setCurrentConnection($key)
+    {
+        $key = (string) $key;
+        if ( ! isset($this->_connections[$key])) {
+            throw new InvalidKeyException();
+        }
+        $this->_currIndex = $key;
+    }
+    /**
+     * contains
+     * whether or not the manager contains specified connection
+     *
+     * @param mixed $key                        the connection key
+     * @return boolean
+     */
+    public function contains($key)
+    {
+        return isset($this->_connections[$key]);
+    }
+    /**
+     * count
+     * returns the number of opened connections
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        return count($this->_connections);
+    }
+    /**
+     * getIterator
+     * returns an ArrayIterator that iterates through all connections
+     *
+     * @return ArrayIterator
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->_connections);
+    }
+    /**
+     * getCurrentConnection
+     * returns the current connection
+     *
+     * @throws Doctrine_Connection_Exception       if there are no open connections
+     * @return Doctrine_Connection
+     */
+    public function getCurrentConnection()
+    {
+        $i = $this->_currIndex;
+        if ( ! isset($this->_connections[$i])) {
+            throw new Doctrine_Connection_Exception();
+        }
+        return $this->_connections[$i];
+    }
+    /**
+     * __toString
+     * returns a string representation of this object
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        $r[] = "<pre>";
+        $r[] = "Doctrine_Manager";
+        $r[] = "Connections : ".count($this->_connections);
+        $r[] = "</pre>";
+        return implode("\n",$r);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..882dcdb5c4af2bb730cddb535f5231b1fb87942c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Manager/Exception.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Manager_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Manager_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node.php
new file mode 100644
index 0000000000000000000000000000000000000000..711743847a1ccab709d6add2e9823d2403796dc0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node.php
@@ -0,0 +1,165 @@
+<?php
+/*
+ *  $Id: Node.php 1949 2007-07-08 12:57:52Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1949 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node implements IteratorAggregate
+{
+    /**
+     * @param object    $record   reference to associated Doctrine_Record instance
+     */
+    protected $record;
+
+    /**
+     * @param array     $options
+     */
+    protected $options;
+
+    /**
+     * @param string     $iteratorType  (Pre | Post | Level)
+     */
+    protected $iteratorType;
+
+    /**
+     * @param array     $iteratorOptions
+     */
+    protected $iteratorOptions;
+    
+    /**
+     * The tree to which the node belongs.
+     *
+     * @var unknown_type
+     */
+    protected $_tree;
+
+    /**
+     * contructor, creates node with reference to record and any options
+     *
+     * @param object $record                    instance of Doctrine_Record
+     * @param array $options                    options
+     */
+    public function __construct(Doctrine_Record $record, $options)
+    {
+        $this->record = $record;
+        $this->options = $options;
+        $this->_tree = $this->record->getTable()->getTree();
+    }
+
+    /**
+     * factory method to return node instance based upon chosen implementation
+     *
+     * @param object $record                    instance of Doctrine_Record
+     * @param string $impName                   implementation (NestedSet, AdjacencyList, MaterializedPath)
+     * @param array $options                    options
+     * @return object $options                  instance of Doctrine_Node
+     */
+    public static function factory(Doctrine_Record $record, $implName, $options = array())
+    {
+        $class = 'Doctrine_Node_' . $implName;
+
+        if (!class_exists($class)) {
+            throw new Doctrine_Node_Exception("The class $class must exist and extend Doctrine_Node");
+        }
+
+        return new $class($record, $options);
+    }
+
+    /**
+     * setter for record attribute
+     *
+     * @param object $record                    instance of Doctrine_Record
+     */
+    public function setRecord(Doctrine_Record $record)
+    {
+        $this->record = $record;
+    }
+
+    /**
+     * getter for record attribute
+     *
+     * @return object                           instance of Doctrine_Record
+     */
+    public function getRecord()
+    {
+        return $this->record;
+    }
+
+    /**
+     * convenience function for getIterator
+     *
+     * @param string $type                      type of iterator (Pre | Post | Level)
+     * @param array $options                    options
+     */
+    public function traverse($type = 'Pre', $options = array())
+    {
+        return $this->getIterator($type, $options);
+    }
+
+    /**
+     * get iterator
+     *
+     * @param string $type                      type of iterator (Pre | Post | Level)
+     * @param array $options                    options
+     */
+    public function getIterator($type = null, $options = null)
+    {
+        if ($type === null) {
+            $type = (isset($this->iteratorType) ? $this->iteratorType : 'Pre');
+        }
+
+        if ($options === null) {
+            $options = (isset($this->iteratorOptions) ? $this->iteratorOptions : array());
+        }
+
+        $implName = $this->record->getTable()->getOption('treeImpl');
+        $iteratorClass = 'Doctrine_Node_' . $implName . '_' . ucfirst(strtolower($type)) . 'OrderIterator';
+
+        return new $iteratorClass($this->record, $options);
+    }
+
+    /**
+     * sets node's iterator type
+     *
+     * @param int
+     */
+    public function setIteratorType($type)
+    {
+        $this->iteratorType = $type;
+    }
+
+    /**
+     * sets node's iterator options
+     *
+     * @param int
+     */
+    public function setIteratorOptions($options)
+    {
+        $this->iteratorOptions = $options;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b123005219aec0887e247c1d1b9e61ba76d184c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: AdjacencyList.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_AdjacencyList
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Node_AdjacencyList extends Doctrine_Node implements Doctrine_Node_Interface
+{}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/LevelOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/LevelOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6235108212c8a4ec18c07fd0430e68587395b37
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/LevelOrderIterator.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: LevelOrderIterator.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_AdjacencyList_LevelOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Node_AdjacencyList_LevelOrderIterator implements Iterator
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PostOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PostOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..440aaf6116ec70da18e7834c4dee4d1f69bad93b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PostOrderIterator.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: PostOrderIterator.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_AdjacencyList_PostOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Node_AdjacencyList_PostOrderIterator implements Iterator
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PreOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PreOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6331581c5829ff5ec573dee70591365bde7e6f2
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/AdjacencyList/PreOrderIterator.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: PreOrderIterator.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_AdjacencyList_PreOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Node_AdjacencyList_PreOrderIterator implements Iterator
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ed5727c97998dbad7a11640592c345f0d3ac74a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Exception.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_Exception extends Doctrine_Exception
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..12d7c8b5c4275e53b50d8c3b869d147e3f4d595b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/Interface.php
@@ -0,0 +1,267 @@
+<?php
+/*
+ *  $Id: Interface.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_Interface
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+interface Doctrine_Node_Interface {
+
+    /**
+     * test if node has previous sibling
+     *
+     * @return bool
+     */
+    public function hasPrevSibling();
+
+    /**
+     * test if node has next sibling
+     *
+     * @return bool
+     */
+    public function hasNextSibling();
+
+    /**
+     * test if node has children
+     *
+     * @return bool
+     */
+    public function hasChildren();
+
+    /**
+     * test if node has parent
+     *
+     * @return bool
+     */
+    public function hasParent();
+
+    /**
+     * gets record of prev sibling or empty record
+     *
+     * @return object Doctrine_Record
+     */
+    public function getPrevSibling();
+
+    /**
+     * gets record of next sibling or empty record
+     *
+     * @return object Doctrine_Record
+     */
+    public function getNextSibling();
+
+    /**
+     * gets siblings for node
+     *
+     * @return array                            array of sibling Doctrine_Record objects
+     */
+    public function getSiblings($includeNode = false);
+
+    /**
+     * gets record of first child or empty record
+     *
+     * @return object Doctrine_Record
+     */
+    public function getFirstChild();
+
+    /**
+     * gets record of last child or empty record
+     *
+     * @return object Doctrine_Record
+     */
+    public function getLastChild();
+
+    /**
+     * gets children for node (direct descendants only)
+     *
+     * @return array                            array of sibling Doctrine_Record objects
+     */
+    public function getChildren();
+
+    /**
+     * gets descendants for node (direct descendants only)
+     *
+     * @return iterator                         iterator to traverse descendants from node
+     */
+    public function getDescendants();
+
+    /**
+     * gets record of parent or empty record
+     *
+     * @return object Doctrine_Record
+     */
+    public function getParent();
+
+    /**
+     * gets ancestors for node
+     *
+     * @return object Doctrine_Collection
+     */
+    public function getAncestors();
+
+    /**
+     * gets path to node from root, uses record::toString() method to get node names
+     *
+     * @param string $seperator                 path seperator
+     * @param bool $includeNode                 whether or not to include node at end of path
+     * @return string                           string representation of path
+     */
+    public function getPath($seperator = ' > ', $includeNode = false);
+
+    /**
+     * gets level (depth) of node in the tree
+     *
+     * @return int
+     */
+    public function getLevel();
+
+    /**
+     * gets number of children (direct descendants)
+     *
+     * @return int
+     */
+    public function getNumberChildren();
+
+    /**
+     * gets number of descendants (children and their children)
+     *
+     * @return int
+     */
+    public function getNumberDescendants();
+
+    /**
+     * inserts node as parent of dest record
+     *
+     * @return bool
+     */
+    public function insertAsParentOf(Doctrine_Record $dest);
+
+    /**
+     * inserts node as previous sibling of dest record
+     *
+     * @return bool
+     */
+    public function insertAsPrevSiblingOf(Doctrine_Record $dest);
+
+    /**
+     * inserts node as next sibling of dest record
+     *
+     * @return bool
+     */
+    public function insertAsNextSiblingOf(Doctrine_Record $dest);
+
+    /**
+     * inserts node as first child of dest record
+     *
+     * @return bool
+     */
+    public function insertAsFirstChildOf(Doctrine_Record $dest);
+
+    /**
+     * inserts node as first child of dest record
+     *
+     * @return bool
+     */
+    public function insertAsLastChildOf(Doctrine_Record $dest);
+
+    /**
+     * moves node as prev sibling of dest record
+     *
+     */  
+    public function moveAsPrevSiblingOf(Doctrine_Record $dest);
+
+    /**
+     * moves node as next sibling of dest record
+     *
+     */
+    public function moveAsNextSiblingOf(Doctrine_Record $dest);
+
+    /**
+     * moves node as first child of dest record
+     *
+     */
+    public function moveAsFirstChildOf(Doctrine_Record $dest);
+
+    /**
+     * moves node as last child of dest record
+     *
+     */
+    public function moveAsLastChildOf(Doctrine_Record $dest);
+
+    /**
+     * adds node as last child of record
+     *
+     */
+    public function addChild(Doctrine_Record $record);
+
+    /**
+     * determines if node is leaf
+     *
+     * @return bool
+     */
+    public function isLeaf();
+
+    /**
+     * determines if node is root
+     *
+     * @return bool
+     */
+    public function isRoot();
+
+    /**
+     * determines if node is equal to subject node
+     *
+     * @return bool
+     */
+    public function isEqualTo(Doctrine_Record $subj);
+
+    /**
+     * determines if node is child of subject node
+     *
+     * @return bool
+     */
+    public function isDescendantOf(Doctrine_Record $subj);
+
+    /**
+     * determines if node is child of or sibling to subject node
+     *
+     * @return bool
+     */
+    public function isDescendantOfOrEqualTo(Doctrine_Record $subj);
+
+    /**
+     * determines if node is valid
+     *
+     * @return bool
+     */
+    public function isValidNode();
+
+    /**
+     * deletes node and it's descendants
+     *
+     */
+    public function delete();
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath.php
new file mode 100644
index 0000000000000000000000000000000000000000..04a65b5d88bbb7014517b096dbc37da1a9d503a9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: MaterializedPath.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_MaterializedPath
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Node_MaterializedPath extends Doctrine_Node implements Doctrine_Node_Interface
+{}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/LevelOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/LevelOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c5f9899f46921e0858da62bbb74316ed20f1ccd
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/LevelOrderIterator.php
@@ -0,0 +1,67 @@
+<?php
+/*
+ *  $Id: LevelOrderIterator.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_MaterializedPath_LevelOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_MaterializedPath_LevelOrderIterator implements Iterator
+{
+    private $topNode = null;
+
+    private $curNode = null;
+
+    public function __construct($node, $opts)
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function rewind()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function valid()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function current()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function key()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function next()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PostOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PostOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..a1ee7e0f30bf075f1150863e1145059fc40cbc65
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PostOrderIterator.php
@@ -0,0 +1,67 @@
+<?php
+/*
+ *  $Id: PostOrderIterator.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_MaterializedPath_PostOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_MaterializedPath_PostOrderIterator implements Iterator
+{
+    private $topNode = null;
+
+    private $curNode = null;
+
+    public function __construct($node, $opts)
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function rewind()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function valid()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function current()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function key()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function next()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PreOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PreOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..75d44af1a30166354a4c13a6286671a084b7ce8b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/MaterializedPath/PreOrderIterator.php
@@ -0,0 +1,67 @@
+<?php
+/*
+ *  $Id: PreOrderIterator.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_MaterializedPath_PreOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_MaterializedPath_PreOrderIterator implements Iterator
+{
+    private $topNode = null;
+
+    private $curNode = null;
+
+    public function __construct($node, $opts)
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function rewind()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function valid()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function current()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function key()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+
+    public function next()
+    {
+        throw new Doctrine_Exception('Not yet implemented');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb533c75c27b17e558456deaf5a01902d5d2df65
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet.php
@@ -0,0 +1,993 @@
+<?php
+/*
+ *    $Id: NestedSet.php 2263 2007-08-20 07:45:29Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_NestedSet
+ *
+ * @package    Doctrine
+ * @license    http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category   Object Relational Mapping
+ * @link       www.phpdoctrine.com
+ * @since      1.0
+ * @version    $Revision: 2263 $
+ * @author     Joe Simms <joe.simms@websites4.com>
+ * @author     Roman Borschel <roman@code-factory.org>     
+ */
+class Doctrine_Node_NestedSet extends Doctrine_Node implements Doctrine_Node_Interface
+{
+    /**
+     * test if node has previous sibling
+     *
+     * @return bool            
+     */
+    public function hasPrevSibling()
+    {
+        return $this->isValidNode($this->getPrevSibling());        
+    }
+
+    /**
+     * test if node has next sibling
+     *
+     * @return bool            
+     */ 
+    public function hasNextSibling()
+    {
+        return $this->isValidNode($this->getNextSibling());        
+    }
+
+    /**
+     * test if node has children
+     *
+     * @return bool            
+     */
+    public function hasChildren()
+    {
+        return (($this->getRightValue() - $this->getLeftValue() ) >1 );        
+    }
+
+    /**
+     * test if node has parent
+     *
+     * @return bool            
+     */
+    public function hasParent()
+    {
+        return !$this->isRoot();
+    }
+
+    /**
+     * gets record of prev sibling or empty record
+     *
+     * @return object     Doctrine_Record            
+     */
+    public function getPrevSibling()
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q = $q->addWhere("$baseAlias.rgt = ?", $this->getLeftValue() - 1);
+        $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+
+        if (count($result) <= 0) {
+            return false;
+        }
+        
+        if ($result instanceof Doctrine_Collection) {
+            $sibling = $result->getFirst();
+        } else if (is_array($result)) {
+            $sibling = array_shift($result);
+        }
+        
+        return $sibling;
+    }
+
+    /**
+     * gets record of next sibling or empty record
+     *
+     * @return object     Doctrine_Record            
+     */
+    public function getNextSibling()
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q = $q->addWhere("$baseAlias.lft = ?", $this->getRightValue() + 1);
+        $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+
+        if (count($result) <= 0) {
+            return false;
+        }
+        
+        if ($result instanceof Doctrine_Collection) {
+            $sibling = $result->getFirst();
+        } else if (is_array($result)) {
+            $sibling = array_shift($result);
+        }
+        
+        return $sibling;
+    }
+
+    /**
+     * gets siblings for node
+     *
+     * @return array     array of sibling Doctrine_Record objects            
+     */
+    public function getSiblings($includeNode = false)
+    {
+        $parent = $this->getParent();
+        $siblings = array();
+        if ($parent->exists()) {
+            foreach ($parent->getNode()->getChildren() as $child) {
+                if ($this->isEqualTo($child) && !$includeNode) {
+                    continue;
+                }
+                $siblings[] = $child;
+            }        
+        }
+        return $siblings;
+    }
+
+    /**
+     * gets record of first child or empty record
+     *
+     * @return object     Doctrine_Record            
+     */
+    public function getFirstChild()
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q->addWhere("$baseAlias.lft = ?", $this->getLeftValue() + 1);
+        $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+
+        if (count($result) <= 0) {
+            return false;
+        }
+        
+        if ($result instanceof Doctrine_Collection) {
+            $child = $result->getFirst();
+        } else if (is_array($result)) {
+            $child = array_shift($result);
+        }
+        
+        return $child;       
+    }
+
+    /**
+     * gets record of last child or empty record
+     *
+     * @return object     Doctrine_Record            
+     */
+    public function getLastChild()
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q->addWhere("$baseAlias.rgt = ?", $this->getRightValue() - 1);
+        $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+
+        if (count($result) <= 0) {
+            return false;
+        }
+        
+        if ($result instanceof Doctrine_Collection) {
+            $child = $result->getFirst();
+        } else if (is_array($result)) {
+            $child = array_shift($result);
+        }
+        
+        return $child;      
+    }
+
+    /**
+     * gets children for node (direct descendants only)
+     *
+     * @return mixed The children of the node or FALSE if the node has no children.               
+     */
+    public function getChildren()
+    { 
+        return $this->getDescendants(1);
+    }
+
+    /**
+     * gets descendants for node (direct descendants only)
+     *
+     * @return mixed  The descendants of the node or FALSE if the node has no descendants.
+     * @todo Currently all descendants are fetched, no matter the depth. Maybe there is a better
+     *       solution with less overhead.      
+     */
+    public function getDescendants($depth = null, $includeNode = false)
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $params = array($this->record->get('lft'), $this->record->get('rgt'));
+        
+        if ($includeNode) {
+            $q->addWhere("$baseAlias.lft >= ? AND $baseAlias.rgt <= ?", $params)->addOrderBy("$baseAlias.lft asc");
+        } else {
+            $q->addWhere("$baseAlias.lft > ? AND $baseAlias.rgt < ?", $params)->addOrderBy("$baseAlias.lft asc");
+        }
+        
+        if ($depth !== null) {
+            $q->addWhere("$baseAlias.level <= ?", $this->record['level'] + $depth);
+        }
+        
+        $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+
+        if (count($result) <= 0) {
+            return false;
+        }
+
+        return $result;
+    }
+
+    /**
+     * gets record of parent or empty record
+     *
+     * @return object     Doctrine_Record            
+     */
+    public function getParent()
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q->addWhere("$baseAlias.lft < ? AND $baseAlias.rgt > ?", array($this->getLeftValue(), $this->getRightValue()))
+                ->addOrderBy("$baseAlias.rgt asc");
+        $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $result = $q->execute();
+        
+        if (count($result) <= 0) {
+            return false;
+        }
+               
+        if ($result instanceof Doctrine_Collection) {
+            $parent = $result->getFirst();
+        } else if (is_array($result)) {
+            $parent = array_shift($result);
+        }
+        
+        return $parent;
+    }
+
+    /**
+     * gets ancestors for node
+     *
+     * @param integer $deth  The depth 'upstairs'.
+     * @return mixed  The ancestors of the node or FALSE if the node has no ancestors (this 
+     *                basically means it's a root node).                
+     */
+    public function getAncestors($depth = null)
+    {
+        $baseAlias = $this->_tree->getBaseAlias();
+        $q = $this->_tree->getBaseQuery();
+        $q->addWhere("$baseAlias.lft < ? AND $baseAlias.rgt > ?", array($this->getLeftValue(), $this->getRightValue()))
+                ->addOrderBy("$baseAlias.lft asc");
+        if ($depth !== null) {
+            $q->addWhere("$baseAlias.level >= ?", $this->record['level'] - $depth);
+        }
+        $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+        $ancestors = $q->execute();
+        if (count($ancestors) <= 0) {
+            return false;
+        }
+        return $ancestors;
+    }
+
+    /**
+     * gets path to node from root, uses record::toString() method to get node names
+     *
+     * @param string     $seperator     path seperator
+     * @param bool     $includeNode     whether or not to include node at end of path
+     * @return string     string representation of path                
+     */     
+    public function getPath($seperator = ' > ', $includeRecord = false)
+    {
+        $path = array();
+        $ancestors = $this->getAncestors();
+        foreach ($ancestors as $ancestor) {
+            $path[] = $ancestor->__toString();
+        }
+        if ($includeRecord) {
+            $path[] = $this->getRecord()->__toString();
+        }
+            
+        return implode($seperator, $path);
+    }
+
+    /**
+     * gets number of children (direct descendants)
+     *
+     * @return int            
+     */     
+    public function getNumberChildren()
+    {
+        return count($this->getChildren());
+    }
+
+    /**
+     * gets number of descendants (children and their children)
+     *
+     * @return int            
+     */
+    public function getNumberDescendants()
+    {
+        return ($this->getRightValue() - $this->getLeftValue() - 1) / 2;
+    }
+
+    /**
+     * inserts node as parent of dest record
+     *
+     * @return bool
+     * @todo Wrap in transaction          
+     */
+    public function insertAsParentOf(Doctrine_Record $dest)
+    {
+        // cannot insert a node that has already has a place within the tree
+        if ($this->isValidNode()) {
+            return false;
+        }
+        // cannot insert as parent of root
+        if ($dest->getNode()->isRoot()) {
+            return false;
+        }
+        $newRoot = $dest->getNode()->getRootValue();
+        $this->shiftRLValues($dest->getNode()->getLeftValue(), 1, $newRoot);
+        $this->shiftRLValues($dest->getNode()->getRightValue() + 2, 1, $newRoot);
+        
+        $newLeft = $dest->getNode()->getLeftValue();
+        $newRight = $dest->getNode()->getRightValue() + 2;
+
+        $this->record['level'] = $dest['level'] - 1;
+        $this->insertNode($newLeft, $newRight, $newRoot);
+        
+        return true;
+    }
+
+    /**
+     * inserts node as previous sibling of dest record
+     *
+     * @return bool
+     * @todo Wrap in transaction       
+     */
+    public function insertAsPrevSiblingOf(Doctrine_Record $dest)
+    {
+        // cannot insert a node that has already has a place within the tree
+        if ($this->isValidNode())
+            return false;
+
+        $newLeft = $dest->getNode()->getLeftValue();
+        $newRight = $dest->getNode()->getLeftValue() + 1;
+        $newRoot = $dest->getNode()->getRootValue();
+        
+        $this->shiftRLValues($newLeft, 2, $newRoot);
+        $this->record['level'] = $dest['level'];
+        $this->insertNode($newLeft, $newRight, $newRoot);
+        // update destination left/right values to prevent a refresh
+        // $dest->getNode()->setLeftValue($dest->getNode()->getLeftValue() + 2);
+        // $dest->getNode()->setRightValue($dest->getNode()->getRightValue() + 2);
+                        
+        return true;
+    }
+
+    /**
+     * inserts node as next sibling of dest record
+     *
+     * @return bool
+     * @todo Wrap in transaction           
+     */    
+    public function insertAsNextSiblingOf(Doctrine_Record $dest)
+    {
+        // cannot insert a node that has already has a place within the tree
+        if ($this->isValidNode())
+            return false;
+
+        $newLeft = $dest->getNode()->getRightValue() + 1;
+        $newRight = $dest->getNode()->getRightValue() + 2;
+        $newRoot = $dest->getNode()->getRootValue();
+
+        $this->shiftRLValues($newLeft, 2, $newRoot);
+        $this->record['level'] = $dest['level'];
+        $this->insertNode($newLeft, $newRight, $newRoot);
+
+        // update destination left/right values to prevent a refresh
+        // no need, node not affected
+
+        return true;
+    }
+
+    /**
+     * inserts node as first child of dest record
+     *
+     * @return bool
+     * @todo Wrap in transaction         
+     */
+    public function insertAsFirstChildOf(Doctrine_Record $dest)
+    {
+        // cannot insert a node that has already has a place within the tree
+        if ($this->isValidNode())
+            return false;
+
+        $newLeft = $dest->getNode()->getLeftValue() + 1;
+        $newRight = $dest->getNode()->getLeftValue() + 2;
+        $newRoot = $dest->getNode()->getRootValue();
+
+        $this->shiftRLValues($newLeft, 2, $newRoot);
+        $this->record['level'] = $dest['level'] + 1;
+        $this->insertNode($newLeft, $newRight, $newRoot);
+        
+        // update destination left/right values to prevent a refresh
+        // $dest->getNode()->setRightValue($dest->getNode()->getRightValue() + 2);
+
+        return true;
+    }
+
+    /**
+     * inserts node as last child of dest record
+     *
+     * @return bool
+     * @todo Wrap in transaction            
+     */
+    public function insertAsLastChildOf(Doctrine_Record $dest)
+    {
+        // cannot insert a node that has already has a place within the tree
+        if ($this->isValidNode())
+            return false;
+
+        $newLeft = $dest->getNode()->getRightValue();
+        $newRight = $dest->getNode()->getRightValue() + 1;
+        $newRoot = $dest->getNode()->getRootValue();
+
+        $this->shiftRLValues($newLeft, 2, $newRoot);
+        $this->record['level'] = $dest['level'] + 1;
+        $this->insertNode($newLeft, $newRight, $newRoot);
+
+        // update destination left/right values to prevent a refresh
+        // $dest->getNode()->setRightValue($dest->getNode()->getRightValue() + 2);
+        
+        return true;
+    }
+    
+    /**
+     * Accomplishes moving of nodes between different trees.
+     * Used by the move* methods if the root values of the two nodes are different.
+     *
+     * @param Doctrine_Record $dest
+     * @param unknown_type $newLeftValue
+     * @param unknown_type $moveType
+     * @todo Better exception handling/wrapping
+     */
+    private function _moveBetweenTrees(Doctrine_Record $dest, $newLeftValue, $moveType)
+    {
+        $conn = $this->record->getTable()->getConnection();
+            
+            try {
+                $conn->beginTransaction();
+                
+                // Move between trees: Detach from old tree & insert into new tree
+                $newRoot = $dest->getNode()->getRootValue();
+                $oldRoot = $this->getRootValue();
+                $oldLft = $this->getLeftValue();
+                $oldRgt = $this->getRightValue();
+                $oldLevel = $this->record['level'];
+                
+                // Prepare target tree for insertion, make room
+                $this->shiftRlValues($newLeftValue, $oldRgt - $oldLft - 1, $newRoot);
+                
+                // Set new root id for this node
+                $this->setRootValue($newRoot);
+                $this->record->save();
+                
+                // Close gap in old tree
+                $first = $oldRgt + 1;
+                $delta = $oldLft - $oldRgt - 1;
+                $this->shiftRLValues($first, $delta, $oldRoot);
+                
+                // Insert this node as a new node
+                $this->setRightValue(0);
+                $this->setLeftValue(0);
+                
+                switch ($moveType) {
+                    case 'moveAsPrevSiblingOf':
+                        $this->insertAsPrevSiblingOf($dest);
+                    break;
+                    case 'moveAsFirstChildOf':
+                        $this->insertAsFirstChildOf($dest);
+                    break;
+                    case 'moveAsNextSiblingOf':
+                        $this->insertAsNextSiblingOf($dest);
+                    break;
+                    case 'moveAsLastChildOf':
+                        $this->insertAsLastChildOf($dest);
+                    break;
+                    default:
+                        throw new Exception("Unknown move operation: $moveType.");
+                }
+                
+                $diff = $oldRgt - $oldLft;
+                $this->setRightValue($this->getLeftValue() + ($oldRgt - $oldLft));
+                $this->record->save();
+                
+                $newLevel = $this->record['level'];
+                $levelDiff = $newLevel - $oldLevel;
+                
+                // Relocate descendants of the node
+                $diff = $this->getLeftValue() - $oldLft;
+                $componentName = $this->_tree->getBaseComponent();
+                $rootColName = $this->record->getTable()->getTree()->getAttribute('rootColumnName');
+
+                // Update lft/rgt/root/level for all descendants
+                $q = new Doctrine_Query($conn);
+                $q = $q->update($componentName)
+                        ->set($componentName . '.lft', 'lft + ?', $diff)
+                        ->set($componentName . '.rgt', 'rgt + ?', $diff)
+                        ->set($componentName . '.level', 'level + ?', $levelDiff)
+                        ->set($componentName . '.' . $rootColName, '?', $newRoot)
+                        ->where($componentName . '.lft > ? AND ' . $componentName . '.rgt < ?',
+                        array($oldLft, $oldRgt));
+                $q = $this->_tree->returnQueryWithRootId($q, $oldRoot);
+                $q->execute();
+                
+                $conn->commit();
+            } catch (Exception $e) {
+                $conn->rollback();
+                throw $e;
+            }
+    }
+    
+    /**
+     * moves node as prev sibling of dest record
+     * 
+     */     
+    public function moveAsPrevSiblingOf(Doctrine_Record $dest)
+    {
+        if ($dest->getNode()->getRootValue() != $this->getRootValue()) {
+            // Move between trees
+            $this->_moveBetweenTrees($dest, $dest->getNode()->getLeftValue(), __FUNCTION__);
+        } else {
+            // Move within the tree
+            $oldLevel = $this->record['level'];
+            $this->record['level'] = $dest['level'];
+            $this->updateNode($dest->getNode()->getLeftValue(), $this->record['level'] - $oldLevel);
+        }
+    }
+
+    /**
+     * moves node as next sibling of dest record
+     *        
+     */
+    public function moveAsNextSiblingOf(Doctrine_Record $dest)
+    {
+        if ($dest->getNode()->getRootValue() != $this->getRootValue()) {
+            // Move between trees
+            $this->_moveBetweenTrees($dest, $dest->getNode()->getRightValue() + 1, __FUNCTION__);
+        } else {
+            // Move within tree
+            $oldLevel = $this->record['level'];
+            $this->record['level'] = $dest['level'];
+            $this->updateNode($dest->getNode()->getRightValue() + 1, $this->record['level'] - $oldLevel);
+        }
+    }
+
+    /**
+     * moves node as first child of dest record
+     *            
+     */
+    public function moveAsFirstChildOf(Doctrine_Record $dest)
+    {
+        if ($dest->getNode()->getRootValue() != $this->getRootValue()) {
+            // Move between trees
+            $this->_moveBetweenTrees($dest, $dest->getNode()->getLeftValue() + 1, __FUNCTION__);
+        } else {
+            // Move within tree
+            $oldLevel = $this->record['level'];
+            $this->record['level'] = $dest['level'] + 1;
+            $this->updateNode($dest->getNode()->getLeftValue() + 1, $this->record['level'] - $oldLevel);
+        }
+    }
+
+    /**
+     * moves node as last child of dest record
+     *        
+     */
+    public function moveAsLastChildOf(Doctrine_Record $dest)
+    {
+        if ($dest->getNode()->getRootValue() != $this->getRootValue()) {
+            // Move between trees
+            $this->_moveBetweenTrees($dest, $dest->getNode()->getRightValue(), __FUNCTION__);
+        } else {
+            // Move within tree
+            $oldLevel = $this->record['level'];
+            $this->record['level'] = $dest['level'] + 1;
+            $this->updateNode($dest->getNode()->getRightValue(), $this->record['level'] - $oldLevel);
+        }
+    }
+    
+    /**
+     * Makes this node a root node. Only used in multiple-root trees.
+     *
+     * @todo Exception handling/wrapping
+     */
+    public function makeRoot($newRootId)
+    {
+        // TODO: throw exception instead?
+        if ($this->getLeftValue() == 1 || !$this->record->getTable()->getTree()->getAttribute('hasManyRoots')) {
+            return false;
+        }
+        
+        $oldRgt = $this->getRightValue();
+        $oldLft = $this->getLeftValue();
+        $oldRoot = $this->getRootValue();
+        $oldLevel = $this->record['level'];
+        
+        try {
+            $conn = $this->record->getTable()->getConnection();
+            $conn->beginTransaction();
+            
+            // Detach from old tree (close gap in old tree)
+            $first = $oldRgt + 1;
+            $delta = $oldLft - $oldRgt - 1;
+            $this->shiftRLValues($first, $delta, $this->getRootValue());
+            
+            // Set new lft/rgt/root/level values for root node
+            $this->setLeftValue(1);
+            $this->setRightValue($oldRgt - $oldLft + 1);
+            $this->setRootValue($newRootId);
+            $this->record['level'] = 0;
+            
+            // Update descendants lft/rgt/root/level values
+            $diff = 1 - $oldLft;
+            $newRoot = $newRootId;
+            $componentName = $this->_tree->getBaseComponent();
+            $rootColName = $this->record->getTable()->getTree()->getAttribute('rootColumnName');
+            $q = new Doctrine_Query($conn);
+            $q = $q->update($componentName)
+                    ->set($componentName . '.lft', 'lft + ?', $diff)
+                    ->set($componentName . '.rgt', 'rgt + ?', $diff)
+                    ->set($componentName . '.level', 'level - ?', $oldLevel)
+                    ->set($componentName . '.' . $rootColName, '?', $newRoot)
+                    ->where($componentName . '.lft > ? AND ' . $componentName . '.rgt < ?',
+                    array($oldLft, $oldRgt));
+            $q = $this->_tree->returnQueryWithRootId($q, $oldRoot);
+            $q->execute();
+            
+            $conn->commit();
+            
+        } catch (Exception $e) {
+            $conn->rollback();
+            throw $e;
+        }
+    }
+
+    /**
+     * adds node as last child of record
+     *        
+     */
+    public function addChild(Doctrine_Record $record)
+    {
+        $record->getNode()->insertAsLastChildOf($this->getRecord());
+    }
+
+    /**
+     * determines if node is leaf
+     *
+     * @return bool            
+     */
+    public function isLeaf()
+    {
+        return (($this->getRightValue() - $this->getLeftValue()) == 1);
+    }
+
+    /**
+     * determines if node is root
+     *
+     * @return bool            
+     */
+    public function isRoot()
+    {
+        return ($this->getLeftValue() == 1);
+    }
+
+    /**
+     * determines if node is equal to subject node
+     *
+     * @return bool            
+     */    
+    public function isEqualTo(Doctrine_Record $subj)
+    {
+        return (($this->getLeftValue() == $subj->getNode()->getLeftValue()) &&
+                ($this->getRightValue() == $subj->getNode()->getRightValue()) && 
+                ($this->getRootValue() == $subj->getNode()->getRootValue())
+                );
+    }
+
+    /**
+     * determines if node is child of subject node
+     *
+     * @return bool
+     */
+    public function isDescendantOf(Doctrine_Record $subj)
+    {
+        return (($this->getLeftValue() > $subj->getNode()->getLeftValue()) &&
+                ($this->getRightValue() < $subj->getNode()->getRightValue()) &&
+                ($this->getRootValue() == $subj->getNode()->getRootValue()));
+    }
+
+    /**
+     * determines if node is child of or sibling to subject node
+     *
+     * @return bool            
+     */
+    public function isDescendantOfOrEqualTo(Doctrine_Record $subj)
+    {
+        return (($this->getLeftValue() >= $subj->getNode()->getLeftValue()) &&
+                ($this->getRightValue() <= $subj->getNode()->getRightValue()) &&
+                ($this->getRootValue() == $subj->getNode()->getRootValue()));
+    }
+
+    /**
+     * determines if node is valid
+     *
+     * @return bool            
+     */
+    public function isValidNode($record = null)
+    {
+        if ($record === null) {
+          return ($this->getRightValue() > $this->getLeftValue());
+        } else if( $record instanceof Doctrine_Record ) {
+          return ($record->getNode()->getRightValue() > $record->getNode()->getLeftValue());
+        } else {
+          return false;
+        }
+    }
+
+    /**
+     * deletes node and it's descendants
+     * @todo Delete more efficiently. Wrap in transaction if needed.      
+     */
+    public function delete()
+    {
+        // TODO: add the setting whether or not to delete descendants or relocate children
+        $oldRoot = $this->getRootValue();
+        $q = $this->_tree->getBaseQuery();
+        
+        $baseAlias = $this->_tree->getBaseAlias();
+        $componentName = $this->_tree->getBaseComponent();
+
+        $q = $q->addWhere("$baseAlias.lft >= ? AND $baseAlias.rgt <= ?", array($this->getLeftValue(), $this->getRightValue()));
+
+        $q = $this->record->getTable()->getTree()->returnQueryWithRootId($q, $oldRoot);
+        
+        $coll = $q->execute();
+
+        $coll->delete();
+
+        $first = $this->getRightValue() + 1;
+        $delta = $this->getLeftValue() - $this->getRightValue() - 1;
+        $this->shiftRLValues($first, $delta, $oldRoot);
+        
+        return true; 
+    }
+
+    /**
+     * sets node's left and right values and save's it
+     *
+     * @param int     $destLeft     node left value
+     * @param int        $destRight    node right value
+     */    
+    private function insertNode($destLeft = 0, $destRight = 0, $destRoot = 1)
+    {
+        $this->setLeftValue($destLeft);
+        $this->setRightValue($destRight);
+        $this->setRootValue($destRoot);
+        $this->record->save();    
+    }
+
+    /**
+     * move node's and its children to location $destLeft and updates rest of tree
+     *
+     * @param int     $destLeft    destination left value
+     * @todo Wrap in transaction
+     */
+    private function updateNode($destLeft, $levelDiff)
+    { 
+        $componentName = $this->_tree->getBaseComponent();
+        $left = $this->getLeftValue();
+        $right = $this->getRightValue();
+        $rootId = $this->getRootValue();
+
+        $treeSize = $right - $left + 1;
+
+        // Make room in the new branch
+        $this->shiftRLValues($destLeft, $treeSize, $rootId);
+
+        if ($left >= $destLeft){ // src was shifted too?
+            $left += $treeSize;
+            $right += $treeSize;
+        }
+
+        // update level for descendants
+        $q = new Doctrine_Query();
+        $q = $q->update($componentName)
+                ->set($componentName . '.level', 'level + ?')
+                ->where($componentName . '.lft > ? AND ' . $componentName . '.rgt < ?',
+                        array($levelDiff, $left, $right));
+        $q = $this->_tree->returnQueryWithRootId($q, $rootId);
+        $q->execute();
+        
+        // now there's enough room next to target to move the subtree
+        $this->shiftRLRange($left, $right, $destLeft - $left, $rootId);
+
+        // correct values after source (close gap in old tree)
+        $this->shiftRLValues($right + 1, -$treeSize, $rootId);
+
+        $this->record->save();
+        $this->record->refresh();
+    }
+
+    /**
+     * adds '$delta' to all Left and Right values that are >= '$first'. '$delta' can also be negative.
+     *
+     * @param int $first         First node to be shifted
+     * @param int $delta         Value to be shifted by, can be negative
+     */    
+    private function shiftRlValues($first, $delta, $rootId = 1)
+    {
+        $qLeft  = new Doctrine_Query();
+        $qRight = new Doctrine_Query();
+
+        // shift left columns
+        $componentName = $this->_tree->getBaseComponent();
+        $qLeft = $qLeft->update($componentName)
+                                ->set($componentName . '.lft', 'lft + ?')
+                                ->where($componentName . '.lft >= ?', array($delta, $first));
+        
+        $qLeft = $this->record->getTable()->getTree()->returnQueryWithRootId($qLeft, $rootId);
+        
+        $resultLeft = $qLeft->execute();
+        
+        // shift right columns
+        $resultRight = $qRight->update($componentName)
+                                ->set($componentName . '.rgt', 'rgt + ?')
+                                ->where($componentName . '.rgt >= ?', array($delta, $first));
+
+        $qRight = $this->record->getTable()->getTree()->returnQueryWithRootId($qRight, $rootId);
+
+        $resultRight = $qRight->execute();
+    }
+
+    /**
+     * adds '$delta' to all Left and Right values that are >= '$first' and <= '$last'. 
+     * '$delta' can also be negative.
+     *
+     * @param int $first     First node to be shifted (L value)
+     * @param int $last     Last node to be shifted (L value)
+     * @param int $delta         Value to be shifted by, can be negative
+     */ 
+    private function shiftRlRange($first, $last, $delta, $rootId = 1)
+    {
+        $qLeft  = new Doctrine_Query();
+        $qRight = new Doctrine_Query();
+
+        // shift left column values
+        $componentName = $this->_tree->getBaseComponent();
+        $qLeft = $qLeft->update($componentName)
+                                ->set($componentName . '.lft', 'lft + ?')
+                                ->where($componentName . '.lft >= ? AND ' . $componentName . '.lft <= ?', array($delta, $first, $last));
+        
+        $qLeft = $this->record->getTable()->getTree()->returnQueryWithRootId($qLeft, $rootId);
+
+        $resultLeft = $qLeft->execute();
+        
+        // shift right column values
+        $qRight = $qRight->update($componentName)
+                                ->set($componentName . '.rgt', 'rgt + ?')
+                                ->where($componentName . '.rgt >= ? AND ' . $componentName . '.rgt <= ?', array($delta, $first, $last));
+
+        $qRight = $this->record->getTable()->getTree()->returnQueryWithRootId($qRight, $rootId);
+
+        $resultRight = $qRight->execute();
+    }
+    
+    /**
+     * gets record's left value
+     *
+     * @return int            
+     */     
+    public function getLeftValue()
+    {
+        return $this->record->get('lft');
+    }
+
+    /**
+     * sets record's left value
+     *
+     * @param int            
+     */     
+    public function setLeftValue($lft)
+    {
+        $this->record->set('lft', $lft);        
+    }
+
+    /**
+     * gets record's right value
+     *
+     * @return int            
+     */     
+    public function getRightValue()
+    {
+        return $this->record->get('rgt');        
+    }
+
+    /**
+     * sets record's right value
+     *
+     * @param int            
+     */    
+    public function setRightValue($rgt)
+    {
+        $this->record->set('rgt', $rgt);         
+    }
+
+    /**
+     * gets level (depth) of node in the tree
+     *
+     * @return int            
+     */    
+    public function getLevel()
+    {
+        if (!isset($this->record['level'])) {
+            $baseAlias = $this->_tree->getBaseAlias();
+            $componentName = $this->_tree->getBaseComponent();
+            $q = $this->_tree->getBaseQuery();
+            $q = $q->addWhere("$baseAlias.lft < ? AND $baseAlias.rgt > ?", array($this->getLeftValue(), $this->getRightValue()));
+
+            $q = $this->_tree->returnQueryWithRootId($q, $this->getRootValue());
+            
+            $coll = $q->execute();
+
+            $this->record['level'] = count($coll) ? count($coll) : 0;
+        }
+        return $this->record['level'];
+    }
+
+    /**
+     * get records root id value
+     *            
+     */     
+    public function getRootValue()
+    {
+        if ($this->_tree->getAttribute('hasManyRoots')) {
+            return $this->record->get($this->_tree->getAttribute('rootColumnName'));
+        }
+        return 1;
+    }
+
+    /**
+     * sets records root id value
+     *
+     * @param int            
+     */
+    public function setRootValue($value)
+    {
+        if ($this->_tree->getAttribute('hasManyRoots')) {
+            $this->record->set($this->_tree->getAttribute('rootColumnName'), $value);   
+        }    
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/LevelOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/LevelOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..c824c01891e190e91322997087324faebfa072f5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/LevelOrderIterator.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: LevelOrderIterator.php 1659 2007-06-13 20:22:46Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_NestedSet_LevelOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1659 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_NestedSet_LevelOrderIterator
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PostOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PostOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d2ebf47cbd9d70e7bf209d6a07ad0c7ec4c51e8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PostOrderIterator.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: PostOrderIterator.php 1659 2007-06-13 20:22:46Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_NestedSet_PostOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1659 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_NestedSet_PostOrderIterator
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PreOrderIterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PreOrderIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..994b295607fe051cfaee28d15014bc8d2d4a56bb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Node/NestedSet/PreOrderIterator.php
@@ -0,0 +1,176 @@
+<?php
+/*
+ *  $Id: PreOrderIterator.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Node_NestedSet_PreOrderIterator
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Node_NestedSet_PreOrderIterator implements Iterator
+{
+    /**
+     * @var Doctrine_Collection $collection
+     */
+    protected $collection;
+    /**
+     * @var array $keys
+     */
+    protected $keys;
+    /**
+     * @var mixed $key
+     */
+    protected $key;
+    /**
+     * @var integer $index
+     */
+    protected $index;
+    /**
+     * @var integer $index
+     */
+    protected $prevIndex;
+    /**
+     * @var integer $index
+     */
+    protected $traverseLevel;
+    /**
+     * @var integer $count
+     */
+    protected $count;
+
+    public function __construct($record, $opts)
+    {
+        $componentName = $record->getTable()->getComponentName();
+
+        $q = $record->getTable()->createQuery();
+
+        $params = array($record->get('lft'), $record->get('rgt'));
+        if (isset($opts['include_record']) && $opts['include_record']) {
+            $query = $q->where("$componentName.lft >= ? AND $componentName.rgt <= ?", $params)->orderBy("$componentName.lft asc");
+        } else {
+            $query = $q->where("$componentName.lft > ? AND $componentName.rgt < ?", $params)->orderBy("$componentName.lft asc");
+        }
+        
+        $query = $record->getTable()->getTree()->returnQueryWithRootId($query, $record->getNode()->getRootValue());
+
+        $this->maxLevel   = isset($opts['depth']) ? ($opts['depth'] + $record->getNode()->getLevel()) : 0;
+        $this->options    = $opts;
+        $this->collection = isset($opts['collection']) ? $opts['collection'] : $query->execute();
+        $this->keys       = $this->collection->getKeys();
+        $this->count      = $this->collection->count();
+        $this->index      = -1;
+        $this->level      = $record->getNode()->getLevel();
+        $this->prevLeft   = $record->getNode()->getLeftValue();
+
+        // clear the table identity cache
+        $record->getTable()->clear();
+    }
+
+    /**
+     * rewinds the iterator
+     *
+     * @return void
+     */
+    public function rewind()
+    {
+        $this->index = -1;
+        $this->key = null;
+    }
+
+    /**
+     * returns the current key
+     *
+     * @return integer
+     */
+    public function key()
+    {
+        return $this->key;
+    }
+
+    /**
+     * returns the current record
+     *
+     * @return Doctrine_Record
+     */
+    public function current()
+    {
+        $record = $this->collection->get($this->key);
+        $record->getNode()->setLevel($this->level);
+        return $record;
+    }
+
+    /**
+     * advances the internal pointer
+     *
+     * @return void
+     */
+    public function next()
+    {
+        while ($current = $this->advanceIndex()) {
+            if ($this->maxLevel && ($this->level > $this->maxLevel)) {
+                continue;
+            }
+
+            return $current;
+        }
+
+        return false;
+    }
+
+    /**
+     * @return boolean                          whether or not the iteration will continue
+     */
+    public function valid()
+    {
+        return ($this->index < $this->count);
+    }
+
+    public function count()
+    {
+        return $this->count;
+    }
+
+    private function updateLevel()
+    {
+        if (!(isset($this->options['include_record']) && $this->options['include_record'] && $this->index == 0)) {
+            $left = $this->collection->get($this->key)->getNode()->getLeftValue();
+            $this->level += $this->prevLeft - $left + 2;
+            $this->prevLeft = $left;
+        }
+    }
+
+    private function advanceIndex()
+    {
+        $this->index++;
+        $i = $this->index;
+        if (isset($this->keys[$i])) {
+            $this->key   = $this->keys[$i];
+            $this->updateLevel();
+            return $this->current();
+        }
+
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Null.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Null.php
new file mode 100644
index 0000000000000000000000000000000000000000..44e868ce234adefac9a00a0022a80c926b7bf305
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Null.php
@@ -0,0 +1,45 @@
+<?php
+/*
+ *  $Id: Null.php 2182 2007-08-09 17:27:13Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Null
+ *
+ * Simple empty class representing a null value
+ * used for extra fast null value testing with isset() rather than array_key_exists()
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2182 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+final class Doctrine_Null
+{ 
+    public function exists()
+    {
+        return false;	
+    }
+    public function __toString()
+    {
+    	return '';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Object.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Object.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b62d10d9776210509ce8c40b87d61d922f78d3f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Object.php
@@ -0,0 +1,60 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Object
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Object 
+{
+    /**
+     * @var Doctrine_Null $null     Doctrine_Null object, used for extremely fast null value checking
+     */
+    protected static $_null;
+    /**
+     * initNullObject
+     * initializes the null object
+     *
+     * @param Doctrine_Null $null
+     * @return void
+     */
+    public static function initNullObject(Doctrine_Null $null)
+    {
+        self::$_null = $null;
+    }
+    /**
+     * getNullObject
+     * returns the null object associated with this object
+     *
+     * @return Doctrine_Null
+     */
+    public static function getNullObject()
+    {
+        return self::$_null;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Overloadable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Overloadable.php
new file mode 100644
index 0000000000000000000000000000000000000000..809c7efa667266a4f71b4d80152568ee6769b894
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Overloadable.php
@@ -0,0 +1,44 @@
+<?php
+/*
+ *  $Id: Overloadable.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Overloadable
+ * a very generic overloading interface
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+interface Doctrine_Overloadable {
+    /**
+     * __call
+     * method overloader
+     *
+     * @param string $m     the name of the method
+     * @param array $a      method arguments
+     * @return mixed        anything
+     */
+    public function __call($m, $a);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Plugin.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Plugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..03c71e8628389246748a6a1eb6010e113aa07e99
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Plugin.php
@@ -0,0 +1,79 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Plugin
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Plugin 
+{
+    /**
+     * @var array $_options     an array of plugin specific options
+     */
+    protected $_options = array();
+    /**
+     * returns the value of an option
+     *
+     * @param $option       the name of the option to retrieve
+     * @return mixed        the value of the option
+     */
+    public function getOption($name)
+    {
+        if ( ! isset($this->_options[$name])) {
+            throw new Doctrine_Plugin_Exception('Unknown option ' . $name);
+        }
+        
+        return $this->_options[$name];
+    }
+    /**
+     * sets given value to an option
+     *
+     * @param $option       the name of the option to be changed
+     * @param $value        the value of the option
+     * @return Doctrine_Plugin  this object
+     */
+    public function setOption($name, $value)
+    {
+        if ( ! isset($this->_options[$name])) {
+            throw new Doctrine_Plugin_Exception('Unknown option ' . $name);
+        }
+
+        $this->_options[$name] = $value;
+        
+        return $this;
+    }
+    /**
+     * returns all options and their associated values
+     *
+     * @return array    all options as an associative array
+     */
+    public function getOptions()
+    {
+        return $this->_options;	
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query.php
new file mode 100644
index 0000000000000000000000000000000000000000..09f7872f2ea4caa4795874de3edd22ac660aff32
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query.php
@@ -0,0 +1,1547 @@
+<?php
+/*
+ *  $Id: Query.php 2234 2007-08-14 18:28:35Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Abstract');
+/**
+ * Doctrine_Query
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2234 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query extends Doctrine_Query_Abstract implements Countable
+{
+    const STATE_CLEAN  = 1;
+
+    const STATE_DIRTY  = 2;
+
+    const STATE_DIRECT = 3;
+
+    const STATE_LOCKED = 4;
+
+
+    protected $subqueryAliases   = array();
+    /**
+     * @param boolean $needsSubquery
+     */
+    protected $needsSubquery     = false;
+    /**
+     * @param boolean $isSubquery           whether or not this query object is a subquery of another 
+     *                                      query object
+     */
+    protected $isSubquery;
+    
+    protected $isLimitSubqueryUsed = false;
+    /**
+     * @var array $_neededTableAliases      an array containing the needed table aliases
+     */
+    protected $_neededTables     = array();
+    /**
+     * @var array $pendingFields
+     */
+    protected $pendingFields     = array();
+    /**
+     * @var array $pendingSubqueries        SELECT part subqueries, these are called pending subqueries since
+     *                                      they cannot be parsed directly (some queries might be correlated)
+     */
+    protected $pendingSubqueries = array();
+    /**
+     * @var array $_parsers                 an array of parser objects, each DQL query part has its own parser
+     */
+    protected $_parsers    = array();
+    /**
+     * @var array $_enumParams              an array containing the keys of the parameters that should be enumerated
+     */
+    protected $_enumParams = array();
+
+    /**
+     * @var array $_dqlParts                an array containing all DQL query parts
+     */
+    protected $_dqlParts   = array(
+                            'select'    => array(),
+                            'forUpdate' => false,
+                            'from'      => array(),
+                            'set'       => array(),
+                            'join'      => array(),
+                            'where'     => array(),
+                            'groupby'   => array(),
+                            'having'    => array(),
+                            'orderby'   => array(),
+                            'limit'     => array(),
+                            'offset'    => array(),
+                            );
+    /**
+     * @var array $_pendingJoinConditions    an array containing pending joins
+     */
+    protected $_pendingJoinConditions = array();
+    
+    protected $_expressionMap = array();
+    
+    protected $_state = Doctrine_Query::STATE_CLEAN;
+
+    /**
+     * create
+     * returns a new Doctrine_Query object
+     *
+     * @param Doctrine_Connection $conn     optional connection parameter
+     * @return Doctrine_Query
+     */
+    public static function create($conn = null)
+    {
+        return new Doctrine_Query($conn);
+    }
+    public function reset() 
+    {
+        $this->_pendingJoinConditions = array();
+        $this->pendingSubqueries = array();
+        $this->pendingFields = array();
+        $this->_neededTables = array();
+        $this->_expressionMap = array();
+        $this->subqueryAliases = array();
+        $this->needsSubquery = false;
+        $this->isLimitSubqueryUsed = false;
+    }
+    /**
+     * setOption
+     *
+     * @param string $name      option name
+     * @param string $value     option value
+     * @return Doctrine_Query   this object
+     */
+    public function setOption($name, $value)
+    {
+        if ( ! isset($this->_options[$name])) {
+            throw new Doctrine_Query_Exception('Unknown option ' . $name);
+        }
+        $this->_options[$name] = $value;
+    }
+    /**
+     * addPendingJoinCondition
+     *
+     * @param string $componentAlias    component alias
+     * @param string $joinCondition     dql join condition
+     * @return Doctrine_Query           this object
+     */
+    public function addPendingJoinCondition($componentAlias, $joinCondition)
+    {
+        $this->_pendingJoins[$componentAlias] = $joinCondition;
+    }
+    /** 
+     * addEnumParam
+     * sets input parameter as an enumerated parameter
+     *
+     * @param string $key   the key of the input parameter
+     * @return Doctrine_Query
+     */
+    public function addEnumParam($key, $table = null, $column = null)
+    {
+        $array = (isset($table) || isset($column)) ? array($table, $column) : array();
+
+        if ($key === '?') {
+            $this->_enumParams[] = $array;
+        } else {
+            $this->_enumParams[$key] = $array;
+        }
+    }
+    /**
+     * getEnumParams
+     * get all enumerated parameters
+     *
+     * @return array    all enumerated parameters
+     */
+    public function getEnumParams()
+    {
+        return $this->_enumParams;
+    }
+    /**
+     * limitSubqueryUsed
+     *
+     * @return boolean
+     */
+    public function isLimitSubqueryUsed()
+    {
+        return $this->isLimitSubqueryUsed;
+    }
+    /**
+     * convertEnums
+     * convert enum parameters to their integer equivalents
+     *
+     * @return array    converted parameter array
+     */
+    public function convertEnums($params) 
+    {
+        foreach ($this->_enumParams as $key => $values) {
+            if (isset($params[$key])) {
+                if ( ! empty($values)) {
+                    $params[$key] = $values[0]->enumIndex($values[1], $params[$key]);
+                }
+            }
+        }
+        return $params;
+    }
+    /**
+     * isSubquery
+     * if $bool parameter is set this method sets the value of
+     * Doctrine_Query::$isSubquery. If this value is set to true
+     * the query object will not load the primary key fields of the selected
+     * components.
+     *
+     * If null is given as the first parameter this method retrieves the current
+     * value of Doctrine_Query::$isSubquery.
+     *
+     * @param boolean $bool     whether or not this query acts as a subquery
+     * @return Doctrine_Query|bool
+     */
+    public function isSubquery($bool = null)
+    {
+        if ($bool === null) {
+            return $this->isSubquery;
+        }
+
+        $this->isSubquery = (bool) $bool;
+        return $this;
+    }
+    /**
+     * getAggregateAlias
+     * 
+     * @param string $dqlAlias      the dql alias of an aggregate value
+     * @return string
+     */
+    public function getAggregateAlias($dqlAlias)
+    {
+        if (isset($this->aggregateMap[$dqlAlias])) {
+            // mark the expression as used
+            $this->_expressionMap[$dqlAlias][1] = true;
+
+            return $this->aggregateMap[$dqlAlias];
+        }
+        if ( ! empty($this->pendingAggregates)) {
+            $this->processPendingAggregates();
+            
+            return $this->getAggregateAlias($dqlAlias);
+        }
+        throw new Doctrine_Query_Exception('Unknown aggregate alias ' . $dqlAlias);
+    }
+    /**
+     * getParser
+     * parser lazy-loader
+     *
+     * @throws Doctrine_Query_Exception     if unknown parser name given
+     * @return Doctrine_Query_Part
+     */
+    public function getParser($name)
+    {
+        if ( ! isset($this->_parsers[$name])) {
+            $class = 'Doctrine_Query_' . ucwords(strtolower($name));
+
+            Doctrine::autoload($class);
+            
+            if ( ! class_exists($class)) {
+                throw new Doctrine_Query_Exception('Unknown parser ' . $name);
+            }
+
+            $this->_parsers[$name] = new $class($this);
+        }
+
+        return $this->_parsers[$name];
+    }
+    /**
+     * parseQueryPart
+     * parses given DQL query part
+     *
+     * @param string $queryPartName     the name of the query part
+     * @param string $queryPart         query part to be parsed
+     * @param boolean $append           whether or not to append the query part to its stack
+     *                                  if false is given, this method will overwrite 
+     *                                  the given query part stack with $queryPart
+     * @return Doctrine_Query           this object
+     */
+    public function parseQueryPart($queryPartName, $queryPart, $append = false) 
+    {
+        if ($this->_state === self::STATE_LOCKED) {
+            throw new Doctrine_Query_Exception('This query object is locked. No query parts can be manipulated.');
+        }
+
+        // sanity check
+        if ($queryPart === '' || $queryPart === null) {
+            throw new Doctrine_Query_Exception('Empty ' . $queryPartName . ' part given.');
+        }
+
+        // add query part to the dql part array
+        if ($append) {
+            $this->_dqlParts[$queryPartName][] = $queryPart;
+        } else {
+            $this->_dqlParts[$queryPartName] = array($queryPart);
+        }
+
+        if ($this->_state === self::STATE_DIRECT) {
+            $parser = $this->getParser($queryPartName);
+
+            $sql = $parser->parse($queryPart);
+
+            if (isset($sql)) {
+                if ($append) {
+                    $this->addQueryPart($queryPartName, $sql);
+                } else {
+                    $this->setQueryPart($queryPartName, $sql);
+                }
+            }                                       
+        }
+        
+        $this->_state = Doctrine_Query::STATE_DIRTY;
+
+        return $this;
+    }
+    /**
+     * getDqlPart
+     * returns the given DQL query part 
+     *
+     * @param string $queryPart     the name of the query part
+     * @return string   the DQL query part
+     */
+    public function getDqlPart($queryPart)
+    {
+    	if ( ! isset($this->_dqlParts[$queryPart])) {
+    	   throw new Doctrine_Query_Exception('Unknown query part ' . $queryPart);
+    	}
+
+        return $this->_dqlParts[$queryPart];
+    }
+    /**
+     * getDql
+     * returns the DQL query associated with this object
+     *
+     * the query is built from $_dqlParts
+     *
+     * @return string   the DQL query
+     */
+    public function getDql()
+    {
+        $q = '';
+        $q .= ( ! empty($this->_dqlParts['select']))?  'SELECT '    . implode(', ', $this->_dqlParts['select']) : '';
+        $q .= ( ! empty($this->_dqlParts['from']))?    ' FROM '     . implode(' ', $this->_dqlParts['from']) : '';
+        $q .= ( ! empty($this->_dqlParts['where']))?   ' WHERE '    . implode(' AND ', $this->_dqlParts['where']) : '';
+        $q .= ( ! empty($this->_dqlParts['groupby']))? ' GROUP BY ' . implode(', ', $this->_dqlParts['groupby']) : '';
+        $q .= ( ! empty($this->_dqlParts['having']))?  ' HAVING '   . implode(' AND ', $this->_dqlParts['having']) : '';
+        $q .= ( ! empty($this->_dqlParts['orderby']))? ' ORDER BY ' . implode(', ', $this->_dqlParts['orderby']) : '';
+        $q .= ( ! empty($this->_dqlParts['limit']))?   ' LIMIT '    . implode(' ', $this->_dqlParts['limit']) : '';
+        $q .= ( ! empty($this->_dqlParts['offset']))?  ' OFFSET '   . implode(' ', $this->_dqlParts['offset']) : '';
+        
+        return $q;
+    }
+    /**
+     * processPendingFields
+     * the fields in SELECT clause cannot be parsed until the components
+     * in FROM clause are parsed, hence this method is called everytime a 
+     * specific component is being parsed.
+     *
+     * @throws Doctrine_Query_Exception     if unknown component alias has been given
+     * @param string $componentAlias        the alias of the component
+     * @return void
+     */
+    public function processPendingFields($componentAlias)
+    {
+        $tableAlias = $this->getTableAlias($componentAlias);
+        $table      = $this->_aliasMap[$componentAlias]['table'];
+
+        if (isset($this->pendingFields[$componentAlias])) {
+            $fields = $this->pendingFields[$componentAlias];
+
+            // check for wildcards
+            if (in_array('*', $fields)) {
+                $fields = $table->getColumnNames();
+            } else {
+                // only auto-add the primary key fields if this query object is not 
+                // a subquery of another query object
+                if ( ! $this->isSubquery) {
+                    $fields = array_unique(array_merge($table->getPrimaryKeys(), $fields));
+                }
+            }
+        }
+        foreach ($fields as $name) {
+            $name = $table->getColumnName($name);
+
+            $this->parts['select'][] = $this->_conn->quoteIdentifier($tableAlias . '.' . $name) 
+                                     . ' AS ' 
+                                     . $this->_conn->quoteIdentifier($tableAlias . '__' . $name);
+        }
+        
+        $this->neededTables[] = $tableAlias;
+
+    }
+    /**
+     * parseSelect
+     * parses the query select part and
+     * adds selected fields to pendingFields array
+     *
+     * @param string $dql
+     */
+    public function parseSelect($dql)
+    {
+        $refs = Doctrine_Tokenizer::bracketExplode($dql, ',');
+
+        $pos   = strpos(trim($refs[0]), ' ');
+        $first = substr($refs[0], 0, $pos);
+        
+        if ($first === 'DISTINCT') {
+            $this->parts['distinct'] = true;
+            
+            $refs[0] = substr($refs[0], ++$pos);
+        }
+
+        foreach ($refs as $reference) {
+            $reference = trim($reference);
+            if (strpos($reference, '(') !== false) {
+                if (substr($reference, 0, 1) === '(') {
+                    // subselect found in SELECT part
+                    $this->parseSubselect($reference);
+                } else {
+                    $this->parseAggregateFunction($reference);
+                }
+            } else {
+
+
+                $e = explode('.', $reference);
+                if (count($e) > 2) {
+                    $this->pendingFields[] = $reference;
+                } else {
+                    $this->pendingFields[$e[0]][] = $e[1];
+                }
+            }
+        }
+    }
+    /** 
+     * parseSubselect
+     *
+     * parses the subquery found in DQL SELECT part and adds the
+     * parsed form into $pendingSubqueries stack
+     *
+     * @param string $reference
+     * @return void
+     */
+    public function parseSubselect($reference) 
+    {
+        $e     = Doctrine_Tokenizer::bracketExplode($reference, ' ');
+        $alias = $e[1];
+
+        if (count($e) > 2) {
+            if (strtoupper($e[1]) !== 'AS') {
+                throw new Doctrine_Query_Exception('Syntax error near: ' . $reference);
+            }
+            $alias = $e[2];
+        }
+        
+        $subquery = substr($e[0], 1, -1);
+        
+        $this->pendingSubqueries[] = array($subquery, $alias);
+    }
+    /**
+     * parseClause
+     * parses given DQL clause
+     *
+     * this method handles five tasks:
+     *
+     * 1. Converts all DQL functions to their native SQL equivalents
+     * 2. Converts all component references to their table alias equivalents
+     * 3. Converts all column aliases to actual column names
+     * 4. Quotes all identifiers
+     * 5. Parses nested clauses and subqueries recursively
+     *
+     * @return string   SQL string
+     */
+    public function parseClause($clause) 
+    {
+        $terms = Doctrine_Tokenizer::clauseExplode($clause, array(' ', '+', '-', '*', '/'));
+
+        $str = '';
+        foreach ($terms as $term) {
+            $pos = strpos($term[0], '(');
+
+            if ($pos !== false) {
+                $name = substr($term[0], 0, $pos);
+                if ($name !== '') {
+                    $argStr = substr($term[0], ($pos + 1), -1);
+    
+                    $args   = array();
+                    // parse args
+    
+                    foreach (Doctrine_Tokenizer::sqlExplode($argStr, ',') as $expr) {
+                       $args[] = $this->parseClause($expr);
+                    }
+    
+                    // convert DQL function to its RDBMS specific equivalent
+                    try {
+                        $expr = call_user_func_array(array($this->_conn->expression, $name), $args);
+                    } catch(Doctrine_Expression_Exception $e) {
+                        throw new Doctrine_Query_Exception('Unknown function ' . $func . '.');
+                    }
+                    $term[0] = $expr;
+                } else {
+                    $trimmed = trim(Doctrine_Tokenizer::bracketTrim($term[0]));
+                    
+                    // check for possible subqueries
+                    if (substr($trimmed, 0, 4) == 'FROM' || substr($trimmed, 0, 6) == 'SELECT') {
+                        // parse subquery
+                        $trimmed = $this->createSubquery()->parseQuery($trimmed)->getQuery();
+                    } else {
+                        // parse normal clause
+                        $trimmed = $this->parseClause($trimmed);
+                    }
+
+                    $term[0] = '(' . $trimmed . ')';
+                }
+            } else {
+                if (substr($term[0], 0, 1) !== "'" && substr($term[0], -1) !== "'") {
+                    if (strpos($term[0], '.') !== false) {
+                        if ( ! is_numeric($term[0])) {
+                            $e = explode('.', $term[0]);
+
+                            $field = array_pop($e);
+                            $componentAlias = implode('.', $e);
+            
+                            // check the existence of the component alias
+                            if ( ! isset($this->_aliasMap[$componentAlias])) {
+                                throw new Doctrine_Query_Exception('Unknown component alias ' . $componentAlias);
+                            }
+            
+                            $table = $this->_aliasMap[$componentAlias]['table'];
+
+                            // get the actual field name from alias
+                            $field = $table->getColumnName($field);
+            
+                            // check column existence
+                            if ( ! $table->hasColumn($field)) {
+                                throw new Doctrine_Query_Exception('Unknown column ' . $field);
+                            }
+            
+                            $tableAlias = $this->getTableAlias($componentAlias);
+
+                            // build sql expression
+                            $term[0] = $this->_conn->quoteIdentifier($tableAlias) 
+                                     . '.' 
+                                     . $this->_conn->quoteIdentifier($field);
+                        }
+                    }
+                }
+            }
+
+            $str .= $term[0] . $term[1];
+        }
+        return $str;
+    }
+    /**
+     * parseAggregateFunction
+     * parses an aggregate function and returns the parsed form
+     *
+     * @see Doctrine_Expression
+     * @param string $expr                  DQL aggregate function
+     * @throws Doctrine_Query_Exception     if unknown aggregate function given
+     * @return array                        parsed form of given function
+     */
+    public function parseAggregateFunction($expr, $nestedCall = false)
+    {
+        $e    = Doctrine_Tokenizer::bracketExplode($expr, ' ');
+        $func = $e[0];
+
+        $pos  = strpos($func, '(');
+        if ($pos === false) {
+            return $expr;
+        }
+
+        // get the name of the function
+        $name   = substr($func, 0, $pos);
+        $argStr = substr($func, ($pos + 1), -1);
+
+        $args   = array();
+        // parse args
+        foreach (Doctrine_Tokenizer::bracketExplode($argStr, ',') as $expr) {
+           $args[] = $this->parseAggregateFunction($expr, true);
+        }
+
+        // convert DQL function to its RDBMS specific equivalent
+        try {
+            $expr = call_user_func_array(array($this->_conn->expression, $name), $args);
+        } catch(Doctrine_Expression_Exception $e) {
+            throw new Doctrine_Query_Exception('Unknown function ' . $func . '.');
+        }
+
+        if ( ! $nestedCall) {
+            // try to find all component references
+            preg_match_all("/[a-z0-9_]+\.[a-z0-9_]+[\.[a-z0-9]+]*/i", $argStr, $m);
+
+            if (isset($e[1])) {
+                if (strtoupper($e[1]) === 'AS') {
+                    if ( ! isset($e[2])) {
+                        throw new Doctrine_Query_Exception('Missing aggregate function alias.');
+                    }
+                    $alias = $e[2];
+                } else {
+                    $alias = $e[1];
+                }
+            } else {
+                $alias = substr($expr, 0, strpos($expr, '('));
+            }
+
+            $this->pendingAggregates[] = array($expr, $m[0], $alias);
+        }
+
+        return $expr;
+    }
+    /**
+     * processPendingSubqueries
+     * processes pending subqueries
+     *
+     * subqueries can only be processed when the query is fully constructed
+     * since some subqueries may be correlated
+     *
+     * @return void
+     */
+    public function processPendingSubqueries()
+    {
+        foreach ($this->pendingSubqueries as $value) {
+            list($dql, $alias) = $value;
+
+            $subquery = $this->createSubquery();
+
+            $sql = $subquery->parseQuery($dql, false)->getQuery();
+
+            reset($this->_aliasMap);
+            $componentAlias = key($this->_aliasMap);
+            $tableAlias = $this->getTableAlias($componentAlias);
+
+            $sqlAlias = $tableAlias . '__' . count($this->aggregateMap);
+
+            $this->parts['select'][] = '(' . $sql . ') AS ' . $this->_conn->quoteIdentifier($sqlAlias);
+
+            $this->aggregateMap[$alias] = $sqlAlias;
+            $this->_aliasMap[$componentAlias]['agg'][] = $alias;
+        }
+        $this->pendingSubqueries = array();
+    }
+    /** 
+     * processPendingAggregates
+     * processes pending aggregate values for given component alias
+     *
+     * @return void
+     */
+    public function processPendingAggregates()
+    {
+        // iterate trhough all aggregates
+        foreach ($this->pendingAggregates as $aggregate) {
+            list ($expression, $components, $alias) = $aggregate;
+
+            $tableAliases = array();
+
+            // iterate through the component references within the aggregate function
+            if ( ! empty ($components)) {
+                foreach ($components as $component) {
+                    
+                    if (is_numeric($component)) {
+                        continue;
+                    }
+
+                    $e = explode('.', $component);
+    
+                    $field = array_pop($e);
+                    $componentAlias = implode('.', $e);
+    
+                    // check the existence of the component alias
+                    if ( ! isset($this->_aliasMap[$componentAlias])) {
+                        throw new Doctrine_Query_Exception('Unknown component alias ' . $componentAlias);
+                    }
+    
+                    $table = $this->_aliasMap[$componentAlias]['table'];
+    
+                    $field = $table->getColumnName($field);
+    
+                    // check column existence
+                    if ( ! $table->hasColumn($field)) {
+                        throw new Doctrine_Query_Exception('Unknown column ' . $field);
+                    }
+    
+                    $tableAlias = $this->getTableAlias($componentAlias);
+    
+                    $tableAliases[$tableAlias] = true;
+    
+                    // build sql expression
+                    
+                    $identifier = $this->_conn->quoteIdentifier($tableAlias . '.' . $field);
+                    $expression = str_replace($component, $identifier, $expression);
+                }
+            }
+
+            if (count($tableAliases) !== 1) {
+                $componentAlias = reset($this->tableAliases);
+                $tableAlias = key($this->tableAliases);
+            }
+
+            $index    = count($this->aggregateMap);
+            $sqlAlias = $this->_conn->quoteIdentifier($tableAlias . '__' . $index);
+
+            $this->parts['select'][] = $expression . ' AS ' . $sqlAlias;
+
+            $this->aggregateMap[$alias] = $sqlAlias;
+            $this->_expressionMap[$alias][0] = $expression;
+
+            $this->_aliasMap[$componentAlias]['agg'][$index] = $alias;
+
+            $this->neededTables[] = $tableAlias;
+        }
+        // reset the state
+        $this->pendingAggregates = array();
+    }
+    /**
+     * getQueryBase
+     * returns the base of the generated sql query
+     * On mysql driver special strategy has to be used for DELETE statements
+     *
+     * @return string       the base of the generated sql query
+     */
+    public function getQueryBase()
+    {
+        switch ($this->type) {
+            case self::DELETE:
+                $q = 'DELETE FROM ';
+            break;
+            case self::UPDATE:
+                $q = 'UPDATE ';
+            break;
+            case self::SELECT:
+                $distinct = ($this->parts['distinct']) ? 'DISTINCT ' : '';
+
+                $q = 'SELECT ' . $distinct . implode(', ', $this->parts['select']) . ' FROM ';
+            break;
+        }
+        return $q;
+    }
+    /**
+     * buildFromPart
+     * builds the from part of the query and returns it
+     *
+     * @return string   the query sql from part
+     */
+    public function buildFromPart()
+    {
+        $q = '';
+        foreach ($this->parts['from'] as $k => $part) {
+            if ($k === 0) {
+                $q .= $part;
+                continue;
+            }
+            // preserve LEFT JOINs only if needed
+
+            if (substr($part, 0, 9) === 'LEFT JOIN') {
+                $e = explode(' ', $part);
+
+                $aliases = array_merge($this->subqueryAliases,
+                            array_keys($this->neededTables));
+
+                if( ! in_array($e[3], $aliases) &&
+                    ! in_array($e[2], $aliases) &&
+
+                    ! empty($this->pendingFields)) {
+                    continue;
+                }
+
+            }
+
+            if (isset($this->_pendingJoinConditions[$k])) {
+                $parser = new Doctrine_Query_JoinCondition($this);
+                
+                if (strpos($part, ' ON ') !== false) {
+                    $part .= ' AND ';
+                } else {
+                    $part .= ' ON ';
+                }
+                $part .= $parser->parse($this->_pendingJoinConditions[$k]);
+
+                unset($this->_pendingJoinConditions[$k]);
+            }
+
+            $q .= ' ' . $part;
+
+            $this->parts['from'][$k] = $part;
+        }
+        return $q;
+    }
+    /**
+     * preQuery
+     *
+     * Empty template method to provide Query subclasses with the possibility
+     * to hook into the query building procedure, doing any custom / specialized
+     * query building procedures that are neccessary.
+     *
+     * @return void
+     */
+    public function preQuery()
+    {
+
+    }
+    /**
+     * postQuery
+     *
+     * Empty template method to provide Query subclasses with the possibility
+     * to hook into the query building procedure, doing any custom / specialized
+     * post query procedures (for example logging) that are neccessary.
+     *
+     * @return void
+     */
+    public function postQuery()
+    {
+
+    }
+    /**
+     * builds the sql query from the given parameters and applies things such as
+     * column aggregation inheritance and limit subqueries if needed
+     *
+     * @param array $params             an array of prepared statement params (needed only in mysql driver
+     *                                  when limit subquery algorithm is used)
+     * @return string                   the built sql query
+     */
+    public function getQuery($params = array())
+    {
+        if ($this->_state !== self::STATE_DIRTY) {
+           return $this->_sql;
+        }
+
+        $parts = $this->_dqlParts;
+
+        // reset the state
+        if ( ! $this->isSubquery()) {
+            $this->_aliasMap = array();
+            $this->pendingAggregates = array();
+            $this->aggregateMap = array();
+        }
+        $this->reset();   
+
+        // parse the DQL parts
+        foreach ($this->_dqlParts as $queryPartName => $queryParts) {
+            
+            $this->removeQueryPart($queryPartName);
+
+            if (is_array($queryParts) && ! empty($queryParts)) {
+
+                foreach ($queryParts as $queryPart) {
+                    $parser = $this->getParser($queryPartName);
+                                      
+
+                    $sql = $parser->parse($queryPart);
+
+                    if (isset($sql)) {
+                        if ($queryPartName == 'limit' ||
+                            $queryPartName == 'offset') {
+
+                            $this->setQueryPart($queryPartName, $sql);
+                        } else {
+                            $this->addQueryPart($queryPartName, $sql);
+                        }
+                    }
+                }
+            }
+        }
+        $params = $this->convertEnums($params);
+
+        $this->_state = self::STATE_DIRECT;
+
+        // invoke the preQuery hook
+        $this->preQuery();        
+        $this->_state = self::STATE_CLEAN;
+        
+        $this->_dqlParts = $parts;
+
+        if (empty($this->parts['from'])) {
+            return false;
+        }
+
+        $needsSubQuery = false;
+        $subquery = '';
+        $map   = reset($this->_aliasMap);
+        $table = $map['table'];
+        $rootAlias = key($this->_aliasMap);
+
+        if ( ! empty($this->parts['limit']) && $this->needsSubquery && $table->getAttribute(Doctrine::ATTR_QUERY_LIMIT) == Doctrine::LIMIT_RECORDS) {
+            $this->isLimitSubqueryUsed = true;
+            $needsSubQuery = true;
+        }
+
+        // process all pending SELECT part subqueries
+        $this->processPendingSubqueries();
+        $this->processPendingAggregates();
+
+        // build the basic query
+
+        $q  = $this->getQueryBase();
+        $q .= $this->buildFromPart();
+
+        if ( ! empty($this->parts['set'])) {
+            $q .= ' SET ' . implode(', ', $this->parts['set']);
+        }
+
+
+        $string = $this->applyInheritance();
+        
+        // apply inheritance to WHERE part
+        if ( ! empty($string)) {
+            $this->parts['where'][] = '(' . $string . ')';
+        }
+
+
+        $modifyLimit = true;
+        if ( ! empty($this->parts['limit']) || ! empty($this->parts['offset'])) {
+
+            if ($needsSubQuery) {
+                $subquery = $this->getLimitSubquery();
+
+
+                switch (strtolower($this->_conn->getName())) {
+                    case 'mysql':
+                        // mysql doesn't support LIMIT in subqueries
+                        $list     = $this->_conn->execute($subquery, $params)->fetchAll(Doctrine::FETCH_COLUMN);
+                        $subquery = implode(', ', array_map(array($this->_conn, 'quote'), $list));
+                        break;
+                    case 'pgsql':
+                        // pgsql needs special nested LIMIT subquery
+                        $subquery = 'SELECT doctrine_subquery_alias.' . $table->getIdentifier(). ' FROM (' . $subquery . ') AS doctrine_subquery_alias';
+                        break;
+                }
+
+                $field = $this->getTableAlias($rootAlias) . '.' . $table->getIdentifier();
+
+                // only append the subquery if it actually contains something
+                if ($subquery !== '') {
+                    array_unshift($this->parts['where'], $this->_conn->quoteIdentifier($field) . ' IN (' . $subquery . ')');
+                }
+
+                $modifyLimit = false;
+            }
+        }
+
+        $q .= ( ! empty($this->parts['where']))?   ' WHERE '    . implode(' AND ', $this->parts['where']) : '';
+        $q .= ( ! empty($this->parts['groupby']))? ' GROUP BY ' . implode(', ', $this->parts['groupby'])  : '';
+        $q .= ( ! empty($this->parts['having']))?  ' HAVING '   . implode(' AND ', $this->parts['having']): '';
+        $q .= ( ! empty($this->parts['orderby']))? ' ORDER BY ' . implode(', ', $this->parts['orderby'])  : '';
+
+        if ($modifyLimit) {    
+
+            $q = $this->_conn->modifyLimitQuery($q, $this->parts['limit'], $this->parts['offset']);
+        }
+
+        // return to the previous state
+        if ( ! empty($string)) {
+            array_pop($this->parts['where']);
+        }
+        if ($needsSubQuery) {
+            array_shift($this->parts['where']);
+        }
+        $this->_sql = $q;
+
+        return $q;
+    }
+    /**
+     * getLimitSubquery
+     * this is method is used by the record limit algorithm
+     *
+     * when fetching one-to-many, many-to-many associated data with LIMIT clause
+     * an additional subquery is needed for limiting the number of returned records instead
+     * of limiting the number of sql result set rows
+     *
+     * @return string       the limit subquery
+     */
+    public function getLimitSubquery()
+    {
+        $map    = reset($this->_aliasMap);
+        $table  = $map['table'];
+        $componentAlias = key($this->_aliasMap);
+
+        // get short alias
+        $alias      = $this->getTableAlias($componentAlias);
+        $primaryKey = $alias . '.' . $table->getIdentifier();
+
+        // initialize the base of the subquery
+        $subquery   = 'SELECT DISTINCT ' . $this->_conn->quoteIdentifier($primaryKey);
+
+        $driverName = $this->_conn->getAttribute(Doctrine::ATTR_DRIVER_NAME);
+
+
+        // pgsql needs the order by fields to be preserved in select clause
+        if ($driverName == 'pgsql') {
+            foreach ($this->parts['orderby'] as $part) {
+                $part = trim($part);
+                $e = Doctrine_Tokenizer::bracketExplode($part, ' ');
+                $part = trim($e[0]);
+    
+                if (strpos($part, '.') === false) {
+                    continue;
+                }
+                
+                // don't add functions
+                if (strpos($part, '(') !== false) {
+                    continue;
+                }
+    
+                // don't add primarykey column (its already in the select clause)
+                if ($part !== $primaryKey) {
+                    $subquery .= ', ' . $part;
+                }
+            }
+        }
+
+        if ($driverName == 'mysql' || $driverName == 'pgsql') {
+            foreach ($this->_expressionMap as $dqlAlias => $expr) {
+                if (isset($expr[1])) {
+                    $subquery .= ', ' . $expr[0] . ' AS ' . $this->aggregateMap[$dqlAlias];
+                }
+            }
+        }
+
+
+        $subquery .= ' FROM';
+
+
+        foreach ($this->parts['from'] as $part) {
+            // preserve LEFT JOINs only if needed
+            if (substr($part, 0, 9) === 'LEFT JOIN') {
+                $e = explode(' ', $part);
+                
+                if (empty($this->parts['orderby']) && empty($this->parts['where'])) {
+                    continue;
+                }
+            }
+
+            $subquery .= ' ' . $part;
+        }
+
+        // all conditions must be preserved in subquery
+        $subquery .= ( ! empty($this->parts['where']))?   ' WHERE '    . implode(' AND ', $this->parts['where'])  : '';
+        $subquery .= ( ! empty($this->parts['groupby']))? ' GROUP BY ' . implode(', ', $this->parts['groupby'])   : '';
+        $subquery .= ( ! empty($this->parts['having']))?  ' HAVING '   . implode(' AND ', $this->parts['having']) : '';
+
+        $subquery .= ( ! empty($this->parts['orderby']))? ' ORDER BY ' . implode(', ', $this->parts['orderby'])   : '';
+
+        // add driver specific limit clause
+        $subquery = $this->_conn->modifyLimitQuery($subquery, $this->parts['limit'], $this->parts['offset']);
+
+        $parts = Doctrine_Tokenizer::quoteExplode($subquery, ' ', "'", "'");
+
+        foreach ($parts as $k => $part) {
+            if (strpos($part, ' ') !== false) {
+                continue;
+            }
+            
+            $part = trim($part, "\"'`");
+
+            if ($this->hasTableAlias($part)) {
+                $parts[$k] = $this->_conn->quoteIdentifier($this->generateNewTableAlias($part));
+                continue;
+            }
+
+            if (strpos($part, '.') === false) {
+                continue;
+            }
+            preg_match_all("/[a-zA-Z0-9_]+\.[a-z0-9_]+/i", $part, $m);
+
+            foreach ($m[0] as $match) {
+                $e = explode('.', $match);
+                $e[0] = $this->generateNewTableAlias($e[0]);
+
+                $parts[$k] = str_replace($match, implode('.', $e), $parts[$k]);
+            }
+        }
+        
+        if ($driverName == 'mysql' || $driverName == 'pgsql') {
+            foreach ($parts as $k => $part) {
+                if (strpos($part, "'") !== false) {
+                    continue;
+                }
+                if (strpos($part, '__') == false) {
+                    continue;
+                }
+
+                preg_match_all("/[a-zA-Z0-9_]+\_\_[a-z0-9_]+/i", $part, $m);
+    
+                foreach ($m[0] as $match) {
+                    $e = explode('__', $match);
+                    $e[0] = $this->generateNewTableAlias($e[0]);
+    
+                    $parts[$k] = str_replace($match, implode('__', $e), $parts[$k]);
+                }
+            }
+        }
+
+        $subquery = implode(' ', $parts);
+        return $subquery;
+    }
+    /**
+     * tokenizeQuery
+     * splits the given dql query into an array where keys
+     * represent different query part names and values are
+     * arrays splitted using sqlExplode method
+     *
+     * example:
+     *
+     * parameter:
+     *      $query = "SELECT u.* FROM User u WHERE u.name LIKE ?"
+     * returns:
+     *      array('select' => array('u.*'),
+     *            'from'   => array('User', 'u'),
+     *            'where'  => array('u.name', 'LIKE', '?'))
+     *
+     * @param string $query                 DQL query
+     * @throws Doctrine_Query_Exception     if some generic parsing error occurs
+     * @return array                        an array containing the query string parts
+     */
+    public function tokenizeQuery($query)
+    {
+        $e = Doctrine_Tokenizer::sqlExplode($query, ' ');
+
+        foreach ($e as $k=>$part) {
+            $part = trim($part);
+            switch (strtolower($part)) {
+                case 'delete':
+                case 'update':
+                case 'select':
+                case 'set':
+                case 'from':
+                case 'where':
+                case 'limit':
+                case 'offset':
+                case 'having':
+                    $p = $part;
+                    $parts[$part] = array();
+                break;
+                case 'order':
+                case 'group':
+                    $i = ($k + 1);
+                    if (isset($e[$i]) && strtolower($e[$i]) === 'by') {
+                        $p = $part;
+                        $parts[$part] = array();
+                    } else {
+                        $parts[$p][] = $part;
+                    }
+                break;
+                case 'by':
+                    continue;
+                default:
+                    if ( ! isset($p))
+                        throw new Doctrine_Query_Exception("Couldn't parse query.");
+
+                    $parts[$p][] = $part;
+            }
+        }
+        return $parts;
+    }
+    /**
+     * DQL PARSER
+     * parses a DQL query
+     * first splits the query in parts and then uses individual
+     * parsers for each part
+     *
+     * @param string $query                 DQL query
+     * @param boolean $clear                whether or not to clear the aliases
+     * @throws Doctrine_Query_Exception     if some generic parsing error occurs
+     * @return Doctrine_Query
+     */
+    public function parseQuery($query, $clear = true)
+    {
+        if ($clear) {
+            $this->clear();
+        }
+
+        $query = trim($query);
+        $query = str_replace("\n", ' ', $query);
+        $query = str_replace("\r", ' ', $query);
+
+        $parts = $this->tokenizeQuery($query);
+
+        foreach($parts as $k => $part) {
+            $part = implode(' ', $part);
+            $k = strtolower($k);
+            switch ($k) {
+                case 'create':
+                    $this->type = self::CREATE;
+                break;
+                case 'insert':
+                    $this->type = self::INSERT;
+                break;
+                case 'delete':
+                    $this->type = self::DELETE;
+                break;
+                case 'select':
+                    $this->type = self::SELECT;
+                    $this->parseQueryPart($k, $part);
+                break;
+                case 'update':
+                    $this->type = self::UPDATE;
+                    $k = 'from';
+                case 'from':
+                    $this->parseQueryPart($k, $part);
+                break;
+                case 'set':
+                    $this->parseQueryPart($k, $part, true);
+                break;
+                case 'group':
+                case 'order':
+                    $k .= 'by';
+                case 'where':
+                case 'having':
+                case 'limit':
+                case 'offset':
+                    $this->parseQueryPart($k, $part);
+                break;
+            }
+        }
+
+        return $this;
+    }
+
+    public function load($path, $loadFields = true) 
+    {
+        // parse custom join conditions
+        $e = explode(' ON ', $path);
+
+        $joinCondition = '';
+
+        if (count($e) > 1) {
+            $joinCondition = $e[1];
+            $overrideJoin = true;
+            $path = $e[0];
+        } else {
+            $e = explode(' WITH ', $path);
+
+            if (count($e) > 1) {
+                $joinCondition = $e[1];
+                $path = $e[0];
+            }
+            $overrideJoin = false;
+        }
+
+        $tmp            = explode(' ', $path);
+        $componentAlias = $originalAlias = (count($tmp) > 1) ? end($tmp) : null;
+
+        $e = preg_split("/[.:]/", $tmp[0], -1);
+
+        $fullPath = $tmp[0];
+        $prevPath = '';
+        $fullLength = strlen($fullPath);
+
+        if (isset($this->_aliasMap[$e[0]])) {
+            $table = $this->_aliasMap[$e[0]]['table'];
+            $componentAlias = $e[0];
+
+            $prevPath = $parent = array_shift($e);
+        }
+
+        foreach ($e as $key => $name) {
+            // get length of the previous path
+            $length = strlen($prevPath);
+
+            // build the current component path
+            $prevPath = ($prevPath) ? $prevPath . '.' . $name : $name;
+
+            $delimeter = substr($fullPath, $length, 1);
+
+            // if an alias is not given use the current path as an alias identifier
+            if (strlen($prevPath) === $fullLength && isset($originalAlias)) {
+                $componentAlias = $originalAlias;
+            } else {
+                $componentAlias = $prevPath;
+            }
+            
+            // if the current alias already exists, skip it
+            if (isset($this->_aliasMap[$componentAlias])) {
+                continue;
+            }
+
+            if ( ! isset($table)) {
+                // process the root of the path
+
+                $table = $this->loadRoot($name, $componentAlias);
+            } else {
+                $join = ($delimeter == ':') ? 'INNER JOIN ' : 'LEFT JOIN ';
+
+                $relation = $table->getRelation($name);
+                $localTable = $table;
+
+                $table    = $relation->getTable();
+                $this->_aliasMap[$componentAlias] = array('table'    => $table,
+                                                          'parent'   => $parent,
+                                                          'relation' => $relation);
+                if ( ! $relation->isOneToOne()) {
+                   $this->needsSubquery = true;
+                }
+
+                $localAlias   = $this->getTableAlias($parent, $table->getTableName());
+                $foreignAlias = $this->getTableAlias($componentAlias, $relation->getTable()->getTableName());
+                $localSql     = $this->_conn->quoteIdentifier($table->getTableName()) 
+                              . ' ' 
+                              . $this->_conn->quoteIdentifier($localAlias);
+
+                $foreignSql   = $this->_conn->quoteIdentifier($relation->getTable()->getTableName()) 
+                              . ' ' 
+                              . $this->_conn->quoteIdentifier($foreignAlias);
+
+                $map = $relation->getTable()->inheritanceMap;
+  
+                if ( ! $loadFields || ! empty($map) || $joinCondition) {
+                    $this->subqueryAliases[] = $foreignAlias;
+                }
+
+                if ($relation instanceof Doctrine_Relation_Association) {
+                    $asf = $relation->getAssociationTable();
+  
+                    $assocTableName = $asf->getTableName();
+  
+                    if( ! $loadFields || ! empty($map) || $joinCondition) {
+                        $this->subqueryAliases[] = $assocTableName;
+                    }
+
+                    $assocPath = $prevPath . '.' . $asf->getComponentName();
+  
+                    $assocAlias = $this->getTableAlias($assocPath, $asf->getTableName());
+
+                    $queryPart = $join . $assocTableName . ' ' . $assocAlias;
+
+                    $queryPart .= ' ON ' . $localAlias
+                                . '.'
+                                . $localTable->getIdentifier()
+                                . ' = '
+                                . $assocAlias . '.' . $relation->getLocal();
+
+                    if ($relation->isEqual()) {
+                        // equal nest relation needs additional condition
+                        $queryPart .= ' OR ' . $localAlias
+                                    . '.'
+                                    . $table->getColumnName($table->getIdentifier())
+                                    . ' = '
+                                    . $assocAlias . '.' . $relation->getForeign();
+  
+                    }
+
+                    $this->parts['from'][] = $queryPart;
+
+                    $queryPart = $join . $foreignSql;
+
+                    if ( ! $overrideJoin) {
+                        $queryPart .= ' ON ';
+
+                        if ($relation->isEqual()) {
+                            $queryPart .= '(';
+                        } 
+
+                        $queryPart .= $this->_conn->quoteIdentifier($foreignAlias . '.' . $relation->getTable()->getIdentifier())
+                                    . ' = '
+                                    . $this->_conn->quoteIdentifier($assocAlias . '.' . $relation->getForeign());
+    
+                        if ($relation->isEqual()) {
+                            $queryPart .= ' OR '
+                                        . $this->_conn->quoteIdentifier($foreignAlias . '.' . $table->getColumnName($table->getIdentifier()))
+                                        . ' = ' 
+                                        . $this->_conn->quoteIdentifier($assocAlias . '.' . $relation->getLocal())
+                                        . ') AND ' 
+                                        . $this->_conn->quoteIdentifier($foreignAlias . '.' . $table->getIdentifier())
+                                        . ' != '  
+                                        . $this->_conn->quoteIdentifier($localAlias . '.' . $table->getIdentifier());
+                        }
+                    }
+                } else {
+
+                    $queryPart = $join . $foreignSql;
+                    
+                    if ( ! $overrideJoin) {
+                        $queryPart .= ' ON '
+                                   . $this->_conn->quoteIdentifier($localAlias . '.' . $relation->getLocal())
+                                   . ' = ' 
+                                   . $this->_conn->quoteIdentifier($foreignAlias . '.' . $relation->getForeign());
+                    }
+
+                }
+                $this->parts['from'][$componentAlias] = $queryPart;
+                if ( ! empty($joinCondition)) {
+                    $this->_pendingJoinConditions[$componentAlias] = $joinCondition;
+                }
+            }
+            if ($loadFields) {
+                                 
+                $restoreState = false;
+                // load fields if necessary
+                if ($loadFields && empty($this->pendingFields) 
+                    && empty($this->pendingAggregates)
+                    && empty($this->pendingSubqueries)) {
+
+                    $this->pendingFields[$componentAlias] = array('*');
+
+                    $restoreState = true;
+                }
+
+                if(isset($this->pendingFields[$componentAlias])) {
+                    $this->processPendingFields($componentAlias);
+                }
+
+                if ($restoreState) {
+                    $this->pendingFields = array();
+                    $this->pendingAggregates = array();
+                }
+            }
+            $parent = $prevPath;
+        }
+
+        return $this->_aliasMap[$componentAlias];
+    }
+
+    /**
+     * loadRoot
+     *
+     * @param string $name
+     * @param string $componentAlias
+     */
+    public function loadRoot($name, $componentAlias)
+    {
+        // get the connection for the component
+        $this->_conn = Doctrine_Manager::getInstance()
+                      ->getConnectionForComponent($name);
+
+        $table = $this->_conn->getTable($name);
+        $tableName = $table->getTableName();
+
+        // get the short alias for this table
+        $tableAlias = $this->getTableAlias($componentAlias, $tableName);
+        // quote table name
+        $queryPart = $this->_conn->quoteIdentifier($tableName);
+
+        if ($this->type === self::SELECT) {
+            $queryPart .= ' ' . $this->_conn->quoteIdentifier($tableAlias);
+        }
+
+        $this->parts['from'][] = $queryPart;
+        $this->tableAliases[$tableAlias]  = $componentAlias;
+        $this->_aliasMap[$componentAlias] = array('table' => $table);
+        
+        return $table;
+    }
+    /**
+      * count
+      * fetches the count of the query
+      *
+      * This method executes the main query without all the
+     * selected fields, ORDER BY part, LIMIT part and OFFSET part.
+     *
+     * Example:
+     * Main query: 
+     *      SELECT u.*, p.phonenumber FROM User u
+     *          LEFT JOIN u.Phonenumber p 
+     *          WHERE p.phonenumber = '123 123' LIMIT 10
+     *
+     * The modified DQL query:
+     *      SELECT COUNT(DISTINCT u.id) FROM User u
+     *          LEFT JOIN u.Phonenumber p
+     *          WHERE p.phonenumber = '123 123'
+     *
+     * @param array $params        an array of prepared statement parameters
+     * @return integer             the count of this query
+     */
+     public function count($params = array())
+     {
+         $this->getQuery();
+
+         // initialize temporary variables
+         $where  = $this->parts['where'];
+         $having = $this->parts['having'];
+         $groupby = $this->parts['groupby'];
+         $map    = reset($this->_aliasMap);
+         $componentAlias = key($this->_aliasMap);
+         $table = $map['table'];
+
+         // build the query base
+         $q  = 'SELECT COUNT(DISTINCT ' . $this->getTableAlias($componentAlias)
+             . '.' . implode(',', (array) $table->getIdentifier())
+             . ') AS num_results';
+
+         foreach ($this->parts['select'] as $field) {
+             if (strpos($field, '(') !== false) {
+                 $q .= ', ' . $field;
+             }
+         }
+
+         $q .= ' FROM ' . $this->buildFromPart();
+
+         // append column aggregation inheritance (if needed)
+         $string = $this->applyInheritance();
+
+         if ( ! empty($string)) {
+             $where[] = $string;
+         }
+         // append conditions
+         $q .= ( ! empty($where)) ?  ' WHERE '  . implode(' AND ', $where) : '';
+         $q .= ( ! empty($groupby)) ?  ' GROUP BY '  . implode(', ', $groupby) : '';
+         $q .= ( ! empty($having)) ? ' HAVING ' . implode(' AND ', $having): '';
+
+         if ( ! is_array($params)) {
+             $params = array($params);
+         }
+         // append parameters
+         $params = array_merge($this->_params, $params);
+
+         $results = $this->getConnection()->fetchAll($q, $params);
+
+         if (count($results) > 1) {
+           $count = 0;
+           foreach ($results as $result) {
+             $count += $result['num_results'];
+           }
+         } else {
+           $count = isset($results[0]) ? $results[0]['num_results']:0;
+         }
+
+         return (int) $count;
+     }
+
+    /**
+     * query
+     * query the database with DQL (Doctrine Query Language)
+     *
+     * @param string $query     DQL query
+     * @param array $params     prepared statement parameters
+     * @see Doctrine::FETCH_* constants
+     * @return mixed
+     */
+    public function query($query, $params = array())
+    {
+        $this->parseQuery($query);
+
+        return $this->execute($params);
+    }
+    
+    public function copy(Doctrine_Query $query = null)
+    {
+        if (!$query) {
+          $query = $this;
+        }
+        
+        $new = new Doctrine_Query();
+        $new->_dqlParts = $query->_dqlParts;
+        $new->_hydrationMode = $query->_hydrationMode;
+      
+        return $new;
+    }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Abstract.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Abstract.php
new file mode 100644
index 0000000000000000000000000000000000000000..901f2a872fc4dccb8a5c9afdfb0daa443964db35
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Abstract.php
@@ -0,0 +1,356 @@
+<?php
+/*
+ *  $Id: Query.php 1393 2007-05-19 17:49:16Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Hydrate');
+/**
+ * Doctrine_Query_Abstract
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1393 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Query_Abstract extends Doctrine_Hydrate
+{
+    /**
+     * addSelect
+     * adds fields to the SELECT part of the query
+     *
+     * @param string $select        Query SELECT part
+     * @return Doctrine_Query
+     */
+    public function addSelect($select)
+    {
+        return $this->parseQueryPart('select', $select, true);
+    }
+    /**
+     * addFrom
+     * adds fields to the FROM part of the query
+     *
+     * @param string $from        Query FROM part
+     * @return Doctrine_Query
+     */
+    public function addFrom($from)
+    {
+        return $this->parseQueryPart('from', $from, true);
+    }
+    /**
+     * addWhere
+     * adds conditions to the WHERE part of the query
+     *
+     * @param string $where         Query WHERE part
+     * @param mixed $params         an array of parameters or a simple scalar
+     * @return Doctrine_Query
+     */
+    public function addWhere($where, $params = array())
+    {
+        if (is_array($params)) {
+            $this->_params = array_merge($this->_params, $params);
+        } else {
+            $this->_params[] = $params;
+        }
+        return $this->parseQueryPart('where', $where, true);
+    }
+    /**
+     * whereIn
+     * adds IN condition to the query WHERE part
+     *
+     * @param string $expr
+     * @param mixed $params         an array of parameters or a simple scalar
+     * @return Doctrine_Query
+     */
+    public function whereIn($expr, $params = array())
+    {
+        $params = (array) $params;
+        $a = array();
+        foreach ($params as $k => $value) {
+            if ($value instanceof Doctrine_Expression) {
+                $value = $value->getSql();
+                unset($values[$k]);
+            } else {
+                $value = '?';      	
+            }
+            $a[] = $value;
+        }
+
+        $this->_params = array_merge($this->_params, $params);
+
+        $where = $expr . ' IN (' . implode(', ', $a) . ')';
+
+        return $this->parseQueryPart('where', $where, true);
+    }
+    /**
+     * addGroupBy
+     * adds fields to the GROUP BY part of the query
+     *
+     * @param string $groupby       Query GROUP BY part
+     * @return Doctrine_Query
+     */
+    public function addGroupBy($groupby)
+    {
+        return $this->parseQueryPart('groupby', $groupby, true);
+    }
+    /**
+     * addHaving
+     * adds conditions to the HAVING part of the query
+     *
+     * @param string $having        Query HAVING part
+     * @param mixed $params         an array of parameters or a simple scalar
+     * @return Doctrine_Query
+     */
+    public function addHaving($having, $params = array())
+    {
+        if (is_array($params)) {
+            $this->_params = array_merge($this->_params, $params);
+        } else {
+            $this->_params[] = $params;
+        }
+        return $this->parseQueryPart('having', $having, true);
+    }
+    /**
+     * addOrderBy
+     * adds fields to the ORDER BY part of the query
+     *
+     * @param string $orderby       Query ORDER BY part
+     * @return Doctrine_Query
+     */
+    public function addOrderBy($orderby)
+    {
+        return $this->parseQueryPart('orderby', $orderby, true);
+    }
+    /**
+     * select
+     * sets the SELECT part of the query
+     *
+     * @param string $select        Query SELECT part
+     * @return Doctrine_Query
+     */
+    public function select($select)
+    {
+        return $this->parseQueryPart('select', $select);
+    }
+    /**
+     * distinct
+     * Makes the query SELECT DISTINCT.
+     *
+     * @param bool $flag            Whether or not the SELECT is DISTINCT (default true).
+     * @return Doctrine_Query
+     */
+    public function distinct($flag = true)
+    {   
+        $this->parts['distinct'] = (bool) $flag;
+
+        return $this;
+    }
+
+    /**
+     * forUpdate
+     * Makes the query SELECT FOR UPDATE.
+     *
+     * @param bool $flag            Whether or not the SELECT is FOR UPDATE (default true).
+     * @return Doctrine_Query
+     */
+    public function forUpdate($flag = true)
+    {
+        $this->parts[self::FOR_UPDATE] = (bool) $flag;
+
+        return $this;
+    }
+    /**
+     * delete
+     * sets the query type to DELETE
+     *
+     * @return Doctrine_Query
+     */
+    public function delete()
+    {
+    	$this->type = self::DELETE;
+
+        return $this;
+    }
+    /**
+     * update
+     * sets the UPDATE part of the query
+     *
+     * @param string $update        Query UPDATE part
+     * @return Doctrine_Query
+     */
+    public function update($update)
+    {
+    	$this->type = self::UPDATE;
+
+        return $this->parseQueryPart('from', $update);
+    }
+    /**
+     * set
+     * sets the SET part of the query
+     *
+     * @param string $update        Query UPDATE part
+     * @return Doctrine_Query
+     */
+    public function set($key, $value, $params = null)
+    {
+    	if (is_array($key)) {
+            foreach ($key as $k => $v) {
+                $this->set($k, '?', array($v));                           	
+            }
+    	} else {
+            if ($params !== null) {
+                if (is_array($params)) {
+                    $this->_params = array_merge($this->_params, $params);
+                } else {
+                    $this->_params[] = $params;
+                }
+            }
+            return $this->parseQueryPart('set', $key . ' = ' . $value, true);
+        }
+    }
+    /**
+     * from
+     * sets the FROM part of the query
+     *
+     * @param string $from          Query FROM part
+     * @return Doctrine_Query
+     */
+    public function from($from)
+    {
+        return $this->parseQueryPart('from', $from);
+    }
+    /**
+     * innerJoin
+     * appends an INNER JOIN to the FROM part of the query
+     *
+     * @param string $join         Query INNER JOIN
+     * @return Doctrine_Query
+     */
+    public function innerJoin($join)
+    {
+        return $this->parseQueryPart('from', 'INNER JOIN ' . $join, true);
+    }
+    /**
+     * leftJoin
+     * appends a LEFT JOIN to the FROM part of the query
+     *
+     * @param string $join         Query LEFT JOIN
+     * @return Doctrine_Query
+     */
+    public function leftJoin($join)
+    {
+        return $this->parseQueryPart('from', 'LEFT JOIN ' . $join, true);
+    }
+    /**
+     * groupBy
+     * sets the GROUP BY part of the query
+     *
+     * @param string $groupby      Query GROUP BY part
+     * @return Doctrine_Query
+     */
+    public function groupBy($groupby)
+    {
+        return $this->parseQueryPart('groupby', $groupby);
+    }
+    /**
+     * where
+     * sets the WHERE part of the query
+     *
+     * @param string $join         Query WHERE part
+     * @param mixed $params        an array of parameters or a simple scalar
+     * @return Doctrine_Query
+     */
+    public function where($where, $params = array())
+    {
+        //$this->_params = array();
+        if (is_array($params)) {
+            $this->_params = $params;
+        } else {
+            $this->_params[] = $params;
+        }
+
+        return $this->parseQueryPart('where', $where);
+    }
+    /**
+     * having
+     * sets the HAVING part of the query
+     *
+     * @param string $having       Query HAVING part
+     * @param mixed $params        an array of parameters or a simple scalar
+     * @return Doctrine_Query
+     */
+    public function having($having, $params = array())
+    {
+        $this->_params = array();
+        if (is_array($params)) {
+            $this->_params = $params;
+        } else {
+            $this->_params[] = $params;
+        }
+        
+        return $this->parseQueryPart('having', $having);
+    }
+    /**
+     * orderBy
+     * sets the ORDER BY part of the query
+     *
+     * @param string $orderby      Query ORDER BY part
+     * @return Doctrine_Query
+     */
+    public function orderBy($orderby)
+    {
+        return $this->parseQueryPart('orderby', $orderby);
+    }
+    /**
+     * limit
+     * sets the Query query limit
+     *
+     * @param integer $limit        limit to be used for limiting the query results
+     * @return Doctrine_Query
+     */
+    public function limit($limit)
+    {
+        return $this->parseQueryPart('limit', $limit);
+    }
+    /**
+     * offset
+     * sets the Query query offset
+     *
+     * @param integer $offset       offset to be used for paginating the query
+     * @return Doctrine_Query
+     */
+    public function offset($offset)
+    {
+        return $this->parseQueryPart('offset', $offset);
+    }
+    
+    /**
+     * parseQueryPart
+     * parses given DQL query part
+     *
+     * @param string $queryPartName     the name of the query part
+     * @param string $queryPart         query part to be parsed
+     * @param boolean $append           whether or not to append the query part to its stack
+     *                                  if false is given, this method will overwrite 
+     *                                  the given query part stack with $queryPart
+     * @return Doctrine_Query           this object
+     */
+    abstract public function parseQueryPart($queryPartName, $queryPart, $append = false);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Check.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Check.php
new file mode 100644
index 0000000000000000000000000000000000000000..546154f36ec5a52a9bece8066c6ef3019930a56c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Check.php
@@ -0,0 +1,159 @@
+<?php
+/*
+ *  $Id: From.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Check
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Check
+{
+    /**
+     * @var Doctrine_Table $table           Doctrine_Table object
+     */
+    protected $table;
+    /**
+     * @var string $sql                     database specific sql CHECK constraint definition 
+     *                                      parsed from the given dql CHECK definition
+     */
+    protected $sql;
+    /**
+     * @param Doctrine_Table|string $table  Doctrine_Table object
+     */
+    public function __construct($table)
+    {
+        if ( ! ($table instanceof Doctrine_Table)) {
+            $table = Doctrine_Manager::getInstance()
+                        ->getCurrentConnection()
+                        ->getTable($table);
+        }
+        $this->table = $table;
+    }
+    /**
+     * getTable
+     * returns the table object associated with this object
+     *
+     * @return Doctrine_Connection
+     */
+    public function getTable()
+    {
+        return $this->table;
+    }
+    /**
+     * parse
+     *
+     * @param string $dql       DQL CHECK constraint definition
+     * @return string
+     */
+    public function parse($dql)
+    {
+        $this->sql = $this->parseClause($dql);
+    }
+    /**
+     * parseClause
+     *
+     * @param string $alias     component alias
+     * @param string $field     the field name
+     * @param mixed $value      the value of the field
+     * @return void
+     */
+    public function parseClause($dql)
+    {
+        $parts = Doctrine_Tokenizer::sqlExplode($dql, ' AND ');
+
+        if (count($parts) > 1) {
+            $ret = array();
+            foreach ($parts as $part) {
+                $ret[] = $this->parseSingle($part);
+            }
+
+            $r = implode(' AND ', $ret);
+        } else {
+            $parts = Doctrine_Tokenizer::quoteExplode($dql, ' OR ');
+            if (count($parts) > 1) {
+                $ret = array();
+                foreach ($parts as $part) {
+                    $ret[] = $this->parseClause($part);
+                }
+
+                $r = implode(' OR ', $ret);
+            } else {
+                $ret = $this->parseSingle($dql);
+                return $ret;
+            }
+        }
+        return '(' . $r . ')';
+    }
+    public function parseSingle($part)
+    {
+        $e = explode(' ', $part);
+        
+        $e[0] = $this->parseFunction($e[0]);
+
+        switch ($e[1]) {
+            case '>':
+            case '<':
+            case '=':
+            case '!=':
+            case '<>':
+
+            break;
+            default:
+                throw new Doctrine_Query_Exception('Unknown operator ' . $e[1]);
+        }
+
+        return implode(' ', $e);
+    }
+    public function parseFunction($dql) 
+    {
+        if (($pos = strpos($dql, '(')) !== false) {
+            $func  = substr($dql, 0, $pos);
+            $value = substr($dql, ($pos + 1), -1);
+            
+            $expr  = $this->table->getConnection()->expression;
+
+            if ( ! method_exists($expr, $func)) {
+                throw new Doctrine_Query_Exception('Unknown function ' . $func);
+            }
+            
+            $func  = $expr->$func($value);
+        }
+        return $func;
+    }
+    /**
+     * getSql
+     *
+     * returns database specific sql CHECK constraint definition
+     * parsed from the given dql CHECK definition
+     *
+     * @return string
+     */
+    public function getSql()
+    {
+        return $this->sql;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Condition.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Condition.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e12b96acc7058f43c3c929c6df611a58083a527
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Condition.php
@@ -0,0 +1,112 @@
+<?php
+/*
+ *  $Id: Condition.php 1479 2007-05-24 19:47:28Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Part');
+/**
+ * Doctrine_Query_Condition
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1479 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Query_Condition extends Doctrine_Query_Part
+{
+    /**
+     * DQL CONDITION PARSER
+     * parses the join condition/where/having part of the query string
+     *
+     * @param string $str
+     * @return string
+     */
+    public function parse($str)
+    {
+        $tmp = trim($str);
+
+        $parts = Doctrine_Tokenizer::bracketExplode($str, array(' \&\& ', ' AND '), '(', ')');
+
+        if (count($parts) > 1) {
+            $ret = array();
+            foreach ($parts as $part) {
+                $part = Doctrine_Tokenizer::bracketTrim($part, '(', ')');
+                $ret[] = $this->parse($part);
+            }
+            $r = implode(' AND ', $ret);
+        } else {
+
+            $parts = Doctrine_Tokenizer::bracketExplode($str, array(' \|\| ', ' OR '), '(', ')');
+            if (count($parts) > 1) {
+                $ret = array();
+                foreach ($parts as $part) {
+                    $part = Doctrine_Tokenizer::bracketTrim($part, '(', ')');
+                    $ret[] = $this->parse($part);
+                }
+                $r = implode(' OR ', $ret);
+            } else {
+                if (substr($parts[0],0,1) == '(' && substr($parts[0], -1) == ')') {
+                    return $this->parse(substr($parts[0], 1, -1));
+                } else {
+                    return $this->load($parts[0]);
+                }
+            }
+        }
+
+        return '(' . $r . ')';
+    }
+
+
+
+    /**
+     * parses a literal value and returns the parsed value
+     *
+     * boolean literals are parsed to integers
+     * components are parsed to associated table aliases
+     *
+     * @param string $value         literal value to be parsed
+     * @return string
+     */
+    public function parseLiteralValue($value)
+    {
+        // check that value isn't a string
+        if (strpos($value, '\'') === false) {
+            // parse booleans
+            $value = $this->query->getConnection()
+                     ->dataDict->parseBoolean($value);
+
+            $a = explode('.', $value);
+
+            if (count($a) > 1) {
+            // either a float or a component..
+
+                if ( ! is_numeric($a[0])) {
+                    // a component found
+                    $value = $this->query->getTableAlias($a[0]). '.' . $a[1];
+                }
+            }
+        } else {
+            // string literal found
+        }
+
+        return $value;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..1790a8e1919dd5317ace1e7bc247fd94c97b2acf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Query_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0cf6518499b9026055753316d78d1bc16ad7751
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Filter
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Filter implements Doctrine_Query_Filter_Interface
+{
+    /**
+     * preQuery
+     *
+     * Method for listening the preQuery method of Doctrine_Query and
+     * hooking into the query building procedure, doing any custom / specialized
+     * query building procedures that are neccessary.
+     *
+     * @return void
+     */
+    public function preQuery(Doctrine_Query $query)
+    {
+    
+    }
+    /**
+     * postQuery
+     *
+     * Method for listening the postQuery method of Doctrine_Query and
+     * to hook into the query building procedure, doing any custom / specialized
+     * post query procedures (for example logging) that are neccessary.
+     *
+     * @param Doctrine_Query $query
+     * @return void
+     */
+    public function postQuery(Doctrine_Query $query)
+    {
+    
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Chain.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Chain.php
new file mode 100644
index 0000000000000000000000000000000000000000..f5a0e532b0a245bac83416ac932ce331d2883022
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Chain.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Filter_Chain
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Filter_Chain
+{
+    /**
+     * @var array $_filters         an array of Doctrine_Query_Filter objects
+     */
+    protected $_filters = array();
+    /**
+     * add
+     *
+     * @param Doctrine_Query_Filter $filter
+     * @return void
+     */
+    public function add(Doctrine_Query_Filter $filter)
+    {
+        $this->_filters[] = $filter;
+    }
+    /**
+     * returns a Doctrine_Query_Filter on success
+     * and null on failure
+     *
+     * @param mixed $key
+     * @return mixed
+     */
+    public function get($key)
+    {
+        if ( ! isset($this->_filters[$key])) {
+            throw new Doctrine_Query_Exception('Unknown filter ' . $key);
+        }
+        return $this->_filters[$key];
+    }
+    /**
+     * set
+     *
+     * @param mixed $key
+     * @param Doctrine_Query_Filter $listener
+     * @return void
+     */
+    public function set($key, Doctrine_Query_Filter $listener)
+    {
+        $this->_filters[$key] = $listener;
+    }
+    /**
+     * preQuery
+     *
+     * Method for listening the preQuery method of Doctrine_Query and
+     * hooking into the query building procedure, doing any custom / specialized
+     * query building procedures that are neccessary.
+     *
+     * @return void
+     */
+    public function preQuery(Doctrine_Query $query)
+    {
+        foreach ($this->_filters as $filter) {
+            $filter->preQuery($query);
+        }
+    }
+    /**
+     * postQuery
+     *
+     * Method for listening the postQuery method of Doctrine_Query and
+     * to hook into the query building procedure, doing any custom / specialized
+     * post query procedures (for example logging) that are neccessary.
+     *
+     * @return void
+     */
+    public function postQuery(Doctrine_Query $query)
+    {
+        foreach ($this->_filters as $filter) {
+            $filter->postQuery($query);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ad8e22ecb2826c93110f60033115a919c011be8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Filter/Interface.php
@@ -0,0 +1,57 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Filter_Interface
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+interface Doctrine_Query_Filter_Interface
+{
+
+    /**
+     * preQuery
+     *
+     * Method for listening the preQuery method of Doctrine_Query and
+     * hooking into the query building procedure, doing any custom / specialized
+     * query building procedures that are neccessary.
+     *
+     * @return void
+     */
+    public function preQuery(Doctrine_Query $query);
+
+    /**
+     * postQuery
+     *
+     * Method for listening the postQuery method of Doctrine_Query and
+     * to hook into the query building procedure, doing any custom / specialized
+     * post query procedures (for example logging) that are neccessary.
+     *
+     * @return void
+     */
+    public function postQuery(Doctrine_Query $query);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/From.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/From.php
new file mode 100644
index 0000000000000000000000000000000000000000..2cdf7134edae7b33b1c75edd31c560498eaa53c2
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/From.php
@@ -0,0 +1,91 @@
+<?php
+/*
+ *  $Id: From.php 2217 2007-08-11 21:53:02Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload("Doctrine_Query_Part");
+/**
+ * Doctrine_Query_From
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2217 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_From extends Doctrine_Query_Part
+{
+    /**
+     * DQL FROM PARSER
+     * parses the from part of the query string
+
+     * @param string $str
+     * @return void
+     */
+    public function parse($str)
+    {
+        $str = trim($str);
+        $parts = Doctrine_Tokenizer::bracketExplode($str, 'JOIN');
+
+        $operator = false;
+
+        switch (trim($parts[0])) {
+            case 'INNER':
+                $operator = ':';
+            case 'LEFT':
+                array_shift($parts);
+            break;
+        }
+
+
+        $last = '';
+
+        foreach ($parts as $k => $part) {
+            $part = trim($part);
+
+            if (empty($part)) {
+                continue;
+            }
+
+            $e    = explode(' ', $part);
+
+            if (end($e) == 'INNER' || end($e) == 'LEFT') {
+                $last = array_pop($e);
+            }
+            $part = implode(' ', $e);
+
+            foreach (Doctrine_Tokenizer::bracketExplode($part, ',') as $reference) {
+                $reference = trim($reference);
+                $e = explode(' ', $reference);
+                $e2 = explode('.', $e[0]);
+
+                if ($operator) {
+                    $e[0] = array_shift($e2) . $operator . implode('.', $e2);
+                }
+
+                $table = $this->query->load(implode(' ', $e));
+            }
+
+            $operator = ($last == 'INNER') ? ':' : '.';
+        }
+        return null;
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Groupby.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Groupby.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc473f98054f84e5c06a4c856475c05cf6f9462d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Groupby.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ *  $Id: Groupby.php 2238 2007-08-14 20:16:31Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Part');
+/**
+ * Doctrine_Query_Groupby
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2238 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Groupby extends Doctrine_Query_Part
+{
+    /**
+     * DQL GROUP BY PARSER
+     * parses the group by part of the query string
+     *
+     * @param string $str
+     * @return void
+     */
+    public function parse($str, $append = false)
+    {
+        $r = array();
+        foreach (explode(',', $str) as $reference) {
+            $reference = trim($reference);
+            $e     = explode('.', $reference);
+            
+            if (count($e) > 1) {
+                $field = array_pop($e);
+                $ref   = implode('.', $e);
+                $this->query->load($ref);
+    
+                $r[] = $this->query->getTableAlias($ref) . '.' . $field;
+            } else {
+                $alias = end($e);
+                $r[] = $this->query->getAggregateAlias($alias);
+            }
+        }
+        return implode(', ', $r);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Having.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Having.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a605ab715b988d56098cffdb4225cbea4b0d558
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Having.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Having.php 1881 2007-06-27 18:42:47Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Condition');
+/**
+ * Doctrine_Query_Having
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1881 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Having extends Doctrine_Query_Condition
+{
+    /**
+     * DQL Aggregate Function parser
+     *
+     * @param string $func
+     * @return mixed
+     */
+    private function parseAggregateFunction($func)
+    {
+        $pos = strpos($func, '(');
+
+        if ($pos !== false) {
+            $funcs  = array();
+
+            $name   = substr($func, 0, $pos);
+            $func   = substr($func, ($pos + 1), -1);
+            $params = Doctrine_Tokenizer::bracketExplode($func, ',', '(', ')');
+
+            foreach ($params as $k => $param) {
+                $params[$k] = $this->parseAggregateFunction($param);
+            }
+
+            $funcs = $name . '(' . implode(', ', $params) . ')';
+
+            return $funcs;
+
+        } else {
+            if ( ! is_numeric($func)) {
+                $a = explode('.', $func);
+
+                if (count($a) > 1) {
+                    $field     = array_pop($a);
+                    $reference = implode('.', $a);
+                    $map       = $this->query->load($reference, false);
+                    $field     = $map['table']->getColumnName($field);
+                    $func      = $this->query->getTableAlias($reference) . '.' . $field;
+                } else {
+                    $field = end($a);
+                    $func  = $this->query->getAggregateAlias($field);
+                }
+                return $func;
+            } else {
+                return $func;
+            }
+        }
+    }
+    /**
+     * load
+     * returns the parsed query part
+     *
+     * @param string $having
+     * @return string
+     */
+    final public function load($having)
+    {
+        $e = Doctrine_Tokenizer::bracketExplode($having, ' ', '(', ')');
+
+        $r = array_shift($e);
+        $t = explode('(', $r);
+
+        $count = count($t);
+        $r = $this->parseAggregateFunction($r);
+        $operator  = array_shift($e);
+        $value     = implode(' ', $e);
+        $r .= ' ' . $operator . ' ' . $value;
+
+        return $r;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/JoinCondition.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/JoinCondition.php
new file mode 100644
index 0000000000000000000000000000000000000000..d50ae3d4f4a4a1a62fc384e8da96cdbabb549c3a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/JoinCondition.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ *  $Id: JoinCondition.php 2217 2007-08-11 21:53:02Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Part');
+/**
+ * Doctrine_Query_JoinCondition
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2217 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_JoinCondition extends Doctrine_Query_Condition 
+{
+    public function load($condition) 
+    {
+        $condition = trim($condition);
+
+        $e         = Doctrine_Tokenizer::sqlExplode($condition);
+
+        if(count($e) > 2) {
+            $a         = explode('.', $e[0]);
+            $field     = array_pop($a);
+            $reference = implode('.', $a);
+            $operator  = $e[1];
+            $value     = $e[2];
+
+            $alias     = $this->query->getTableAlias($reference);
+            $map       = $this->query->getAliasDeclaration($reference);
+            $table     = $map['table'];
+            // check if value is enumerated value
+            $enumIndex = $table->enumIndex($field, trim($value, "'"));
+
+
+            if (substr($value, 0, 1) == '(') {
+                // trim brackets
+                $trimmed   = Doctrine_Tokenizer::bracketTrim($value);
+
+                if (substr($trimmed, 0, 4) == 'FROM' || substr($trimmed, 0, 6) == 'SELECT') {
+                    // subquery found
+                    $q = $this->query->createSubquery();
+                    $value = '(' . $q->parseQuery($trimmed)->getQuery() . ')';
+                } elseif (substr($trimmed, 0, 4) == 'SQL:') {
+                    $value = '(' . substr($trimmed, 4) . ')';
+                } else {
+                    // simple in expression found
+                    $e     = Doctrine_Tokenizer::sqlExplode($trimmed, ',');
+
+                    $value = array();
+                    foreach ($e as $part) {
+                        $index   = $table->enumIndex($field, trim($part, "'"));
+                        if ($index !== false) {
+                            $value[] = $index;
+                        } else {
+                            $value[] = $this->parseLiteralValue($part);
+                        }
+                    }
+                    $value = '(' . implode(', ', $value) . ')';
+                }
+            } else {
+                if ($enumIndex !== false) {
+                    $value = $enumIndex;
+                } else {
+                    $value = $this->parseLiteralValue($value);
+                }
+            }
+
+            switch ($operator) {
+                case '<':
+                case '>':
+                case '=':
+                case '!=':
+                    if ($enumIndex !== false) {
+                        $value  = $enumIndex;
+                    }
+                default:
+                    $condition  = $alias . '.' . $field . ' '
+                                . $operator . ' ' . $value;
+            }
+
+        }
+        return $condition;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Limit.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Limit.php
new file mode 100644
index 0000000000000000000000000000000000000000..195ecaa0eef7311cd038589ee0eb55007e546731
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Limit.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ *  $Id: Where.php 1352 2007-05-15 10:07:05Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Limit
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1352 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Limit extends Doctrine_Query_Part
+{
+    public function parse($limit) 
+    {
+        return (int) $limit;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Offset.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Offset.php
new file mode 100644
index 0000000000000000000000000000000000000000..16de40e9b4b6f526a22014617e21cf89aec07211
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Offset.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ *  $Id: Where.php 1352 2007-05-15 10:07:05Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Offset
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1352 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Offset extends Doctrine_Query_Part
+{
+    public function parse($offset)
+    {
+        return (int) $offset;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Orderby.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Orderby.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e70915b93ef99fdfac2f00d2eb10fd26ad54585
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Orderby.php
@@ -0,0 +1,74 @@
+<?php
+/*
+ *  $Id: Orderby.php 1871 2007-06-27 17:41:02Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Part');
+/**
+ * Doctrine_Query_Orderby
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1871 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Orderby extends Doctrine_Query_Part
+{
+    /**
+     * DQL ORDER BY PARSER
+     * parses the order by part of the query string
+     *
+     * @param string $str
+     * @return void
+     */
+    public function parse($str, $append = false)
+    {
+        $ret = array();
+
+        foreach (explode(',', trim($str)) as $r) {
+            $r = trim($r);
+            $e = explode(' ', $r);
+            $a = explode('.', $e[0]);
+
+            if (count($a) > 1) {
+                $field     = array_pop($a);
+                $reference = implode('.', $a);
+                $name      = end($a);
+
+                $map = $this->query->load($reference, false);
+                $tableAlias = $this->query->getTableAlias($reference);
+
+                $r = $tableAlias . '.' . $field;
+
+
+            } else {
+                $field = $this->query->getAggregateAlias($e[0]);
+
+                $r = $field;
+            }
+            if (isset($e[1])) {
+                $r .= ' ' . $e[1];
+            }
+            $ret[] = $r;
+        }
+        return $ret;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Parser.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Parser.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ef89336132aa40a905d36acc15d97c6f65422dc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Parser.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ *  $Id: Query.php 1296 2007-04-26 17:42:03Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Parser
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1296 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Parser 
+{
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Part.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Part.php
new file mode 100644
index 0000000000000000000000000000000000000000..99b1462080ef0b5ab2a3cfd611e82a490eef1ca6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Part.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ *  $Id: Part.php 1479 2007-05-24 19:47:28Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Query_Part
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1479 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Query_Part
+{
+    /**
+     * @var Doctrine_Query $query           the query object associated with this parser
+     */
+    protected $query;
+    /**
+     * @param Doctrine_Query $query         the query object associated with this parser
+     */
+    public function __construct($query)
+    {
+        $this->query = $query;
+    }
+    /**
+     * @return Doctrine_Query $query        the query object associated with this parser
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Select.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Select.php
new file mode 100644
index 0000000000000000000000000000000000000000..deec3c85813d935a9469e9ea13195dd13e8d2402
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Select.php
@@ -0,0 +1,41 @@
+<?php
+/*
+ *  $Id: From.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload("Doctrine_Query_Part");
+/**
+ * Doctrine_Query_Select
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Select extends Doctrine_Query_Part
+{
+    public function parse($dql) 
+    {
+        $this->query->parseSelect($dql);
+        
+        return null;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Set.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Set.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ca410065fa2eb47dad47fbbb10745e3a5d6f99b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Set.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ *  $Id: Set.php 2119 2007-07-31 20:22:10Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Part');
+/**
+ * Doctrine_Query
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2119 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Set extends Doctrine_Query_Part
+{
+    public function parse($dql)
+    {
+        preg_match_all("/[a-z0-9_]+\.[a-z0-9_]+[\.[a-z0-9]+]*/i", $dql, $m);
+
+        if (isset($m[0])) {
+            foreach ($m[0] as $part) {
+                $e   = explode('.', trim($part));
+                $field = array_pop($e);
+    
+                $reference = implode('.', $e);
+    
+                $alias = $this->query->getTableAlias($reference);
+                $map   = $this->query->getAliasDeclaration($reference);
+    
+                $dql = str_replace($part, $map['table']->getColumnName($field), $dql);
+            }
+        }
+
+        return $dql;
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Where.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Where.php
new file mode 100644
index 0000000000000000000000000000000000000000..f11850ae68bbb837a70bbfe826df59956d8fe166
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Query/Where.php
@@ -0,0 +1,175 @@
+<?php
+/*
+ *  $Id: Where.php 2224 2007-08-13 21:23:56Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Condition');
+/**
+ * Doctrine_Query_Where
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2224 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Query_Where extends Doctrine_Query_Condition
+{
+    public function load($where) 
+    {
+        $where = Doctrine_Tokenizer::bracketTrim(trim($where));
+        $conn  = $this->query->getConnection();
+        $terms = Doctrine_Tokenizer::sqlExplode($where);  
+
+        if (count($terms) > 1) {
+            if (substr($where, 0, 6) == 'EXISTS') {
+                return $this->parseExists($where, true);
+            } elseif (substr($where, 0, 10) == 'NOT EXISTS') {
+                return $this->parseExists($where, false);
+            }
+        }
+
+        if (count($terms) < 3) {
+            $terms = Doctrine_Tokenizer::sqlExplode($where, array('=', '<', '<>', '>', '!='));
+        }
+
+        if (count($terms) > 1) {
+            $first = array_shift($terms);
+            $value = array_pop($terms);
+            $operator = trim(substr($where, strlen($first), -strlen($value)));
+            $table = null;
+            $field = null;
+
+            if (strpos($first, "'") === false && strpos($first, '(') === false) {
+                // normal field reference found
+                $a = explode('.', $first);
+        
+                $field = array_pop($a);
+                $reference = implode('.', $a);
+                
+                if (empty($reference)) {
+                    $map = $this->query->getRootDeclaration();  
+                    
+                    $alias = $this->query->getTableAlias($this->query->getRootAlias());
+                    $table = $map['table'];                     	
+                } else {
+                    $map = $this->query->load($reference, false);
+    
+                    $alias = $this->query->getTableAlias($reference);
+                    $table = $map['table'];
+                }
+                if ($this->query->getType() === Doctrine_Query::SELECT) {
+                    $first = $conn->quoteIdentifier($alias)
+                           . '.'
+                           . $conn->quoteIdentifier($table->getColumnName($field));
+                } else {
+                    $first = $conn->quoteIdentifier($table->getColumnName($field));
+                }
+            } else {
+                $first = $this->query->parseClause($first);
+            }
+            $sql = $first . ' ' . $operator . ' ' . $this->parseValue($value, $table, $field);
+        
+            return $sql;  
+        } else {
+
+        }
+    }
+
+    public function parseValue($value, Doctrine_Table $table = null, $field = null)
+    {
+        if (substr($value, 0, 1) == '(') {
+            // trim brackets
+            $trimmed   = Doctrine_Tokenizer::bracketTrim($value);
+
+            if (substr($trimmed, 0, 4) == 'FROM' ||
+                substr($trimmed, 0, 6) == 'SELECT') {
+
+                // subquery found
+                $q     = new Doctrine_Query();
+                $value = '(' . $q->isSubquery(true)->parseQuery($trimmed)->getQuery() . ')';
+
+            } elseif (substr($trimmed, 0, 4) == 'SQL:') {
+                $value = '(' . substr($trimmed, 4) . ')';
+            } else {
+                // simple in expression found
+                $e = Doctrine_Tokenizer::sqlExplode($trimmed, ',');
+
+                $value = array();
+
+                $index = false;
+
+                foreach ($e as $part) {
+                    if (isset($table) && isset($field)) {
+                        $index = $table->enumIndex($field, trim($part, "'"));
+                    }
+
+                    if ($index !== false) {
+                        $value[] = $index;
+                    } else {
+                        $value[] = $this->parseLiteralValue($part);
+                    }
+                }
+                $value = '(' . implode(', ', $value) . ')';
+            }
+        } elseif(substr($value, 0, 1) == ':' || $value === '?') {
+            // placeholder found
+            if (isset($table) && isset($field) && $table->getTypeOf($field) == 'enum') {
+                $this->query->addEnumParam($value, $table, $field);
+            } else {
+                $this->query->addEnumParam($value, null, null);
+            }
+        } else {
+            $enumIndex = false;
+            if (isset($table) && isset($field)) {
+                // check if value is enumerated value
+                $enumIndex = $table->enumIndex($field, trim($value, "'"));
+            }
+
+            if ($enumIndex !== false) {
+                $value = $enumIndex;
+            } else {
+                $value = $this->parseLiteralValue($value);
+            }
+        }
+        return $value;
+    }
+    /**
+     * parses an EXISTS expression
+     *
+     * @param string $where         query where part to be parsed
+     * @param boolean $negation     whether or not to use the NOT keyword
+     * @return string
+     */
+    public function parseExists($where, $negation)
+    {
+        $operator = ($negation) ? 'EXISTS' : 'NOT EXISTS';
+
+        $pos = strpos($where, '(');
+
+        if ($pos == false) {
+            throw new Doctrine_Query_Exception('Unknown expression, expected a subquery with () -marks');
+        }
+
+        $sub = Doctrine_Tokenizer::bracketTrim(substr($where, $pos));
+
+        return $operator . ' (' . $this->query->createSubquery()->parseQuery($sub, false)->getQuery() . ')';
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql.php
new file mode 100644
index 0000000000000000000000000000000000000000..1613d38a9207651f41e3f3e017654ca894438712
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql.php
@@ -0,0 +1,282 @@
+<?php
+/*
+ *  $Id: RawSql.php 1847 2007-06-26 10:05:26Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Query_Abstract');
+/**
+ * Doctrine_RawSql
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1847 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_RawSql extends Doctrine_Query_Abstract
+{
+    /**
+     * @var array $fields
+     */
+    private $fields = array();
+    /**
+     * parseQueryPart
+     * parses given query part
+     *
+     * @param string $queryPartName     the name of the query part
+     * @param string $queryPart         query part to be parsed
+     * @param boolean $append           whether or not to append the query part to its stack
+     *                                  if false is given, this method will overwrite 
+     *                                  the given query part stack with $queryPart
+     * @return Doctrine_Query           this object
+     */
+    public function parseQueryPart($queryPartName, $queryPart, $append = false) 
+    {
+        if ($queryPartName == 'select') {
+            preg_match_all('/{([^}{]*)}/U', $queryPart, $m);
+
+            $this->fields = $m[1];
+            $this->parts['select'] = array();
+        } else {
+            if ( ! $append) {
+                $this->parts[$queryPartName] = array($queryPart);
+            } else {
+                $this->parts[$queryPartName][] = $queryPart;
+            }
+        }
+        return $this;
+    }
+    /**
+     * parseQuery
+     * parses an sql query and adds the parts to internal array
+     *
+     * @param string $query         query to be parsed
+     * @return Doctrine_RawSql      this object
+     */
+    public function parseQuery($query)
+    {
+        preg_match_all('/{([^}{]*)}/U', $query, $m);
+
+        $this->fields = $m[1];
+        $this->clear();
+
+        $e = Doctrine_Tokenizer::sqlExplode($query,' ');
+
+        foreach ($e as $k => $part) {
+            $low = strtolower($part);
+            switch (strtolower($part)) {
+                case 'select':
+                case 'from':
+                case 'where':
+                case 'limit':
+                case 'offset':
+                case 'having':
+                    $p = $low;
+                    if ( ! isset($parts[$low])) {
+                        $parts[$low] = array();
+                    }
+                    break;
+                case 'order':
+                case 'group':
+                    $i = ($k + 1);
+                    if (isset($e[$i]) && strtolower($e[$i]) === 'by') {
+                        $p = $low;
+                        $p .= 'by';
+                        $parts[$low . 'by'] = array();
+
+                    } else {
+                        $parts[$p][] = $part;
+                    }
+                    break;
+                case 'by':
+                    continue;
+                default:
+                    if ( ! isset($parts[$p][0])) {
+                        $parts[$p][0] = $part;
+                    } else {
+                        $parts[$p][0] .= ' '.$part;
+                    }
+            }
+        }
+
+        $this->parts = $parts;
+        $this->parts['select'] = array();
+
+        return $this;
+    }
+    /**
+     * getQuery
+     * builds the sql query from the given query parts
+     *
+     * @return string       the built sql query
+     */
+    public function getQuery()
+    {
+    	$select = array();
+
+        foreach ($this->fields as $field) {
+            $e = explode('.', $field);
+            if ( ! isset($e[1])) {
+                throw new Doctrine_RawSql_Exception('All selected fields in Sql query must be in format tableAlias.fieldName');
+            }
+            // try to auto-add component
+            if ( ! $this->hasTableAlias($e[0])) {
+                try {
+                    $this->addComponent($e[0], ucwords($e[0]));
+                } catch(Doctrine_Exception $exception) {
+                    throw new Doctrine_RawSql_Exception('The associated component for table alias ' . $e[0] . ' couldn\'t be found.');
+                }
+            }
+
+            $componentAlias = $this->getComponentAlias($e[0]);
+            
+            if ($e[1] == '*') {
+                foreach ($this->_aliasMap[$componentAlias]['table']->getColumnNames() as $name) {
+                    $field = $e[0] . '.' . $name;
+
+                    $select[$componentAlias][$field] = $field . ' AS ' . $e[0] . '__' . $name;
+                }
+            } else {
+                $field = $e[0] . '.' . $e[1];
+                $select[$componentAlias][$field] = $field . ' AS ' . $e[0] . '__' . $e[1];
+            }
+        }
+
+        // force-add all primary key fields
+
+        foreach ($this->getTableAliases() as $tableAlias => $componentAlias) {
+            $map = $this->_aliasMap[$componentAlias];
+
+            foreach ($map['table']->getPrimaryKeys() as $key) {
+                $field = $tableAlias . '.' . $key;
+
+                if ( ! isset($this->parts['select'][$field])) {
+                    $select[$componentAlias][$field] = $field . ' AS ' . $tableAlias . '__' . $key;
+                }
+            }
+        }
+        
+        // first add the fields of the root component
+        reset($this->_aliasMap);
+        $componentAlias = key($this->_aliasMap);
+
+        $q = 'SELECT ' . implode(', ', $select[$componentAlias]);
+        unset($select[$componentAlias]);
+
+        foreach ($select as $component => $fields) {
+            if ( ! empty($fields)) {
+                $q .= ', ' . implode(', ', $fields);
+            }
+        }
+
+        $string = $this->applyInheritance();
+        if ( ! empty($string)) {
+            $this->parts['where'][] = $string;
+        }
+        $copy = $this->parts;
+        unset($copy['select']);
+
+        $q .= ( ! empty($this->parts['from']))?    ' FROM '     . implode(' ', $this->parts['from']) : '';
+        $q .= ( ! empty($this->parts['where']))?   ' WHERE '    . implode(' AND ', $this->parts['where']) : '';
+        $q .= ( ! empty($this->parts['groupby']))? ' GROUP BY ' . implode(', ', $this->parts['groupby']) : '';
+        $q .= ( ! empty($this->parts['having']))?  ' HAVING '   . implode(' AND ', $this->parts['having']) : '';
+        $q .= ( ! empty($this->parts['orderby']))? ' ORDER BY ' . implode(', ', $this->parts['orderby']) : '';
+        $q .= ( ! empty($this->parts['limit']))?   ' LIMIT ' . implode(' ', $this->parts['limit']) : '';
+        $q .= ( ! empty($this->parts['offset']))?  ' OFFSET ' . implode(' ', $this->parts['offset']) : '';
+
+        if ( ! empty($string)) {
+            array_pop($this->parts['where']);
+        }
+        return $q;
+    }
+    /**
+     * getFields
+     * returns the fields associated with this parser
+     *
+     * @return array    all the fields associated with this parser
+     */
+    public function getFields()
+    {
+        return $this->fields;
+    }
+    /**
+     * addComponent
+     *
+     * @param string $tableAlias
+     * @param string $componentName
+     * @return Doctrine_RawSql
+     */
+    public function addComponent($tableAlias, $path)
+    {
+        $tmp           = explode(' ', $path);
+        $originalAlias = (count($tmp) > 1) ? end($tmp) : null;
+
+        $e = explode('.', $tmp[0]);
+
+        $fullPath = $tmp[0];
+        $fullLength = strlen($fullPath);
+
+        $table = null;
+
+        $currPath = '';
+
+        if (isset($this->_aliasMap[$e[0]])) {
+            $table = $this->_aliasMap[$e[0]]['table'];
+
+            $currPath = $parent = array_shift($e);
+        }
+
+        foreach ($e as $k => $component) {
+            // get length of the previous path
+            $length = strlen($currPath);
+
+            // build the current component path
+            $currPath = ($currPath) ? $currPath . '.' . $component : $component;
+
+            $delimeter = substr($fullPath, $length, 1);
+
+            // if an alias is not given use the current path as an alias identifier
+            if (strlen($currPath) === $fullLength && isset($originalAlias)) {
+                $componentAlias = $originalAlias;
+            } else {
+                $componentAlias = $currPath;
+            }
+            if ( ! isset($table)) {
+                $conn = Doctrine_Manager::getInstance()
+                        ->getConnectionForComponent($component);
+                        
+                $table = $conn->getTable($component);
+                $this->_aliasMap[$componentAlias] = array('table' => $table);
+            } else {
+                $relation = $table->getRelation($component);
+
+                $this->_aliasMap[$componentAlias] = array('table'    => $relation->getTable(),
+                                                          'parent'   => $parent,
+                                                          'relation' => $relation);
+            }
+            $this->addTableAlias($tableAlias, $componentAlias);
+
+            $parent = $currPath;
+        }
+
+        return $this;
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..c387f43c615cecc76437ff514045531fb78deead
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/RawSql/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_RawSql_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_RawSql_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record.php
new file mode 100644
index 0000000000000000000000000000000000000000..e36971c8d1314d8f630a6f9a9052e87951c968fc
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record.php
@@ -0,0 +1,1515 @@
+<?php
+/*
+ *  $Id: Record.php 2282 2007-08-28 16:45:22Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Record_Abstract');
+/**
+ * Doctrine_Record
+ * All record classes should inherit this super class
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2282 $
+ */
+abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Countable, IteratorAggregate, Serializable
+{
+    /**
+     * STATE CONSTANTS
+     */
+
+    /**
+     * DIRTY STATE
+     * a Doctrine_Record is in dirty state when its properties are changed
+     */
+    const STATE_DIRTY       = 1;
+    /**
+     * TDIRTY STATE
+     * a Doctrine_Record is in transient dirty state when it is created 
+     * and some of its fields are modified but it is NOT yet persisted into database
+     */
+    const STATE_TDIRTY      = 2;
+    /**
+     * CLEAN STATE
+     * a Doctrine_Record is in clean state when all of its properties are loaded from the database
+     * and none of its properties are changed
+     */
+    const STATE_CLEAN       = 3;
+    /**
+     * PROXY STATE
+     * a Doctrine_Record is in proxy state when its properties are not fully loaded
+     */
+    const STATE_PROXY       = 4;
+    /**
+     * NEW TCLEAN
+     * a Doctrine_Record is in transient clean state when it is created and none of its fields are modified
+     */
+    const STATE_TCLEAN      = 5;
+    /**
+     * LOCKED STATE
+     * a Doctrine_Record is temporarily locked during deletes and saves
+     *
+     * This state is used internally to ensure that circular deletes
+     * and saves will not cause infinite loops
+     */
+    const STATE_LOCKED     = 6;
+
+    /**
+     * @var Doctrine_Node_<TreeImpl>        node object
+     */
+    protected $_node;
+    /**
+     * @var integer $_id                    the primary keys of this object
+     */
+    protected $_id           = array();
+    /**
+     * @var array $_data                    the record data
+     */
+    protected $_data         = array();
+    /**
+     * @var array $_values                  the values array, aggregate values and such are mapped into this array
+     */
+    protected $_values       = array();
+    /**
+     * @var integer $_state                 the state of this record
+     * @see STATE_* constants
+     */
+    protected $_state;
+    /**
+     * @var array $_modified                an array containing properties that have been modified
+     */
+    protected $_modified     = array();
+    /**
+     * @var Doctrine_Validator_ErrorStack   error stack object
+     */
+    protected $_errorStack;
+    /**
+     * @var Doctrine_Record_Filter          the filter object
+     */
+    protected $_filter;
+    /**
+     * @var array $_references              an array containing all the references
+     */
+    protected $_references     = array();
+    /**
+     * @var integer $index                  this index is used for creating object identifiers
+     */
+    private static $_index = 1;
+    /**
+     * @var integer $oid                    object identifier, each Record object has a unique object identifier
+     */
+    private $_oid;
+
+    /**
+     * constructor
+     * @param Doctrine_Table|null $table       a Doctrine_Table object or null,
+     *                                         if null the table object is retrieved from current connection
+     *
+     * @param boolean $isNewEntry              whether or not this record is transient
+     *
+     * @throws Doctrine_Connection_Exception   if object is created using the new operator and there are no
+     *                                         open connections
+     * @throws Doctrine_Record_Exception       if the cleanData operation fails somehow
+     */
+    public function __construct($table = null, $isNewEntry = false)
+    {
+        if (isset($table) && $table instanceof Doctrine_Table) {
+            $this->_table = $table;
+            $exists = ( ! $isNewEntry);
+        } else {
+            $class  = get_class($this);
+            // get the table of this class
+            $this->_table = Doctrine_Manager::getInstance()
+                            ->getTable(get_class($this));
+            $exists = false;
+        }
+
+        // initialize the filter object
+        $this->_filter = new Doctrine_Record_Filter($this);
+
+        // Check if the current connection has the records table in its registry
+        // If not this record is only used for creating table definition and setting up
+        // relations.
+
+        if ($this->_table->getConnection()->hasTable($this->_table->getComponentName())) {
+            $this->_oid = self::$_index;
+
+            self::$_index++;
+
+            $keys = $this->_table->getPrimaryKeys();
+
+            // get the data array
+            $this->_data = $this->_table->getData();
+
+            // get the column count
+            $count = count($this->_data);
+
+            $this->_values = $this->cleanData($this->_data);
+
+            $this->prepareIdentifiers($exists);
+
+            if ( ! $exists) {
+                if ($count > 0) {
+                    $this->_state = Doctrine_Record::STATE_TDIRTY;
+                } else {
+                    $this->_state = Doctrine_Record::STATE_TCLEAN;
+                }
+
+                // set the default values for this record
+                $this->assignDefaultValues();
+            } else {
+                $this->_state      = Doctrine_Record::STATE_CLEAN;
+
+                if ($count < $this->_table->getColumnCount()) {
+                    $this->_state  = Doctrine_Record::STATE_PROXY;
+                }
+            }
+
+            $this->_errorStack = new Doctrine_Validator_ErrorStack();
+
+            $repository = $this->_table->getRepository();
+            $repository->add($this);
+            
+            $this->construct();
+        }
+        
+    }
+    /**
+     * _index
+     *
+     * @return integer
+     */
+    public static function _index()
+    {
+        return self::$_index;
+    }
+    /**
+     * setUp
+     * this method is used for setting up relations and attributes
+     * it should be implemented by child classes
+     *
+     * @return void
+     */
+    public function setUp()
+    { }
+    /**
+     * construct
+     * Empty tempalte method to provide concrete Record classes with the possibility
+     * to hook into the constructor procedure
+     *
+     * @return void
+     */
+    public function construct()
+    { }
+    /**
+     * getOid
+     * returns the object identifier
+     *
+     * @return integer
+     */
+    public function getOid()
+    {
+        return $this->_oid;
+    }
+    /**
+     * isValid
+     *
+     * @return boolean                          whether or not this record passes all column validations
+     */
+    public function isValid()
+    {
+        if ( ! $this->_table->getAttribute(Doctrine::ATTR_VLD)) {
+            return true;
+        }
+        // Clear the stack from any previous errors.
+        $this->_errorStack->clear();
+
+        // Run validation process
+        $validator = new Doctrine_Validator();
+        $validator->validateRecord($this);
+        $this->validate();
+        if ($this->_state == self::STATE_TDIRTY || $this->_state == self::STATE_TCLEAN) {
+            $this->validateOnInsert();
+        } else {
+            $this->validateOnUpdate();
+        }
+
+        return $this->_errorStack->count() == 0 ? true : false;
+    }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the validation procedure, doing any custom / specialized
+     * validations that are neccessary.
+     */
+    protected function validate()
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the validation procedure only when the record is going to be
+     * updated.
+     */
+    protected function validateOnUpdate()
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the validation procedure only when the record is going to be
+     * inserted into the data store the first time.
+     */
+    protected function validateOnInsert()
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the serializing procedure.
+     */
+    public function preSerialize($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the serializing procedure.
+     */
+    public function postSerialize($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the serializing procedure.
+     */
+    public function preUnserialize($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the serializing procedure.
+     */
+    public function postUnserialize($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure.
+     */
+    public function preSave($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure.
+     */
+    public function postSave($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the deletion procedure.
+     */
+    public function preDelete($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the deletion procedure.
+     */
+    public function postDelete($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure only when the record is going to be
+     * updated.
+     */
+    public function preUpdate($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure only when the record is going to be
+     * updated.
+     */
+    public function postUpdate($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure only when the record is going to be
+     * inserted into the data store the first time.
+     */
+    public function preInsert($event)
+    { }
+    /**
+     * Empty template method to provide concrete Record classes with the possibility
+     * to hook into the saving procedure only when the record is going to be
+     * inserted into the data store the first time.
+     */
+    public function postInsert($event)
+    { }
+    /**
+     * getErrorStack
+     *
+     * @return Doctrine_Validator_ErrorStack    returns the errorStack associated with this record
+     */
+    public function getErrorStack()
+    {
+        return $this->_errorStack;
+    }
+    /**
+     * errorStack
+     * assigns / returns record errorStack
+     *
+     * @param Doctrine_Validator_ErrorStack          errorStack to be assigned for this record
+     * @return void|Doctrine_Validator_ErrorStack    returns the errorStack associated with this record
+     */
+    public function errorStack($stack = null)
+    {
+        if($stack !== null) {
+            if( ! ($stack instanceof Doctrine_Validator_ErrorStack)) {
+               throw new Doctrine_Record_Exception('Argument should be an instance of Doctrine_Validator_ErrorStack.');
+            }
+            $this->_errorStack = $stack;
+        } else {
+            return $this->_errorStack;
+        }
+    }
+    /**
+     * setDefaultValues
+     * sets the default values for records internal data
+     *
+     * @param boolean $overwrite                whether or not to overwrite the already set values
+     * @return boolean
+     */
+    public function assignDefaultValues($overwrite = false)
+    {
+        if ( ! $this->_table->hasDefaultValues()) {
+            return false;
+        }
+        foreach ($this->_data as $column => $value) {
+            $default = $this->_table->getDefaultValueOf($column);
+
+            if ($default === null) {
+                $default = self::$_null;
+            }
+
+            if ($value === self::$_null || $overwrite) {
+                $this->_data[$column] = $default;
+                $this->_modified[]    = $column;
+                $this->_state = Doctrine_Record::STATE_TDIRTY;
+            }
+        }
+    }
+    /**
+     * cleanData
+     *
+     * @param array $data       data array to be cleaned
+     * @return integer
+     */
+    public function cleanData(&$data)
+    {
+    	$tmp = $data;
+        $data = array();
+
+        foreach ($this->getTable()->getColumnNames() as $name) {
+            if ( ! isset($tmp[$name])) {
+                $data[$name] = self::$_null;
+            } else {
+                $data[$name] = $tmp[$name];
+            }
+            unset($tmp[$name]);
+        }
+
+        return $tmp;
+    }
+    /**
+     * hydrate
+     * hydrates this object from given array
+     *
+     * @param array $data
+     * @return boolean
+     */
+    public function hydrate(array $data)
+    {
+        $this->_values = $this->cleanData($data);
+        $this->_data   = $data;
+
+        $this->prepareIdentifiers(true);
+    }
+    /**
+     * prepareIdentifiers
+     * prepares identifiers for later use
+     *
+     * @param boolean $exists               whether or not this record exists in persistent data store
+     * @return void
+     */
+    private function prepareIdentifiers($exists = true)
+    {
+        switch ($this->_table->getIdentifierType()) {
+            case Doctrine::IDENTIFIER_AUTOINC:
+            case Doctrine::IDENTIFIER_SEQUENCE:
+            case Doctrine::IDENTIFIER_NATURAL:
+                $name = $this->_table->getIdentifier();
+
+                if ($exists) {
+                    if (isset($this->_data[$name]) && $this->_data[$name] !== self::$_null) {
+                        $this->_id[$name] = $this->_data[$name];
+                    }
+                }
+                break;
+            case Doctrine::IDENTIFIER_COMPOSITE:
+                $names = $this->_table->getIdentifier();
+
+                foreach ($names as $name) {
+                    if ($this->_data[$name] === self::$_null) {
+                        $this->_id[$name] = null;
+                    } else {
+                        $this->_id[$name] = $this->_data[$name];
+                    }
+                }
+                break;
+        }
+    }
+    /**
+     * serialize
+     * this method is automatically called when this Doctrine_Record is serialized
+     *
+     * @return array
+     */
+    public function serialize()
+    {
+    	$event = new Doctrine_Event($this, Doctrine_Event::RECORD_SERIALIZE);
+
+        $this->preSerialize($event);
+
+        $vars = get_object_vars($this);
+
+        unset($vars['_references']);
+        unset($vars['_table']);
+        unset($vars['_errorStack']);
+        unset($vars['_filter']);
+        unset($vars['_modified']);
+        unset($vars['_node']);
+
+        $name = $this->_table->getIdentifier();
+        $this->_data = array_merge($this->_data, $this->_id);
+
+        foreach ($this->_data as $k => $v) {
+            if ($v instanceof Doctrine_Record && $this->_table->getTypeOf($k) != 'object') {
+                unset($vars['_data'][$k]);
+            } elseif ($v === self::$_null) {
+                unset($vars['_data'][$k]);
+            } else {
+                switch ($this->_table->getTypeOf($k)) {
+                    case 'array':
+                    case 'object':
+                        $vars['_data'][$k] = serialize($vars['_data'][$k]);
+                        break;
+                    case 'gzip':
+                        $vars['_data'][$k] = gzcompress($vars['_data'][$k]);
+                        break;
+                    case 'enum':
+                        $vars['_data'][$k] = $this->_table->enumIndex($k, $vars['_data'][$k]);
+                        break;
+                }
+            }
+        }
+
+        $str = serialize($vars);
+        
+        $this->postSerialize($event);
+
+        return $str;
+    }
+    /**
+     * unseralize
+     * this method is automatically called everytime a Doctrine_Record object is unserialized
+     *
+     * @param string $serialized                Doctrine_Record as serialized string
+     * @throws Doctrine_Record_Exception        if the cleanData operation fails somehow
+     * @return void
+     */
+    public function unserialize($serialized)
+    {
+    	$event = new Doctrine_Event($this, Doctrine_Event::RECORD_UNSERIALIZE);
+
+    	$this->preUnserialize($event);
+
+        $manager    = Doctrine_Manager::getInstance();
+        $connection = $manager->getConnectionForComponent(get_class($this));
+
+        $this->_oid = self::$_index;
+        self::$_index++;
+
+        $this->_table = $connection->getTable(get_class($this));
+
+        $array = unserialize($serialized);
+
+        foreach($array as $k => $v) {
+            $this->$k = $v;
+        }
+
+        foreach ($this->_data as $k => $v) {
+
+            switch ($this->_table->getTypeOf($k)) {
+                case 'array':
+                case 'object':
+                    $this->_data[$k] = unserialize($this->_data[$k]);
+                    break;
+                case 'gzip':
+                   $this->_data[$k] = gzuncompress($this->_data[$k]);
+                    break;
+                case 'enum':
+                    $this->_data[$k] = $this->_table->enumValue($k, $this->_data[$k]);
+                    break;
+                
+            }
+        }
+        
+        $this->_table->getRepository()->add($this);
+        $this->_filter = new Doctrine_Record_Filter($this);
+
+        $this->cleanData($this->_data);
+
+        $this->prepareIdentifiers($this->exists());
+        
+        $this->postUnserialize($event);
+    }
+    /**
+     * state
+     * returns / assigns the state of this record
+     *
+     * @param integer|string $state                 if set, this method tries to set the record state to $state
+     * @see Doctrine_Record::STATE_* constants
+     *
+     * @throws Doctrine_Record_State_Exception      if trying to set an unknown state
+     * @return null|integer
+     */
+    public function state($state = null)
+    {
+        if ($state == null) {
+            return $this->_state;
+        }
+        $err = false;
+        if (is_integer($state)) {
+            if ($state >= 1 && $state <= 6) {
+                $this->_state = $state;
+            } else {
+                $err = true;
+            }
+        } elseif (is_string($state)) {
+            $upper = strtoupper($state);
+            
+            $const = 'Doctrine_Record::STATE_' . $upper;
+            if (defined($const)) {
+                $this->_state = constant($const);  
+            } else {
+                $err = true;
+            }
+        }
+
+        if ($this->_state === Doctrine_Record::STATE_TCLEAN ||
+            $this->_state === Doctrine_Record::STATE_CLEAN) {
+
+            $this->_modified = array();
+        }
+
+        if ($err) {
+            throw new Doctrine_Record_State_Exception('Unknown record state ' . $state);
+        }
+    }
+    /**
+     * refresh
+     * refresh internal data from the database
+     *
+     * @throws Doctrine_Record_Exception        When the refresh operation fails (when the database row
+     *                                          this record represents does not exist anymore)
+     * @return boolean
+     */
+    public function refresh()
+    {
+        $id = $this->identifier();
+        if ( ! is_array($id)) {
+            $id = array($id);
+        }
+        if (empty($id)) {
+            return false;
+        }
+        $id = array_values($id);
+
+        $records = Doctrine_Query::create()
+                   ->from($this->_table->getComponentName())
+                   ->where(implode(' = ? AND ', $this->_table->getPrimaryKeys()) . ' = ?')
+                   ->execute($id);
+
+
+        if (count($records) === 0) {
+            throw new Doctrine_Record_Exception('Failed to refresh. Record does not exist.');
+        }
+
+        $this->_modified = array();
+
+        $this->prepareIdentifiers();
+
+        $this->_state    = Doctrine_Record::STATE_CLEAN;
+
+        return $this;
+    }
+    
+    /**
+     * refresh
+     * refres data of related objects from the database
+     *
+     * @param string $name                      name of a related component.
+     *                                          if set, this method only refreshes the specified related component
+     */
+    public function refreshRelated($name = null)
+    {
+        if (is_null($name)) {
+            foreach ($this->_table->getRelations() as $rel) {
+            	$this->_references[$rel->getAlias()] = $rel->fetchRelatedFor($this);
+            }
+        } else {
+            $rel = $this->_table->getRelation($name);
+            $this->_references[$name] = $rel->fetchRelatedFor($this);
+        }
+    }
+    
+    /**
+     * getTable
+     * returns the table object for this record
+     *
+     * @return object Doctrine_Table        a Doctrine_Table object
+     */
+    public function getTable()
+    {
+        return $this->_table;
+    }
+    /**
+     * getData
+     * return all the internal data
+     *
+     * @return array                        an array containing all the properties
+     */
+    public function getData()
+    {
+        return $this->_data;
+    }
+    /**
+     * rawGet
+     * returns the value of a property, if the property is not yet loaded
+     * this method does NOT load it
+     *
+     * @param $name                         name of the property
+     * @throws Doctrine_Record_Exception    if trying to get an unknown property
+     * @return mixed
+     */
+
+    public function rawGet($name)
+    {
+        if ( ! isset($this->_data[$name])) {
+            throw new Doctrine_Record_Exception('Unknown property '. $name);
+        }
+        if ($this->_data[$name] === self::$_null)
+            return null;
+
+        return $this->_data[$name];
+    }
+
+    /**
+     * load
+     * loads all the unitialized properties from the database
+     *
+     * @return boolean
+     */
+    public function load()
+    {
+        // only load the data from database if the Doctrine_Record is in proxy state
+        if ($this->_state == Doctrine_Record::STATE_PROXY) {
+            $this->refresh();
+
+            $this->_state = Doctrine_Record::STATE_CLEAN;
+
+            return true;
+        }
+        return false;
+    }
+    /**
+     * get
+     * returns a value of a property or a related component
+     *
+     * @param mixed $name                       name of the property or related component
+     * @param boolean $load                     whether or not to invoke the loading procedure
+     * @throws Doctrine_Record_Exception        if trying to get a value of unknown property / related component
+     * @return mixed
+     */
+    public function get($name, $load = true)
+    {
+        $value = self::$_null;
+        $lower = strtolower($name);
+
+        $lower = $this->_table->getColumnName($lower);
+
+        if (isset($this->_data[$lower])) {
+            // check if the property is null (= it is the Doctrine_Null object located in self::$_null)
+            if ($this->_data[$lower] === self::$_null && $load) {
+                $this->load();
+            }
+
+            if ($this->_data[$lower] === self::$_null) {
+                $value = null;
+            } else {
+                $value = $this->_data[$lower];
+            }
+            return $value;
+        }
+
+        if (isset($this->_id[$lower])) {
+            return $this->_id[$lower];
+        }
+        if ($name === $this->_table->getIdentifier()) {
+            return null;
+        }
+        if (isset($this->_values[$lower])) {
+            return $this->_values[$lower];
+        }
+
+        try {
+
+            if ( ! isset($this->_references[$name]) && $load) {
+
+                $rel = $this->_table->getRelation($name);
+
+                $this->_references[$name] = $rel->fetchRelatedFor($this);
+            }
+
+        } catch(Doctrine_Table_Exception $e) { 
+            throw new Doctrine_Record_Exception("Unknown property / related component '$name'.");
+        }
+
+        return $this->_references[$name];
+    }
+    /**
+     * mapValue
+     * This simple method is used for mapping values to $values property.
+     * Usually this method is used internally by Doctrine for the mapping of
+     * aggregate values.
+     *
+     * @param string $name                  the name of the mapped value
+     * @param mixed $value                  mixed value to be mapped
+     * @return void
+     */
+    public function mapValue($name, $value)
+    {
+        $name = strtolower($name);
+        $this->_values[$name] = $value;
+    }
+    /**
+     * set
+     * method for altering properties and Doctrine_Record references
+     * if the load parameter is set to false this method will not try to load uninitialized record data
+     *
+     * @param mixed $name                   name of the property or reference
+     * @param mixed $value                  value of the property or reference
+     * @param boolean $load                 whether or not to refresh / load the uninitialized record data
+     *
+     * @throws Doctrine_Record_Exception    if trying to set a value for unknown property / related component
+     * @throws Doctrine_Record_Exception    if trying to set a value of wrong type for related component
+     *
+     * @return Doctrine_Record
+     */
+    public function set($name, $value, $load = true)
+    {
+        $lower = strtolower($name);
+
+        $lower = $this->_table->getColumnName($lower);
+
+        if (isset($this->_data[$lower])) {
+            if ($value instanceof Doctrine_Record) {
+                $type = $this->_table->getTypeOf($name);
+
+                $id = $value->getIncremented();
+
+                if ($id !== null && $type !== 'object') {
+                    $value = $id;
+                }
+            }
+
+            if ($load) {
+                $old = $this->get($lower, $load);
+            } else {
+                $old = $this->_data[$lower];
+            }
+
+            if ($old !== $value) {
+                if ($value === null) {
+                    $value = self::$_null;
+                }
+
+                $this->_data[$lower] = $value;
+                $this->_modified[]   = $lower;
+                switch ($this->_state) {
+                    case Doctrine_Record::STATE_CLEAN:
+                        $this->_state = Doctrine_Record::STATE_DIRTY;
+                        break;
+                    case Doctrine_Record::STATE_TCLEAN:
+                        $this->_state = Doctrine_Record::STATE_TDIRTY;
+                        break;
+                }
+            }
+        } else {
+            try {
+                $this->coreSetRelated($name, $value);
+            } catch(Doctrine_Table_Exception $e) {
+                throw new Doctrine_Record_Exception("Unknown property / related component '$name'.");
+            }
+        }
+    }
+
+    public function coreSetRelated($name, $value)
+    {
+        $rel = $this->_table->getRelation($name);
+
+        // one-to-many or one-to-one relation
+        if ($rel instanceof Doctrine_Relation_ForeignKey ||
+            $rel instanceof Doctrine_Relation_LocalKey) {
+            if ( ! $rel->isOneToOne()) {
+                // one-to-many relation found
+                if ( ! ($value instanceof Doctrine_Collection)) {
+                    throw new Doctrine_Record_Exception("Couldn't call Doctrine::set(), second argument should be an instance of Doctrine_Collection when setting one-to-many references.");
+                }
+                if (isset($this->_references[$name])) {
+                    $this->_references[$name]->setData($value->getData());
+                    return $this;
+                }
+            } else {
+                if ($value !== self::$_null) {
+                    // one-to-one relation found
+                    if ( ! ($value instanceof Doctrine_Record)) {
+                        throw new Doctrine_Record_Exception("Couldn't call Doctrine::set(), second argument should be an instance of Doctrine_Record or Doctrine_Null when setting one-to-one references.");
+                    }
+                    if ($rel instanceof Doctrine_Relation_LocalKey) {
+                        $foreign = $rel->getForeign();
+                        if (!empty($foreign) && $foreign != $value->getTable()->getIdentifier())
+                          $this->set($rel->getLocal(), $value->rawGet($foreign), false);
+                        else
+                          $this->set($rel->getLocal(), $value, false);                          
+                    } else {
+                        $value->set($rel->getForeign(), $this, false);
+                    }                            
+                }
+            }
+
+        } elseif ($rel instanceof Doctrine_Relation_Association) {
+            // join table relation found
+            if ( ! ($value instanceof Doctrine_Collection)) {
+                throw new Doctrine_Record_Exception("Couldn't call Doctrine::set(), second argument should be an instance of Doctrine_Collection when setting many-to-many references.");
+            }
+        }
+
+        $this->_references[$name] = $value;
+    }
+    /**
+     * contains
+     *
+     * @param string $name
+     * @return boolean
+     */
+    public function contains($name)
+    {
+        $lower = strtolower($name);
+
+        if (isset($this->_data[$lower])) {
+            return true;
+        }
+        if (isset($this->_id[$lower])) {
+            return true;
+        }
+        if (isset($this->_values[$lower])) {
+            return true;                                  	
+        }
+        if (isset($this->_references[$name]) && 
+            $this->_references[$name] !== self::$_null) {
+
+            return true;
+        }
+        return false;
+    }
+    /**
+     * @param string $name
+     * @return void
+     */
+    public function __unset($name)
+    {
+        if (isset($this->_data[$name])) {
+            $this->_data[$name] = array();
+        }
+        // todo: what to do with references ?
+    }
+    /**
+     * applies the changes made to this object into database
+     * this method is smart enough to know if any changes are made
+     * and whether to use INSERT or UPDATE statement
+     *
+     * this method also saves the related components
+     *
+     * @param Doctrine_Connection $conn                 optional connection parameter
+     * @return void
+     */
+    public function save(Doctrine_Connection $conn = null)
+    {
+        if ($conn === null) {
+            $conn = $this->_table->getConnection();
+        }
+        $conn->unitOfWork->saveGraph($this);
+    }
+    /**
+     * Tries to save the object and all its related components.
+     * In contrast to Doctrine_Record::save(), this method does not
+     * throw an exception when validation fails but returns TRUE on
+     * success or FALSE on failure.
+     * 
+     * @param Doctrine_Connection $conn                 optional connection parameter
+     * @return TRUE if the record was saved sucessfully without errors, FALSE otherwise.
+     */
+    public function trySave(Doctrine_Connection $conn = null) {
+        try {
+            $this->save($conn);
+            return true;
+        } catch (Doctrine_Validator_Exception $ignored) {
+            return false;
+        }
+    }
+    /**
+     * replace
+     * Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT
+     * query, except that if there is already a row in the table with the same
+     * key field values, the REPLACE query just updates its values instead of
+     * inserting a new row.
+     *
+     * The REPLACE type of query does not make part of the SQL standards. Since
+     * practically only MySQL and SQLIte implement it natively, this type of
+     * query isemulated through this method for other DBMS using standard types
+     * of queries inside a transaction to assure the atomicity of the operation.
+     *
+     * @param Doctrine_Connection $conn             optional connection parameter
+     * @throws Doctrine_Connection_Exception        if some of the key values was null
+     * @throws Doctrine_Connection_Exception        if there were no key fields
+     * @throws PDOException                         if something fails at PDO level
+     * @return integer                              number of rows affected
+     */
+    public function replace(Doctrine_Connection $conn = null)
+    {
+        if ($conn === null) {
+            $conn = $this->_table->getConnection();
+        }
+
+        return $conn->replace($this->_table->getTableName(), $this->getPrepared(), $this->id);
+    }
+    /**
+     * returns an array of modified fields and associated values
+     * @return array
+     */
+    public function getModified()
+    {
+        $a = array();
+
+        foreach ($this->_modified as $k => $v) {
+            $a[$v] = $this->_data[$v];
+        }
+        return $a;
+    }
+    /**
+     * getPrepared
+     *
+     * returns an array of modified fields and values with data preparation
+     * adds column aggregation inheritance and converts Records into primary key values
+     *
+     * @param array $array
+     * @return array
+     */
+    public function getPrepared(array $array = array()) 
+    {
+        $a = array();
+
+        if (empty($array)) {
+            $array = $this->_modified;
+        }
+
+        foreach ($array as $k => $v) {
+            $type = $this->_table->getTypeOf($v);
+
+            if ($this->_data[$v] === self::$_null) {
+                $a[$v] = null;
+                continue;
+            }
+
+            switch ($type) {
+                case 'array':
+                case 'object':
+                    $a[$v] = serialize($this->_data[$v]);
+                    break;
+                case 'gzip':
+                    $a[$v] = gzcompress($this->_data[$v],5);
+                    break;
+                case 'boolean':
+                    $a[$v] = $this->getTable()->getConnection()->convertBooleans($this->_data[$v]);
+                break;
+                case 'enum':
+                    $a[$v] = $this->_table->enumIndex($v, $this->_data[$v]);
+                    break;
+                default:
+                    if ($this->_data[$v] instanceof Doctrine_Record) {
+                        $this->_data[$v] = $this->_data[$v]->getIncremented();
+                    }
+                    /** TODO:
+                    if ($this->_data[$v] === null) {
+                        throw new Doctrine_Record_Exception('Unexpected null value.');
+                    }
+                    */
+
+                    $a[$v] = $this->_data[$v];
+            }
+        }
+        $map = $this->_table->inheritanceMap;
+        foreach ($map as $k => $v) {
+            $old = $this->get($k, false);
+
+            if ((string) $old !== (string) $v || $old === null) {
+                $a[$k] = $v;
+                $this->_data[$k] = $v;
+            }
+        }
+
+        return $a;
+    }
+    /**
+     * count
+     * this class implements countable interface
+     *
+     * @return integer          the number of columns in this record
+     */
+    public function count()
+    {
+        return count($this->_data);
+    }
+    /**
+     * alias for count()
+     *
+     * @return integer          the number of columns in this record
+     */
+    public function columnCount()
+    {
+        return $this->count();
+    }
+    /**
+     * toArray
+     * returns the record as an array
+     *
+     * @param boolean $deep - Return also the relations
+     * @return array
+     */
+    public function toArray($deep = false)
+    {
+        $a = array();
+
+        foreach ($this as $column => $value) {
+            if ($value === self::$_null) {
+                $value = null;
+            }
+            $a[$column] = $value;
+        }
+        if ($this->_table->getIdentifierType() ==  Doctrine::IDENTIFIER_AUTOINC) {
+            $i      = $this->_table->getIdentifier();
+            $a[$i]  = $this->getIncremented();
+        }
+        if ($deep) {
+            foreach ($this->_references as $key => $relation) {
+                $a[$key] = $relation->toArray($deep);
+            }
+        }
+        return array_merge($a, $this->_values);
+    }
+    /**
+     * exists
+     * returns true if this record is persistent, otherwise false
+     *
+     * @return boolean
+     */
+    public function exists()
+    {
+        return ($this->_state !== Doctrine_Record::STATE_TCLEAN &&
+                $this->_state !== Doctrine_Record::STATE_TDIRTY);
+    }
+    /**
+     * isModified
+     * returns true if this record was modified, otherwise false
+     *
+     * @return boolean
+     */
+    public function isModified()
+    {
+        return ($this->_state === Doctrine_Record::STATE_DIRTY ||
+                $this->_state === Doctrine_Record::STATE_TDIRTY);
+    }
+    /**
+     * method for checking existence of properties and Doctrine_Record references
+     * @param mixed $name               name of the property or reference
+     * @return boolean
+     */
+    public function hasRelation($name)
+    {
+        if (isset($this->_data[$name]) || isset($this->_id[$name])) {
+            return true;
+        }
+        return $this->_table->hasRelation($name);
+    }
+    /**
+     * getIterator
+     * @return Doctrine_Record_Iterator     a Doctrine_Record_Iterator that iterates through the data
+     */
+    public function getIterator()
+    {
+        return new Doctrine_Record_Iterator($this);
+    }
+    /**
+     * deletes this data access object and all the related composites
+     * this operation is isolated by a transaction
+     *
+     * this event can be listened by the onPreDelete and onDelete listeners
+     *
+     * @return boolean      true on success, false on failure
+     */
+    public function delete(Doctrine_Connection $conn = null)
+    {
+        if ($conn == null) {
+            $conn = $this->_table->getConnection();
+        }
+        return $conn->unitOfWork->delete($this);
+    }
+    /**
+     * copy
+     * returns a copy of this object
+     *
+     * @return Doctrine_Record
+     */
+    public function copy()
+    {
+    	$data = $this->_data;
+
+        if ($this->_table->getIdentifierType() === Doctrine::IDENTIFIER_AUTOINC) {
+            $id = $this->_table->getIdentifier();
+
+            unset($data[$id]);
+        }
+
+        $ret = $this->_table->create($data);
+        $modified = array();
+
+        foreach ($data as $key => $val) {
+            if ( ! ($val instanceof Doctrine_Null)) {
+                $ret->_modified[] = $key;
+            }
+        }
+        
+
+        return $ret;
+    }
+    /**
+     * copyDeep
+     * returns a copy of this object and all its related objects
+     *
+     * @return Doctrine_Record
+     */
+    public function copyDeep(){
+        $copy = $this->copy();
+
+        foreach ($this->_references as $key => $value) {
+            if ($value instanceof Doctrine_Collection) {
+                foreach ($value as $record) {
+                    $copy->{$key}[] = $record->copyDeep();
+                }
+            } else {
+                $copy->set($key, $value->copyDeep());
+            }
+        }
+        return $copy;
+    }
+    
+    /**
+     * assignIdentifier
+     *
+     * @param integer $id
+     * @return void
+     */
+    public function assignIdentifier($id = false)
+    {
+        if ($id === false) {
+            $this->_id       = array();
+            $this->_data     = $this->_filter->cleanData($this->_data);
+            $this->_state    = Doctrine_Record::STATE_TCLEAN;
+            $this->_modified = array();
+        } elseif ($id === true) {
+            $this->prepareIdentifiers(true);
+            $this->_state    = Doctrine_Record::STATE_CLEAN;
+            $this->_modified = array();
+        } else {
+            $name             = $this->_table->getIdentifier();   
+            $this->_id[$name] = $id;
+            $this->_data[$name] = $id;
+            $this->_state     = Doctrine_Record::STATE_CLEAN;
+            $this->_modified  = array();
+        }
+    }
+    /**
+     * returns the primary keys of this object
+     *
+     * @return array
+     */
+    public function identifier()
+    {
+        return $this->_id;
+    }
+    /**
+     * returns the value of autoincremented primary key of this object (if any)
+     *
+     * @return integer
+     */
+    final public function getIncremented()
+    {
+        $id = current($this->_id);
+        if ($id === false) {
+            return null;
+        }
+
+        return $id;
+    }
+    /**
+     * getLast
+     * this method is used internally be Doctrine_Query
+     * it is needed to provide compatibility between
+     * records and collections
+     *
+     * @return Doctrine_Record
+     */
+    public function getLast()
+    {
+        return $this;
+    }
+    /**
+     * hasRefence
+     * @param string $name
+     * @return boolean
+     */
+    public function hasReference($name)
+    {
+        return isset($this->_references[$name]);
+    }
+    /**
+     * obtainReference
+     *
+     * @param string $name
+     * @throws Doctrine_Record_Exception        if trying to get an unknown related component
+     */
+    public function obtainReference($name)
+    {
+        if (isset($this->_references[$name])) {
+            return $this->_references[$name];
+        }
+        throw new Doctrine_Record_Exception("Unknown reference $name");
+    }
+    /**
+     * getReferences
+     * @return array    all references
+     */
+    public function getReferences()
+    {
+        return $this->_references;
+    }
+    /**
+     * setRelated
+     *
+     * @param string $alias
+     * @param Doctrine_Access $coll
+     */
+    final public function setRelated($alias, Doctrine_Access $coll)
+    {
+        $this->_references[$alias] = $coll;
+    }
+    /**
+     * loadReference
+     * loads a related component
+     *
+     * @throws Doctrine_Table_Exception             if trying to load an unknown related component
+     * @param string $name
+     * @return void
+     */
+    public function loadReference($name)
+    {
+        $rel = $this->_table->getRelation($name);
+        $this->_references[$name] = $rel->fetchRelatedFor($this);
+    }
+
+    /**
+     * merge
+     * merges this record with an array of values
+     *
+     * @param array $values
+     * @return void
+     */
+    public function merge(array $values)
+    {
+        foreach ($this->_table->getColumnNames() as $value) {
+            try {
+                if (isset($values[$value])) {
+                    $this->set($value, $values[$value]);
+                }
+            } catch(Exception $e) {
+                // silence all exceptions
+            }
+        }
+    }
+    /**
+     * call
+     *
+     * @param string|array $callback    valid callback
+     * @param string $column            column name
+     * @param mixed arg1 ... argN       optional callback arguments
+     * @return Doctrine_Record
+     */
+    public function call($callback, $column)
+    {
+        $args = func_get_args();
+        array_shift($args);
+
+        if (isset($args[0])) {
+            $column = $args[0];
+            $args[0] = $this->get($column);
+
+            $newvalue = call_user_func_array($callback, $args);
+
+            $this->_data[$column] = $newvalue;
+        }
+        return $this;
+    }
+    /**
+     * getter for node assciated with this record
+     *
+     * @return mixed if tree returns Doctrine_Node otherwise returns false
+     */    
+    public function getNode() 
+    {
+        if ( ! $this->_table->isTree()) {
+            return false;
+        }
+
+        if ( ! isset($this->_node)) {
+            $this->_node = Doctrine_Node::factory($this,
+                                              $this->getTable()->getOption('treeImpl'),
+                                              $this->getTable()->getOption('treeOptions')
+                                              );
+        }
+        
+        return $this->_node;
+    }
+    /**
+     * revert
+     * reverts this record to given version, this method only works if versioning plugin
+     * is enabled
+     *
+     * @throws Doctrine_Record_Exception    if given version does not exist
+     * @param integer $version      an integer > 1
+     * @return Doctrine_Record      this object
+     */
+    public function revert($version)
+    {
+        $data = $this->_table
+                ->getTemplate('Doctrine_Template_Versionable')
+                ->getAuditLog()
+                ->getVersion($this, $version);
+
+        if ( ! isset($data[0])) {
+            throw new Doctrine_Record_Exception('Version ' . $version . ' does not exist!');
+        }
+
+        $this->_data = $data[0];
+
+        return $this;
+    }
+    /**
+     * removeLinks
+     * removes links from this record to given records
+     *
+     * @param string $alias     related component alias
+     * @param array $ids        the identifiers of the related records
+     * @return Doctrine_Record  this object
+     */
+    public function unlink($alias, $ids)
+    {
+        $ids = (array) $ids;
+        
+        $q = new Doctrine_Query();
+
+        $rel = $this->getTable()->getRelation($alias);
+
+        if ($rel instanceof Doctrine_Relation_Association) {
+            $q->delete()
+              ->from($rel->getAssociationTable()->getComponentName())
+              ->where($rel->getLocal() . ' = ?', array_values($this->identifier()))
+              ->whereIn($rel->getForeign(), $ids);
+
+            $q->execute();
+
+
+        } elseif ($rel instanceof Doctrine_Relation_ForeignKey) {
+            $q->update($rel->getTable()->getComponentName())
+              ->set($rel->getForeign(), '?', array(null))
+              ->addWhere($rel->getForeign() . ' = ?', array_values($this->identifier()))
+              ->whereIn($rel->getTable()->getIdentifier(), $ids);
+
+            $q->execute();
+        }
+        if (isset($this->_references[$alias])) {
+            foreach ($this->_references[$alias] as $k => $record) {
+                if (in_array(current($record->identifier()), $ids)) {
+                    $this->_references[$alias]->remove($k);
+                }
+            }
+            $this->_references[$alias]->takeSnapshot();
+        }
+        return $this;
+    }
+    public function __call($method, $args) 
+    {
+        foreach ($this->_table->getTemplates() as $template) {
+            if (method_exists($template, $method)) {
+                return call_user_func_array(array($template, $method), $args);
+            }
+        }
+        
+        throw new Doctrine_Record_Exception('Unknown method ' . $method);
+    }
+    /**
+     * used to delete node from tree - MUST BE USE TO DELETE RECORD IF TABLE ACTS AS TREE
+     *
+     */    
+    public function deleteNode() {
+        $this->getNode()->delete();
+    }
+    public function toString()
+    {
+        return Doctrine::dump(get_object_vars($this));
+    }
+    /**
+     * returns a string representation of this object
+     */
+    public function __toString()
+    {
+        return (string) $this->_oid;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Abstract.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Abstract.php
new file mode 100644
index 0000000000000000000000000000000000000000..59b1232fab625201e44c80d71bf21f62ebf52b34
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Abstract.php
@@ -0,0 +1,314 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Access');
+/**
+ * Doctrine_Record_Abstract
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+abstract class Doctrine_Record_Abstract extends Doctrine_Access
+{
+    /**
+     * @param Doctrine_Table $_table     reference to associated Doctrine_Table instance
+     */
+    protected $_table;
+    /**
+     * addListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return Doctrine_Record
+     */
+    public function addListener($listener, $name = null)
+    {
+        $this->_table->addRecordListener($listener, $name = null);
+
+        return $this;
+    }
+    /**
+     * getListener
+     *
+     * @return Doctrine_EventListener_Interface|Doctrine_Overloadable
+     */
+    public function getListener()
+    {
+        return $this->_table->getRecordListener();
+    }
+    /**
+     * setListener
+     *
+     * @param Doctrine_EventListener_Interface|Doctrine_Overloadable $listener
+     * @return Doctrine_Record
+     */
+    public function setListener($listener)
+    {
+        $this->_table->setRecordListener($listener);
+
+        return $this;
+    }
+    /**
+     * index
+     * defines or retrieves an index
+     * if the second parameter is set this method defines an index
+     * if not this method retrieves index named $name
+     *
+     * @param string $name              the name of the index
+     * @param array $definition         the definition array
+     * @return mixed
+     */
+    public function index($name, array $definition = array())
+    {
+        if ( ! $definition) {
+            return $this->_table->getIndex($name);
+        } else {
+            return $this->_table->addIndex($name, $definition);
+        }
+    }
+    public function setAttribute($attr, $value)
+    {
+        $this->_table->setAttribute($attr, $value);
+    }
+    public function setTableName($tableName)
+    {
+        $this->_table->setOption('tableName', $tableName);
+    }
+    public function setInheritanceMap($map)
+    {
+        $this->_table->setOption('inheritanceMap', $map);
+    }
+
+    public function setSubclasses($map)
+    {
+        if (isset($map[get_class($this)])){
+            $this->_table->setOption('inheritanceMap', $map[get_class($this)]);
+            return;
+        }
+        $this->_table->setOption('subclasses', array_keys($map));
+        $conn = $this->_table->getConnection(); 
+        foreach ($map as $key => $value) {
+            $table = $conn->getTable($key);
+//            $table->setOption('inheritanceMap', $value);
+        }
+    }
+
+    /**
+     * attribute
+     * sets or retrieves an option
+     *
+     * @see Doctrine::ATTR_* constants   availible attributes
+     * @param mixed $attr
+     * @param mixed $value
+     * @return mixed
+     */
+    public function attribute($attr, $value)
+    {
+        if ($value == null) {
+            if (is_array($attr)) {
+                foreach ($attr as $k => $v) {
+                    $this->_table->setAttribute($k, $v);
+                }
+            } else {
+                return $this->_table->getAttribute($attr);
+            }
+        } else {
+            $this->_table->setAttribute($attr, $value);
+        }    
+    }
+    /**
+     * option
+     * sets or retrieves an option
+     *
+     * @see Doctrine_Table::$options    availible options
+     * @param mixed $name               the name of the option
+     * @param mixed $value              options value
+     * @return mixed
+     */
+    public function option($name, $value = null)
+    {
+        if ($value === null) {
+            if (is_array($name)) {
+                foreach ($name as $k => $v) {
+                    $this->_table->setOption($k, $v);
+                }
+            } else {
+                return $this->_table->getOption($name);
+            }
+        } else {
+            $this->_table->setOption($name, $value);
+        }
+    }
+    /**
+     * ownsOne
+     * binds One-to-One composite relation
+     *
+     * @param string $componentName     the name of the related component
+     * @param string $options           relation options
+     * @see Doctrine_Relation::_$definition
+     * @return Doctrine_Record          this object
+     */
+    public function ownsOne()
+    {
+        $this->_table->bind(func_get_args(), Doctrine_Relation::ONE_COMPOSITE);
+        
+        return $this;
+    }
+    /**
+     * ownsMany
+     * binds One-to-Many / Many-to-Many composite relation
+     *
+     * @param string $componentName     the name of the related component
+     * @param string $options           relation options
+     * @see Doctrine_Relation::_$definition
+     * @return Doctrine_Record          this object
+     */
+    public function ownsMany()
+    {
+        $this->_table->bind(func_get_args(), Doctrine_Relation::MANY_COMPOSITE);
+        return $this;
+    }
+    /**
+     * hasOne
+     * binds One-to-One aggregate relation
+     *
+     * @param string $componentName     the name of the related component
+     * @param string $options           relation options
+     * @see Doctrine_Relation::_$definition
+     * @return Doctrine_Record          this object
+     */
+    public function hasOne()
+    {
+        $this->_table->bind(func_get_args(), Doctrine_Relation::ONE_AGGREGATE);
+
+        return $this;
+    }
+    /**
+     * hasMany
+     * binds One-to-Many / Many-to-Many aggregate relation
+     *
+     * @param string $componentName     the name of the related component
+     * @param string $options           relation options
+     * @see Doctrine_Relation::_$definition
+     * @return Doctrine_Record          this object
+     */
+    public function hasMany()
+    {
+        $this->_table->bind(func_get_args(), Doctrine_Relation::MANY_AGGREGATE);
+
+        return $this;
+    }
+    /**
+     * hasColumn
+     * sets a column definition
+     *
+     * @param string $name
+     * @param string $type
+     * @param integer $length
+     * @param mixed $options
+     * @return void
+     */
+    public function hasColumn($name, $type, $length = 2147483647, $options = "")
+    {
+        $this->_table->setColumn($name, $type, $length, $options);
+    }
+    public function hasColumns(array $definitions)
+    {
+        foreach ($definitions as $name => $options) {
+            $this->hasColumn($name, $options['type'], $options['length'], $options);
+        }
+    } 
+    /**
+     * loadTemplate
+     *
+     * @param string $template
+     */
+    public function loadTemplate($template, array $options = array())
+    {
+    	$tpl = new $template($options);
+    	$tpl->setTable($this->_table);
+
+        $tpl->setUp();
+
+        $tpl->setTableDefinition();
+        return $this;
+    }
+    /**
+     * actAs
+     * loads a given plugin 
+     *
+     * @param mixed $tpl
+     * @param array $options
+     */
+    public function actAs($tpl, array $options = array())
+    {
+
+        if ( ! is_object($tpl)) {
+            if (class_exists($tpl, true)) {
+                $tpl = new $tpl($options);
+            } else {
+                $className = 'Doctrine_Template_' . $tpl;
+
+                if ( ! class_exists($className, true)) {
+                    throw new Doctrine_Record_Exception("Couldn't load plugin.");
+                }
+
+
+                $tpl = new $className($options);
+            }
+        }
+
+        if ( ! ($tpl instanceof Doctrine_Template)) {
+            throw new Doctrine_Record_Exception('Loaded plugin class is not an istance of Doctrine_Template.');
+        }
+        $className = get_class($tpl);
+        
+        $this->_table->addTemplate($className, $tpl);
+
+        $tpl->setTable($this->_table);
+        $tpl->setUp();
+        $tpl->setTableDefinition();
+
+        return $this;
+    }
+    /**
+     * check
+     * adds a check constraint
+     *
+     * @param mixed $constraint     either a SQL constraint portion or an array of CHECK constraints
+     * @param string $name          optional constraint name
+     * @return Doctrine_Record      this object
+     */
+    public function check($constraint, $name = null)
+    {
+    	if (is_array($constraint)) {
+            foreach ($constraint as $name => $def) {
+                $this->_table->addCheckConstraint($def, $name);
+            }
+        } else {
+            $this->_table->addCheckConstraint($constraint, $name);
+        }
+        return $this;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..a00c0fc780acedf97d2b65fc123f1d9037e4d295
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Record_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Filter.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Filter.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a0f9853352c016c6fd74fb38eb8845d5e585f07
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Filter.php
@@ -0,0 +1,170 @@
+<?php
+/*
+ *  $Id: Record.php 1298 2007-05-01 19:26:03Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Record_Filter
+ * Filters and prepares the record data
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1298 $
+ */
+class Doctrine_Record_Filter extends Doctrine_Object
+{
+    /**
+     * @var Doctrine_Record $_record        the record object this filter belongs to
+     */
+    protected $_record;
+    /**
+     * constructor
+     *
+     * @param Doctrine_Record $_record      the record object this filter belongs to
+     */
+    public function __construct(Doctrine_Record $record)
+    {
+        $this->_record = $record;
+    }
+    /**
+     * getRecord
+     *
+     * @return Doctrine_Record $_record     the record object this filter belongs to
+     */
+    public function getRecord()
+    {
+        return $this->_record;
+    }
+    /**
+     * setDefaultValues
+     * sets the default values for records internal data
+     *
+     * @param boolean $overwrite                whether or not to overwrite the already set values
+     * @return boolean
+     */
+    public function assignDefaultValues($data, $overwrite = false)
+    {
+    	$table = $this->_record->getTable();
+
+        if ( ! $table->hasDefaultValues()) {
+            return false;
+        }
+        $modified = array();
+        foreach ($data as $column => $value) {
+            $default = $table->getDefaultValueOf($column);
+
+            if ($default === null) {
+                $default = self::$_null;
+            }
+
+            if ($value === self::$_null || $overwrite) {
+                $this->_record->rawSet($column, $default);
+                $modified[]    = $column;
+                $this->_record->state(Doctrine_Record::STATE_TDIRTY);
+            }
+        }
+        $this->_record->setModified($modified);
+    }
+    /**
+     * prepareIdentifiers
+     * prepares identifiers for later use
+     *
+     * @param boolean $exists               whether or not this record exists in persistent data store
+     * @return void
+     */
+    private function prepareIdentifiers($exists = true)
+    {
+        $id = $this->_table->getIdentifier();
+    	$this->_id   = array();
+        if (count($id) > 1) {
+            foreach ($id as $name) {
+                if ($this->_data[$name] === self::$_null) {
+                    $this->_id[$name] = null;
+                } else {
+                    $this->_id[$name] = $this->_data[$name];
+                }
+            }
+    	} else {
+            if (isset($this->_data[$id]) && $this->_data[$id] !== self::$_null) {
+                $this->_id[$id] = $this->_data[$id];
+            }
+        }
+    }
+    /**
+     * getPrepared
+     *
+     * returns an array of modified fields and values with data preparation
+     * adds column aggregation inheritance and converts Records into primary key values
+     *
+     * @param array $array
+     * @return array
+     */
+    public function getPrepared(array $array = array()) {
+        $a = array();
+
+        if (empty($array)) {
+            $array = $this->_modified;
+        }
+        foreach ($array as $k => $v) {
+            $type = $this->_table->getTypeOf($v);
+
+            if ($this->_data[$v] === self::$_null) {
+                $a[$v] = null;
+                continue;
+            }
+
+            switch ($type) {
+                case 'array':
+                case 'object':
+                    $a[$v] = serialize($this->_data[$v]);
+                    break;
+                case 'gzip':
+                    $a[$v] = gzcompress($this->_data[$v],5);
+                    break;
+                case 'boolean':
+                    $a[$v] = $this->getTable()->getConnection()->convertBooleans($this->_data[$v]);
+                break;
+                case 'enum':
+                    $a[$v] = $this->_table->enumIndex($v,$this->_data[$v]);
+                    break;
+                default:
+                    if ($this->_data[$v] instanceof Doctrine_Record) {
+                        $this->_data[$v] = $this->_data[$v]->getIncremented();
+                    }
+
+                    $a[$v] = $this->_data[$v];
+            }
+        }
+        $map = $this->_table->inheritanceMap;
+        foreach ($map as $k => $v) {
+            $old = $this->get($k, false);
+
+            if ((string) $old !== (string) $v || $old === null) {
+                $a[$k] = $v;
+                $this->_data[$k] = $v;
+            }
+        }
+
+        return $a;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Iterator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Iterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b258b10c2c0a7fcabff782f46951c6a3714c8a6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Iterator.php
@@ -0,0 +1,46 @@
+<?php
+class Doctrine_Record_Iterator extends ArrayIterator
+{
+    /**
+     * @var Doctrine_Record $record
+     */
+    private $record;
+    /**
+     * @var Doctrine_Null $null
+     */
+    private static $null;
+    /**
+     * constructor
+     *
+     * @param Doctrine_Record $record
+     */
+    public function __construct(Doctrine_Record $record)
+    {
+        $this->record = $record;
+        parent::__construct($record->getData());
+    }
+    /**
+     * initNullObject
+     *
+     * @param Doctrine_Null $null
+     */
+    public static function initNullObject(Doctrine_Null $null)
+    {
+        self::$null = $null;
+    }
+    /**
+     * current
+     *
+     * @return mixed
+     */
+    public function current()
+    {
+        $value = parent::current();
+
+        if ($value === self::$null) {
+            return null;
+        } else {
+            return $value;
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener.php
new file mode 100644
index 0000000000000000000000000000000000000000..2b1e65a5723ef67d5351738be9d09e296cf6c121
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener.php
@@ -0,0 +1,71 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Record_Listener
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Record_Listener implements Doctrine_Record_Listener_Interface
+{
+
+    public function preSerialize(Doctrine_Event $event)
+    { }
+
+    public function postSerialize(Doctrine_Event $event)
+    { }
+
+    public function preUnserialize(Doctrine_Event $event)
+    { }
+
+    public function postUnserialize(Doctrine_Event $event)
+    { }
+
+    public function preSave(Doctrine_Event $event)
+    { }
+
+    public function postSave(Doctrine_Event $event)
+    { }
+
+    public function preDelete(Doctrine_Event $event)
+    { }
+
+    public function postDelete(Doctrine_Event $event)
+    { }
+
+    public function preUpdate(Doctrine_Event $event)
+    { }
+
+    public function postUpdate(Doctrine_Event $event)
+    { }
+
+    public function preInsert(Doctrine_Event $event)
+    { }
+
+    public function postInsert(Doctrine_Event $event)
+    { }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Chain.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Chain.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6910d3652a24b2599d91e5921b62769557bacee
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Chain.php
@@ -0,0 +1,172 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Access');
+
+/**
+ * Doctrine_Record_Listener_Chain
+ * this class represents a chain of different listeners,
+ * useful for having multiple listeners listening the events at the same time
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Record_Listener_Chain extends Doctrine_Access implements Doctrine_Record_Listener_Interface
+{
+    /**
+     * @var array $listeners        an array containing all listeners
+     */
+    protected $_listeners = array();
+    /**
+     * add
+     * adds a listener to the chain of listeners
+     *
+     * @param object $listener
+     * @param string $name
+     * @return void
+     */
+    public function add($listener, $name = null)
+    {
+        if ( ! ($listener instanceof Doctrine_Record_Listener_Interface) &&
+             ! ($listener instanceof Doctrine_Overloadable)) {
+            
+            throw new Doctrine_EventListener_Exception("Couldn't add eventlistener. Record listeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
+        }
+        if ($name === null) {
+            $this->_listeners[] = $listener;
+        } else {
+            $this->_listeners[$name] = $listener;
+        }
+    }
+    /**
+     * returns a Doctrine_Record_Listener on success
+     * and null on failure
+     *
+     * @param mixed $key
+     * @return mixed
+     */
+    public function get($key)
+    {
+        if ( ! isset($this->_listeners[$key])) {
+            return null;
+        }
+        return $this->_listeners[$key];
+    }
+    /**
+     * set
+     *
+     * @param mixed $key
+     * @param Doctrine_Record_Listener $listener    listener to be added
+     * @return Doctrine_Record_Listener_Chain       this object
+     */
+    public function set($key, Doctrine_EventListener $listener)
+    {
+        $this->_listeners[$key] = $listener;
+    }
+
+    public function preSerialize(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preSerialize($event);
+        }
+    }
+
+    public function postSerialize(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preSerialize($event);
+        }
+    }
+
+    public function preUnserialize(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preUnserialize($event);
+        }
+    }
+
+    public function postUnserialize(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->postUnserialize($event);
+        }
+    }
+
+    public function preSave(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preSave($event);
+        }
+    }
+
+    public function postSave(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->postSave($event);
+        }
+    }
+
+    public function preDelete(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preDelete($event);
+        }
+    }
+
+    public function postDelete(Doctrine_Event $event)
+    {
+        foreach ($this->_listeners as $listener) {
+            $listener->postDelete($event);
+        }
+    }
+
+    public function preUpdate(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preUpdate($event);
+        }
+    }
+
+    public function postUpdate(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->postUpdate($event);
+        }
+    }
+
+    public function preInsert(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->preInsert($event);
+        }
+    }
+
+    public function postInsert(Doctrine_Event $event)
+    { 
+        foreach ($this->_listeners as $listener) {
+            $listener->postInsert($event);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca2502d4ae70e24162a70a90c049f9920990551f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/Listener/Interface.php
@@ -0,0 +1,59 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Record_Listener
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+interface Doctrine_Record_Listener_Interface
+{
+
+    public function preSerialize(Doctrine_Event $event);
+
+    public function postSerialize(Doctrine_Event $event);
+
+    public function preUnserialize(Doctrine_Event $event);
+
+    public function postUnserialize(Doctrine_Event $event);
+
+    public function preSave(Doctrine_Event $event);
+
+    public function postSave(Doctrine_Event $event);
+
+    public function preDelete(Doctrine_Event $event);
+
+    public function postDelete(Doctrine_Event $event);
+
+    public function preUpdate(Doctrine_Event $event);
+
+    public function postUpdate(Doctrine_Event $event);
+
+    public function preInsert(Doctrine_Event $event);
+
+    public function postInsert(Doctrine_Event $event);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/State/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/State/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b51a85a0edb7ed1e2014cd9eadca589deda434d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Record/State/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Record_Exception');
+/**
+ * Doctrine_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Record_State_Exception extends Doctrine_Record_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation.php
new file mode 100644
index 0000000000000000000000000000000000000000..44fffd7fefdea772d8b9c7360a9963cacc2d8792
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation.php
@@ -0,0 +1,313 @@
+<?php
+/*
+ *  $Id: Relation.php 1973 2007-07-11 14:39:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Relation
+ * This class represents a relation between components
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1973 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Relation implements ArrayAccess
+{
+    /**
+     * RELATION CONSTANTS
+     */
+
+    /**
+     * constant for ONE_TO_ONE and MANY_TO_ONE aggregate relationships
+     */
+    const ONE_AGGREGATE         = 0;
+    /**
+     * constant for ONE_TO_ONE and MANY_TO_ONE composite relationships
+     */
+    const ONE_COMPOSITE         = 1;
+    /**
+     * constant for MANY_TO_MANY and ONE_TO_MANY aggregate relationships
+     */
+    const MANY_AGGREGATE        = 2;
+    /**
+     * constant for MANY_TO_MANY and ONE_TO_MANY composite relationships
+     */
+    const MANY_COMPOSITE        = 3;
+
+    const ONE   = 0;
+    const MANY  = 2;
+    
+    protected $definition = array('alias'       => true,
+                                  'foreign'     => true,
+                                  'local'       => true,
+                                  'class'       => true,
+                                  'type'        => true,
+                                  'table'       => true,
+                                  'name'        => false,
+                                  'refTable'    => false,
+                                  'onDelete'    => false,
+                                  'onUpdate'    => false,
+                                  'deferred'    => false,
+                                  'deferrable'  => false,
+                                  'constraint'  => false,
+                                  'equal'       => false,
+                                  );
+    /**
+     * constructor
+     *
+     * @param array $definition         an associative array with the following structure:
+     *          name                    foreign key constraint name
+     *
+     *          local                   the local field(s)
+     *
+     *          foreign                 the foreign reference field(s)
+     *
+     *          table                   the foreign table object
+     *
+     *          refTable                the reference table object (if any)
+     *
+     *          onDelete                referential delete action
+     *  
+     *          onUpdate                referential update action
+     *
+     *          deferred                deferred constraint checking 
+     *
+     *          alias                   relation alias
+     *
+     *          type                    the relation type, either Doctrine_Relation::ONE or Doctrine_Relation::MANY
+     *
+     *          constraint              boolean value, true if the relation has an explicit referential integrity constraint
+     *
+     * The onDelete and onUpdate keys accept the following values:
+     *
+     * CASCADE: Delete or update the row from the parent table and automatically delete or
+     *          update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
+     *          Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column
+     *          in the parent table or in the child table.
+     *
+     * SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the
+     *          child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier 
+     *          specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported.
+     *
+     * NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary 
+     *           key value is not allowed to proceed if there is a related foreign key value in the referenced table.
+     *
+     * RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as
+     *           omitting the ON DELETE or ON UPDATE clause.
+     *
+     * SET DEFAULT
+     */
+    public function __construct(array $definition)
+    {
+    	$def = array();
+    	foreach ($this->definition as $key => $val) {
+            if ( ! isset($definition[$key]) && $val) {
+                throw new Doctrine_Exception($key . ' is required!');
+            }
+            if (isset($definition[$key])) {
+                $def[$key] = $definition[$key];
+            } else {
+                $def[$key] = null;      	
+            }
+        }
+
+        $this->definition = $def;
+    }
+    /**
+     * hasConstraint
+     * whether or not this relation has an explicit constraint
+     *
+     * @return boolean
+     */
+    public function hasConstraint()
+    {
+        return ($this->definition['constraint'] ||
+                ($this->definition['onUpdate']) ||
+                ($this->definition['onDelete']));
+    }
+    public function isDeferred()
+    {
+        return $this->definition['deferred'];
+    }
+
+    public function isDeferrable()
+    {
+        return $this->definition['deferrable'];
+    }
+    public function isEqual()
+    {
+        return $this->definition['equal'];
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->definition[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        if (isset($this->definition[$offset])) {
+            return $this->definition[$offset];
+        }
+        
+        return null;
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        if (isset($this->definition[$offset])) {
+            $this->definition[$offset] = $value;
+        }
+    }
+
+    public function offsetUnset($offset)
+    {
+        $this->definition[$offset] = false;
+    }
+    /**
+     * toArray
+     *
+     * @return array
+     */
+    public function toArray() 
+    {
+        return $this->definition;
+    }
+    /**
+     * getAlias
+     * returns the relation alias
+     *
+     * @return string
+     */
+    final public function getAlias()
+    {
+        return $this->definition['alias'];
+    }
+    /**
+     * getType
+     * returns the relation type, either 0 or 1
+     *
+     * @see Doctrine_Relation MANY_* and ONE_* constants
+     * @return integer
+     */
+    final public function getType()
+    {
+        return $this->definition['type'];
+    }
+    /**
+     * getTable
+     * returns the foreign table object
+     *
+     * @return object Doctrine_Table
+     */
+    final public function getTable()
+    {
+        return Doctrine_Manager::getInstance()
+               ->getConnectionForComponent($this->definition['class'])
+               ->getTable($this->definition['class']);
+    }
+    /**
+     * getLocal
+     * returns the name of the local column
+     *
+     * @return string
+     */
+    final public function getLocal()
+    {
+        return $this->definition['local'];
+    }
+    /**
+     * getForeign
+     * returns the name of the foreignkey column where
+     * the localkey column is pointing at
+     *
+     * @return string
+     */
+    final public function getForeign()
+    {
+        return $this->definition['foreign'];
+    }
+    /**
+     * isComposite
+     * returns whether or not this relation is a composite relation
+     *
+     * @return boolean
+     */
+    final public function isComposite()
+    {
+        return ($this->definition['type'] == Doctrine_Relation::ONE_COMPOSITE ||
+                $this->definition['type'] == Doctrine_Relation::MANY_COMPOSITE);
+    }
+    /**
+     * isOneToOne
+     * returns whether or not this relation is a one-to-one relation
+     *
+     * @return boolean
+     */
+    final public function isOneToOne()
+    {
+        return ($this->definition['type'] == Doctrine_Relation::ONE_AGGREGATE ||
+                $this->definition['type'] == Doctrine_Relation::ONE_COMPOSITE);
+    }
+    /**
+     * getRelationDql
+     *
+     * @param integer $count
+     * @return string
+     */
+    public function getRelationDql($count)
+    {
+    	$component = $this->getTable()->getComponentName();
+
+        $dql  = 'FROM ' . $component
+              . ' WHERE ' . $component . '.' . $this->definition['foreign']
+              . ' IN (' . substr(str_repeat('?, ', $count), 0, -2) . ')';
+
+        return $dql;
+    }
+    /**
+     * fetchRelatedFor
+     *
+     * fetches a component related to given record
+     *
+     * @param Doctrine_Record $record
+     * @return Doctrine_Record|Doctrine_Collection
+     */
+    abstract public function fetchRelatedFor(Doctrine_Record $record);
+    /**
+     * __toString
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        $r[] = "<pre>";
+        foreach ($this->definition as $k => $v) {
+            if(is_object($v)) {
+                $v = 'Object(' . get_class($v) . ')';
+            }
+            $r[] = $k . ' : ' . $v;
+        }
+        $r[] = "</pre>";
+        return implode("\n", $r);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association.php
new file mode 100644
index 0000000000000000000000000000000000000000..a31052be4778e15548072838a15f8f6fec272811
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association.php
@@ -0,0 +1,94 @@
+<?php
+/*
+ *  $Id: Association.php 2212 2007-08-11 18:24:19Z nightfreak $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Relation');
+/**
+ * Doctrine_Relation_Association    this class takes care of association mapping
+ *                         (= many-to-many relationships, where the relationship is handled with an additional relational table
+ *                         which holds 2 foreign keys)
+ *
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2212 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Relation_Association extends Doctrine_Relation
+{
+    /**
+     * @return Doctrine_Table
+     */
+    public function getAssociationFactory()
+    {
+        return $this->definition['refTable'];
+    }
+    public function getAssociationTable()
+    {
+    	return $this->definition['refTable'];
+    }
+    /**
+     * getRelationDql
+     *
+     * @param integer $count
+     * @return string
+     */
+    public function getRelationDql($count, $context = 'record')
+    {
+    	$component = $this->definition['refTable']->getComponentName();
+        switch ($context) {
+            case "record":
+                $sub  = substr(str_repeat("?, ", $count),0,-2);
+                $dql  = 'FROM ' . $this->getTable()->getComponentName();
+                $dql .= '.' . $component;
+                $dql .= ' WHERE ' . $this->getTable()->getComponentName()
+                . '.' . $component . '.' . $this->definition['local'] . ' IN (' . $sub . ')';
+                break;
+            case "collection":
+                $sub  = substr(str_repeat("?, ", $count),0,-2);
+                $dql  = 'FROM ' . $component . '.' . $this->getTable()->getComponentName();
+                $dql .= ' WHERE ' . $component . '.' . $this->definition['local'] . ' IN (' . $sub . ')';
+                break;
+        }
+
+        return $dql;
+    }
+    /**
+     * fetchRelatedFor
+     *
+     * fetches a component related to given record
+     *
+     * @param Doctrine_Record $record
+     * @return Doctrine_Record|Doctrine_Collection
+     */
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+        $id = $record->getIncremented();
+        if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+            $coll = new Doctrine_Collection($this->getTable());
+        } else {
+            $coll = Doctrine_Query::create()->parseQuery($this->getRelationDql(1))->execute(array($id));
+        }
+        $coll->setReference($record, $this);
+        return $coll;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association/Self.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association/Self.php
new file mode 100644
index 0000000000000000000000000000000000000000..f061a9959c624c048c6b446e93b8ca01becf9065
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Association/Self.php
@@ -0,0 +1,109 @@
+<?php
+/*
+ *  $Id: Self.php 1434 2007-05-22 15:57:17Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Relation_Association');
+/**
+ * Doctrine_Relation_Association_Self
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1434 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Relation_Association_Self extends Doctrine_Relation_Association
+{
+    /**
+     * getRelationDql
+     *
+     * @param integer $count
+     * @return string
+     */
+    public function getRelationDql($count, $context = 'record')
+    {
+        switch ($context) {
+            case 'record':
+                $sub    = 'SELECT '.$this->definition['foreign'] 
+                        . ' FROM '.$this->definition['refTable']->getTableName()
+                        . ' WHERE '.$this->definition['local']
+                        . ' = ?';
+
+                $sub2   = 'SELECT '.$this->definition['local']
+                        . ' FROM '.$this->definition['refTable']->getTableName()
+                        . ' WHERE '.$this->definition['foreign']
+                        . ' = ?';
+
+                $dql  = 'FROM ' . $this->definition['table']->getComponentName()
+                      . '.' . $this->definition['refTable']->getComponentName()
+                      . ' WHERE ' . $this->definition['table']->getComponentName()
+                      . '.' . $this->definition['table']->getIdentifier() 
+                      . ' IN (' . $sub . ')'
+                      . ' || ' . $this->definition['table']->getComponentName() 
+                      . '.' . $this->definition['table']->getIdentifier() 
+                      . ' IN (' . $sub2 . ')';
+                break;
+            case 'collection':
+                $sub  = substr(str_repeat('?, ', $count),0,-2);
+                $dql  = 'FROM '.$this->definition['refTable']->getComponentName()
+                      . '.' . $this->definition['table']->getComponentName()
+                      . ' WHERE '.$this->definition['refTable']->getComponentName()
+                      . '.' . $this->definition['local'] . ' IN (' . $sub . ')';
+        };
+
+        return $dql;
+    }
+
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+        $id      = $record->getIncremented();
+
+        $q = new Doctrine_RawSql();
+
+        $assocTable = $this->getAssociationFactory()->getTableName();
+        $tableName  = $record->getTable()->getTableName();
+        $identifier = $record->getTable()->getIdentifier();
+
+        $sub     = 'SELECT '.$this->getForeign().
+                   ' FROM '.$assocTable.
+                   ' WHERE '.$this->getLocal().
+                   ' = ?';
+
+        $sub2   = 'SELECT '.$this->getLocal().
+                  ' FROM '.$assocTable.
+                  ' WHERE '.$this->getForeign().
+                  ' = ?';
+
+        $q->select('{'.$tableName.'.*}, {'.$assocTable.'.*}')
+          ->from($tableName . ' INNER JOIN '.$assocTable.' ON '.
+                 $tableName . '.' . $identifier . ' = ' . $assocTable . '.' . $this->getLocal() . ' OR ' .
+                 $tableName . '.' . $identifier . ' = ' . $assocTable . '.' . $this->getForeign()
+                 )
+          ->where($tableName.'.'.$identifier.' IN ('.$sub.') OR '.
+                  $tableName.'.'.$identifier.' IN ('.$sub2.')'
+                );
+        $q->addComponent($tableName,  $record->getTable()->getComponentName());
+        $q->addComponent($assocTable, $record->getTable()->getComponentName(). '.' . $this->getAssociationFactory()->getComponentName());
+
+        return $q->execute(array($id, $id));
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..cd1198fb018523c4df40c1e8c5606d45b98cbfaf
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1344 2007-05-12 23:27:16Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */        
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Relation_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1344 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Relation_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/ForeignKey.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/ForeignKey.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e4af026bdf2a1b9700e35ab4a2c1585d733e041
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/ForeignKey.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ *  $Id: ForeignKey.php 1517 2007-05-30 10:20:21Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Relation');
+/**
+ * Doctrine_Relation_ForeignKey
+ * This class represents a foreign key relation
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1517 $
+ */
+class Doctrine_Relation_ForeignKey extends Doctrine_Relation
+{
+    /**
+     * fetchRelatedFor
+     *
+     * fetches a component related to given record
+     *
+     * @param Doctrine_Record $record
+     * @return Doctrine_Record|Doctrine_Collection
+     */
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+    	$id = array();
+    	foreach ((array) $this->definition['local'] as $local) {
+    	   $value = $record->get($local);
+           if (isset($value)) {
+               $id[] = $value;
+           }
+        }
+        if ($this->isOneToOne()) {
+            if ( ! $record->exists() || empty($id) || 
+                 ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+                
+                $related = $this->getTable()->create();
+            } else {
+                $dql  = 'FROM ' . $this->getTable()->getComponentName()
+                      . ' WHERE ' . $this->getCondition();
+
+                $coll = $this->getTable()->getConnection()->query($dql, $id);
+                $related = $coll[0];
+            }
+
+            $related->set($this->definition['foreign'], $record, false);
+
+        } else {
+
+            if ( ! $record->exists() || empty($id) || 
+                 ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+                
+                $related = new Doctrine_Collection($this->getTable());
+            } else {
+                $query      = $this->getRelationDql(1);
+                $related    = $this->getTable()->getConnection()->query($query, $id);
+            }
+            $related->setReference($record, $this);
+        }
+        return $related;
+    }
+    /**
+     * getCondition
+     *
+     * @param string $alias
+     */
+    public function getCondition($alias = null)
+    {
+    	if ( ! $alias) {
+    	   $alias = $this->getTable()->getComponentName();
+    	}
+    	$conditions = array();
+        foreach ((array) $this->definition['foreign'] as $foreign) {
+            $conditions[] = $alias . '.' . $foreign . ' = ?';
+        }
+        return implode(' AND ', $conditions);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/LocalKey.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/LocalKey.php
new file mode 100644
index 0000000000000000000000000000000000000000..2c4fd8feb8043d24c158fef9a78a63dcee1fbc3c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/LocalKey.php
@@ -0,0 +1,82 @@
+<?php
+/*
+ *  $Id: LocalKey.php 2195 2007-08-10 07:07:53Z njero $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Relation');
+/**
+ * Doctrine_Relation_LocalKey
+ * This class represents a local key relation
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2195 $
+ */
+class Doctrine_Relation_LocalKey extends Doctrine_Relation
+{
+    /**
+     * fetchRelatedFor
+     *
+     * fetches a component related to given record
+     *
+     * @param Doctrine_Record $record
+     * @return Doctrine_Record|Doctrine_Collection
+     */
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+        $id = $record->get($this->definition['local']);
+
+        if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+            $related = $this->getTable()->create();
+        } else {
+            $dql  = 'FROM ' . $this->getTable()->getComponentName()
+                 . ' WHERE ' . $this->getCondition();
+
+            $related = $this->getTable()
+                            ->getConnection()
+                            ->query($dql, array($id))
+                            ->getFirst();
+            
+            if ( ! $related || empty($related)) {
+                $related = $this->getTable()->create();
+            }
+        }
+
+        $record->set($this->definition['local'], $related, false);
+
+        return $related;
+    }
+    
+    /**
+     * getCondition
+     *
+     * @param string $alias
+     */
+    public function getCondition($alias = null)
+    {
+    	if ( ! $alias) {
+    	   $alias = $this->getTable()->getComponentName();
+    	}
+    	return $alias . '.' . $this->definition['foreign'] . ' = ?';
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Nest.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Nest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ba0a0b58f14e29242cede1d93f6e376da9bc944
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Nest.php
@@ -0,0 +1,142 @@
+<?php
+/*
+ *  $Id: Self.php 1434 2007-05-22 15:57:17Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Relation_Association');
+/**
+ * Doctrine_Relation_Association_Self
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1434 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Relation_Nest extends Doctrine_Relation_Association
+{
+    /**
+     * getRelationDql
+     *
+     * @param integer $count
+     * @return string
+     */
+    public function getRelationDql($count, $context = 'record')
+    {
+        switch ($context) {
+            case 'record':
+                $sub    = 'SELECT '.$this->definition['foreign'] 
+                        . ' FROM '.$this->definition['refTable']->getTableName()
+                        . ' WHERE '.$this->definition['local']
+                        . ' = ?';
+
+                $sub2   = 'SELECT '.$this->definition['local']
+                        . ' FROM '.$this->definition['refTable']->getTableName()
+                        . ' WHERE '.$this->definition['foreign']
+                        . ' = ?';
+
+                $dql  = 'FROM ' . $this->definition['table']->getComponentName()
+                      . '.' . $this->definition['refTable']->getComponentName()
+                      . ' WHERE ' . $this->definition['table']->getComponentName()
+                      . '.' . $this->definition['table']->getIdentifier() 
+                      . ' IN (' . $sub . ')'
+                      . ' || ' . $this->definition['table']->getComponentName() 
+                      . '.' . $this->definition['table']->getIdentifier() 
+                      . ' IN (' . $sub2 . ')';
+                break;
+            case 'collection':
+                $sub  = substr(str_repeat('?, ', $count),0,-2);
+                $dql  = 'FROM '.$this->definition['refTable']->getComponentName()
+                      . '.' . $this->definition['table']->getComponentName()
+                      . ' WHERE '.$this->definition['refTable']->getComponentName()
+                      . '.' . $this->definition['local'] . ' IN (' . $sub . ')';
+        };
+
+        return $dql;
+    }
+    /**
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+        $id = $record->getIncremented();
+
+        if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+            return new Doctrine_Collection($this->getTable());
+        } else {
+            $q = new Doctrine_Query();
+            
+            $c  = $this->getTable()->getComponentName();
+            $a  = substr($c, 0, 1);
+            $c2 = $this->getAssociationTable()->getComponentName();
+            $a2 = substr($c2, 0, 1);
+
+            $q->from($c)
+              ->innerJoin($c . '.' . $c2)
+
+            $sub = 'SELECT ' . $this->getForeign() 
+                 . ' FROM '  . $c2
+                 . ' WHERE ' . $this->getLocal() 
+                 . ' = ?';
+        }
+    }
+    */
+
+    public function fetchRelatedFor(Doctrine_Record $record)
+    {
+        $id = $record->getIncremented();
+
+
+        if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
+            return new Doctrine_Collection($this->getTable());
+        } else {
+            $q = new Doctrine_RawSql();
+
+            $assocTable = $this->getAssociationFactory()->getTableName();
+            $tableName  = $record->getTable()->getTableName();
+            $identifier = $record->getTable()->getIdentifier();
+    
+            $sub = 'SELECT ' . $this->getForeign()
+                 . ' FROM ' . $assocTable 
+                 . ' WHERE ' . $this->getLocal() 
+                 . ' = ?';
+
+            $condition[] = $tableName . '.' . $identifier . ' IN (' . $sub . ')';
+            $joinCondition[] = $tableName . '.' . $identifier . ' = ' . $assocTable . '.' . $this->getForeign();
+
+            if ($this->definition['equal']) {
+                $sub2   = 'SELECT ' . $this->getLocal()
+                        . ' FROM '  . $assocTable
+                        . ' WHERE ' . $this->getForeign()
+                        . ' = ?';
+
+                $condition[] = $tableName . '.' . $identifier . ' IN (' . $sub2 . ')';
+                $joinCondition[] = $tableName . '.' . $identifier . ' = ' . $assocTable . '.' . $this->getLocal();
+            }
+            $q->select('{'.$tableName.'.*}, {'.$assocTable.'.*}')
+              ->from($tableName . ' INNER JOIN ' . $assocTable . ' ON ' . implode(' OR ', $joinCondition))
+              ->where(implode(' OR ', $condition));
+            $q->addComponent($tableName,  $record->getTable()->getComponentName());
+            $q->addComponent($assocTable, $record->getTable()->getComponentName(). '.' . $this->getAssociationFactory()->getComponentName());
+
+            $params = ($this->definition['equal']) ? array($id, $id) : array($id);
+
+            return $q->execute($params);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a217fe49d85c7435f59d0c05b54dd81b1977ec6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser.php
@@ -0,0 +1,461 @@
+<?php
+/*
+ *  $Id: Table.php 1397 2007-05-19 19:54:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Relation_Parser
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 1397 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Relation_Parser 
+{
+    /**
+     * @var Doctrine_Table $_table          the table object this parser belongs to
+     */
+    protected $_table;
+    /**
+     * @var array $_relations               an array containing all the Doctrine_Relation objects for this table
+     */
+    protected $_relations = array();
+    /**
+     * @var array $_pending                 relations waiting for parsing
+     */
+    protected $_pending   = array();
+    /**
+     * constructor
+     *
+     * @param Doctrine_Table $table         the table object this parser belongs to
+     */
+    public function __construct(Doctrine_Table $table) 
+    {
+        $this->_table = $table;
+    }
+    /**
+     * getTable
+     *
+     * @return Doctrine_Table   the table object this parser belongs to
+     */
+    public function getTable()
+    {
+        return $this->_table;
+    }
+    /**
+     * getPendingRelation
+     *
+     * @return array            an array defining a pending relation
+     */
+    public function getPendingRelation($name) 
+    {
+    	if ( ! isset($this->_pending[$name])) {
+            throw new Doctrine_Relation_Exception('Unknown pending relation ' . $name);
+    	}
+    	
+    	return $this->_pending[$name];
+    }
+    
+    public function hasRelation($name)
+    {
+        if ( ! isset($this->_pending[$name]) && ! isset($this->_relations[$name])) {
+            return false;
+        }
+        
+        return true;
+    }
+    /**
+     * binds a relation
+     *
+     * @param string $name
+     * @param string $field
+     * @return void
+     */
+    public function bind($name, $options = array())
+    {
+        if (isset($this->relations[$name])) {
+            unset($this->relations[$name]);
+        }
+
+        $lower = strtolower($name);
+
+        if ($this->_table->hasColumn($lower)) {
+            throw new Doctrine_Relation_Exception("Couldn't bind relation. Column with name " . $lower . ' already exists!');
+        }
+
+        $e    = explode(' as ', $name);
+        $name = $e[0];
+        $alias = isset($e[1]) ? $e[1] : $name;
+
+        if ( ! isset($options['type'])) {
+            throw new Doctrine_Relation_Exception('Relation type not set.');
+        }
+
+        $this->_pending[$alias] = array_merge($options, array('class' => $name, 'alias' => $alias));
+
+        $m = Doctrine_Manager::getInstance();
+        
+        if (isset($options['onDelete'])) {
+            $m->addDeleteAction($name, $this->_table->getComponentName(), $options['onDelete']);
+        }
+        if (isset($options['onUpdate'])) {
+            $m->addUpdateAction($name, $this->_table->getComponentName(), $options['onUpdate']);
+        }
+
+        return $this->_pending[$alias];
+    }
+    /**
+     * getRelation
+     *
+     * @param string $alias      relation alias
+     */
+    public function getRelation($alias, $recursive = true)
+    {
+        if (isset($this->_relations[$alias])) {
+            return $this->_relations[$alias];
+        }
+
+        if (isset($this->_pending[$alias])) {
+            $def = $this->_pending[$alias];
+        
+            // check if reference class name exists
+            // if it does we are dealing with association relation
+            if (isset($def['refClass'])) {
+                $def = $this->completeAssocDefinition($def);
+                $localClasses = array_merge($this->_table->getOption('parents'), array($this->_table->getComponentName()));
+
+                if ( ! isset($this->_pending[$def['refClass']]) && 
+                     ! isset($this->_relations[$def['refClass']])) {
+
+                    $parser = $def['refTable']->getRelationParser();
+                    if ( ! $parser->hasRelation($this->_table->getComponentName())) {
+                        $parser->bind($this->_table->getComponentName(),
+                                      array('type'    => Doctrine_Relation::ONE,
+                                            'local'   => $def['local'],
+                                            'foreign' => $this->_table->getIdentifier(),
+                                            'localKey' => true,
+                                            ));
+                    }
+
+                    if ( ! $this->hasRelation($def['refClass'])) {
+                        $this->bind($def['refClass'], array('type' => Doctrine_Relation::MANY,
+                                                            'foreign' => $def['local'],
+                                                            'local'   => $this->_table->getIdentifier()));
+                    }
+                }
+                if (in_array($def['class'], $localClasses)) {
+                    $rel = new Doctrine_Relation_Nest($def);
+                } else {
+                    $rel = new Doctrine_Relation_Association($def);
+                }
+            } else {
+                // simple foreign key relation
+                $def = $this->completeDefinition($def);
+
+                if (isset($def['localKey'])) {
+
+                    $rel = new Doctrine_Relation_LocalKey($def);
+                } else {
+                    $rel = new Doctrine_Relation_ForeignKey($def);
+                }
+            }
+            if (isset($rel)) {
+                // unset pending relation
+                unset($this->_pending[$alias]);
+
+                $this->_relations[$alias] = $rel;
+                return $rel;
+            }
+        }
+        if ($recursive) {
+            $this->getRelations();
+
+            return $this->getRelation($alias, false);
+        } else {
+            throw new Doctrine_Table_Exception('Unknown relation alias ' . $alias);
+        }
+    }
+    /**
+     * getRelations
+     * returns an array containing all relation objects
+     *
+     * @return array        an array of Doctrine_Relation objects
+     */
+    public function getRelations()
+    {
+        foreach ($this->_pending as $k => $v) {
+            $this->getRelation($k);
+        }
+
+        return $this->_relations;
+    }
+    /**
+     * getImpl
+     * returns the table class of the concrete implementation for given template
+     * if the given template is not a template then this method just returns the
+     * table class for the given record
+     *
+     * @param string $template
+     */
+    public function getImpl($template)
+    {
+    	$conn = $this->_table->getConnection();
+
+        if (in_array('Doctrine_Template', class_parents($template))) {
+            $impl = $this->_table->getImpl($template);
+            
+            if ($impl === null) {
+                throw new Doctrine_Relation_Parser_Exception("Couldn't find concrete implementation for template " . $template);
+            }
+        } else {
+            $impl = $template;
+        }
+
+        return $conn->getTable($impl);
+    }
+    /**
+     * Completes the given association definition
+     *
+     * @param array $def    definition array to be completed
+     * @return array        completed definition array
+     */
+    public function completeAssocDefinition($def) 
+    {
+    	$conn = $this->_table->getConnection();
+        $def['table'] = $this->getImpl($def['class']);
+        $def['class'] = $def['table']->getComponentName();
+        $def['refTable'] = $this->getImpl($def['refClass']);
+
+        $id = $def['refTable']->getIdentifier();
+
+        if (count($id) > 1) {
+            if ( ! isset($def['foreign'])) {
+                // foreign key not set
+                // try to guess the foreign key
+    
+                $def['foreign'] = ($def['local'] === $id[0]) ? $id[1] : $id[0];
+            }
+            if ( ! isset($def['local'])) {
+                // foreign key not set
+                // try to guess the foreign key
+
+                $def['local'] = ($def['foreign'] === $id[0]) ? $id[1] : $id[0];
+            }
+        } else {
+
+            if ( ! isset($def['foreign'])) {
+                // foreign key not set
+                // try to guess the foreign key
+    
+                $columns = $this->getIdentifiers($def['table']);
+    
+                $def['foreign'] = $columns;
+            }
+            if ( ! isset($def['local'])) {
+                // local key not set
+                // try to guess the local key
+                $columns = $this->getIdentifiers($this->_table);
+    
+                $def['local'] = $columns;
+            }
+        }
+        return $def;
+    }
+    /** 
+     * getIdentifiers
+     * gives a list of identifiers from given table
+     *
+     * the identifiers are in format:
+     * [componentName].[identifier]
+     *
+     * @param Doctrine_Table $table     table object to retrieve identifiers from
+     */
+    public function getIdentifiers(Doctrine_Table $table)
+    {
+    	if (is_array($table->getIdentifier())) {
+            $columns = array();
+            foreach((array) $table->getIdentifier() as $identifier) {
+                $columns[] = strtolower($table->getComponentName())
+                           . '_' . $table->getIdentifier();
+            }
+    	} else {
+            $columns = strtolower($table->getComponentName())
+                           . '_' . $table->getIdentifier();
+    	}
+
+        return $columns;
+    }
+    /**
+     * guessColumns
+     *
+     * @param array $classes                    an array of class names
+     * @param Doctrine_Table $foreignTable      foreign table object
+     * @return array                            an array of column names
+     */
+    public function guessColumns(array $classes, Doctrine_Table $foreignTable)
+    {
+        $conn = $this->_table->getConnection();
+
+        foreach ($classes as $class) {
+            try {
+                $table   = $conn->getTable($class);
+            } catch (Doctrine_Table_Exception $e) {
+                continue;
+            }
+            $columns = $this->getIdentifiers($table);
+            $found   = true;
+
+            foreach ((array) $columns as $column) {
+                if ( ! $foreignTable->hasColumn($column)) {
+                    $found = false;
+                    break;
+                }
+            }
+            if ($found) {
+                break;
+            }
+        }
+        
+        if ( ! $found) {
+            throw new Doctrine_Relation_Exception("Couldn't find columns.");
+        }
+
+        return $columns;
+    }
+    /**
+     * Completes the given definition
+     *
+     * @param array $def    definition array to be completed
+     * @return array        completed definition array
+     */
+    public function completeDefinition($def)
+    {
+    	$conn = $this->_table->getConnection();
+        $def['table'] = $this->getImpl($def['class']);
+        $def['class'] = $def['table']->getComponentName();
+
+        $foreignClasses = array_merge($def['table']->getOption('parents'), array($def['class']));
+        $localClasses   = array_merge($this->_table->getOption('parents'), array($this->_table->getComponentName()));
+
+        if (isset($def['local'])) {
+            if ( ! isset($def['foreign'])) {
+                // local key is set, but foreign key is not
+                // try to guess the foreign key
+
+                if ($def['local'] === $this->_table->getIdentifier()) {
+                    $def['foreign'] = $this->guessColumns($localClasses, $def['table']);
+                } else {
+                    // the foreign field is likely to be the
+                    // identifier of the foreign class
+                    $def['foreign'] = $def['table']->getIdentifier();
+                    $def['localKey'] = true;
+                }
+            } else {
+                if ($def['local'] !== $this->_table->getIdentifier() && 
+                    $def['type'] == Doctrine_Relation::ONE) {
+                    $def['localKey'] = true;
+                }
+            }
+        } else {
+            if (isset($def['foreign'])) {
+                // local key not set, but foreign key is set
+                // try to guess the local key
+                if ($def['foreign'] === $def['table']->getIdentifier()) {
+                    $def['localKey'] = true;
+                    try {
+                        $def['local'] = $this->guessColumns($foreignClasses, $this->_table);
+                    } catch (Doctrine_Relation_Exception $e) {
+                        $def['local'] = $this->_table->getIdentifier();
+                    }
+                } else {
+                    $def['local'] = $this->_table->getIdentifier();
+                }
+            } else {
+                // neither local or foreign key is being set
+                // try to guess both keys
+
+                $conn = $this->_table->getConnection();
+
+                // the following loops are needed for covering inheritance
+                foreach ($localClasses as $class) {
+                    $table  = $conn->getTable($class);
+                    $column = strtolower($table->getComponentName())
+                            . '_' . $table->getIdentifier();
+
+                    foreach ($foreignClasses as $class2) {
+                        $table2 = $conn->getTable($class2);
+                        if ($table2->hasColumn($column)) {
+                            $def['foreign'] = $column;
+                            $def['local']   = $table->getIdentifier();
+
+                            return $def;
+                        }
+                    }
+                }
+
+                foreach ($foreignClasses as $class) {
+                    $table  = $conn->getTable($class);
+                    $column = strtolower($table->getComponentName())
+                            . '_' . $table->getIdentifier();
+                
+                    foreach ($localClasses as $class2) {
+                        $table2 = $conn->getTable($class2);
+                        if ($table2->hasColumn($column)) {
+                            $def['foreign']  = $table->getIdentifier();
+                            $def['local']    = $column;
+                            $def['localKey'] = true;
+                            return $def;
+                        }
+                    }
+                }
+
+                // auto-add columns and auto-build relation
+                $columns = array();
+                foreach ((array) $this->_table->getIdentifier() as $id) {
+                    $column = strtolower($table->getComponentName())
+                            . '_' . $id;
+
+                    $col = $this->_table->getDefinitionOf($id);
+                    $type = $col['type'];
+                    $length = $col['length'];
+
+                    unset($col['type']);
+                    unset($col['length']);
+                    unset($col['autoincrement']);
+                    unset($col['sequence']);
+                    unset($col['primary']);
+
+                    $def['table']->setColumn($column, $type, $length, $col);
+                    
+                    $columns[] = $column;
+                }
+                if (count($columns) > 1) {
+                    $def['foreign'] = $columns;
+                } else {
+                    $def['foreign'] = $columns[0];
+                }
+                $def['local'] = $this->_table->getIdentifier();
+            }
+        }
+        return $def;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9c10cf9a7c3b61ee250b72f53bc7ef08429544e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Relation/Parser/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */        
+Doctrine::autoload('Doctrine_Relation_Exception');
+/**
+ * Doctrine_Relation_Parser_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Relation_Parser_Exception extends Doctrine_Relation_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema.php
new file mode 100644
index 0000000000000000000000000000000000000000..4abfd3e7f567a9a57e121945f41e3305142e634a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema.php
@@ -0,0 +1,84 @@
+<?php
+/*
+ *  $Id: Schema.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Schema.php 1080 2007-02-10 18:17:08Z romanb $
+/**
+ * class Doctrine_Schema
+ * Holds information on one to many databases
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema extends Doctrine_Schema_Object implements Countable, IteratorAggregate
+{
+    /**
+     * Holds any number of databases contained in the schema
+     * @access private
+     */
+    private $childs;
+
+    /**
+     *
+     * @param Doctrine_Schema_Database database      * @return
+     * @access public
+     */
+    public function addDatabase( Doctrine_Schema_Database $database )
+    {
+         $this->childs[] = $database;
+    }
+
+    /**
+     * Return the childs for this schema
+     *
+     * @return array of Doctrine_Schema_Database
+     *
+     */
+    public function getDatabases(){
+         return $this->childs;
+    }
+    /**
+     *
+     * @return
+     * @access public
+     */
+    public function __toString( )
+    {
+
+    }
+    /**
+     *
+     * @return bool
+     * @access public
+     */
+    public function isValid( )
+    {
+
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Column.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Column.php
new file mode 100644
index 0000000000000000000000000000000000000000..1927d1735f0f9c4d59c07b3cb44065ef7dcb8893
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Column.php
@@ -0,0 +1,80 @@
+<?php
+/*
+ *  $Id: Column.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Schema_Object');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Column.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Schema_Column
+ * Holds information on a database table field
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema_Column extends Doctrine_Schema_Object implements IteratorAggregate
+{
+    /**
+     * column definitions
+     * @var array $definition
+     */
+    protected $definition = array('name'    => '',
+                                  'type'    => '',
+                                  'length'  => null,
+                                  'unique'  => false,
+                                  'primary' => false,
+                                  'notnull' => false,
+                                  'default' => false,
+                                  'autoinc' => false
+                                  );
+
+    public function getName()
+    {
+        return $this->definition['name'];
+    }
+    public function getType()
+    {
+        return $this->definition['type'];
+    }
+    public function isUnique()
+    {
+        return $this->definition['unique'];
+    }
+    public function isPrimaryKey()
+    {
+        return $this->definition['primary'];
+    }
+    public function defaultValue()
+    {
+        return $this->definition['default'];
+    }
+    public function isNotNull()
+    {
+        return $this->definition['notnull'];
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Database.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Database.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1ede244d47ecff92141a68a1dabeb5b4c5c57fd
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Database.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ *  $Id: Database.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Schema_Object');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Database.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Schema_Database
+ * Holds information on a database
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema_Database extends Doctrine_Schema_Object
+{
+
+    protected $definition = array('name'        => null,
+                                  'type'        => null,
+                                  'charset'     => null,
+                                  'description' => null,
+                                  'version'     => null,
+                                  'engine'      => null);
+
+    private $childs = array();
+
+    /**
+     *
+     * @return
+     * @access public
+     */
+    public function __clone( )
+    {
+
+    }
+    /**
+     *
+     * @return
+     * @access public
+     */
+    public function __toString( )
+    {
+
+    }
+    /**
+     *
+     * @return bool
+     * @access public
+     */
+    public function isValid( )
+    {
+
+    }
+    /**
+     *
+     * @param Doctrine_Schema_Table table      * @return Doctrine_Schema_Table
+     * @access public
+     */
+    public function addTable( $table = null )
+    {
+        $this->childs[] = $table;
+    }
+
+    /**
+     *
+     * @return array of Doctrine_Schema_Table
+     *
+     */
+    public function getTables()
+    {
+        return $this->childs;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..812eb0abf4442eb1a12b206bba6927684ca29526
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Exception.php
@@ -0,0 +1,40 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Schema_Exception
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema_Exception extends Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Object.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Object.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e139a190fe668839f3a71d4edf37f1b0c34ae31
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Object.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Object.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Access');
+/**
+ * class Doctrine_Schema_Object
+ * Catches any non-property call from child classes and throws an exception.
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ */
+abstract class Doctrine_Schema_Object extends Doctrine_Access implements IteratorAggregate, Countable
+{
+
+    protected $children   = array();
+
+    protected $definition = array('name' => '');
+
+    public function __construct(array $definition = array()) {
+        foreach ($this->definition as $key => $val) {
+            if (isset($definition[$key])) {
+                $this->definition[$key] = $definition[$key];
+            }
+        }
+    }
+
+    public function get($name)
+    {
+        if ( ! array_key_exists($name, $this->definition)) {
+            throw new Doctrine_Schema_Exception('Unknown definition '. $name);
+        }
+        return $this->definition[$name];
+
+    }
+
+    public function set($name, $value)
+    {
+        if ( ! array_key_exists($name, $this->definition)) {
+            throw new Doctrine_Schema_Exception('Unknown definition '. $name);
+        }
+        $this->definition[$name] = $value;
+    }
+
+    public function contains($name)
+    {
+        return array_key_exists($name, $this->definition);
+    }
+
+    public function toArray()
+    {
+        return $this->definition;
+    }
+    /**
+     *
+     * @return int
+     * @access public
+     */
+    public function count()
+    {
+        if ( ! empty($this->children)) {
+            return count($this->children);
+        }
+        return count($this->definition);
+    }
+
+    /**
+     * getIterator
+     *
+     * @return ArrayIterator
+     * @access public
+     */
+    public function getIterator()
+    {
+        if ( ! empty($this->children)) {
+            return new ArrayIterator($this->children);
+        }
+        return new ArrayIterator($this->definition);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Relation.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Relation.php
new file mode 100644
index 0000000000000000000000000000000000000000..fe6483f36b505e2f5e291f5b489e6cc1bc136578
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Relation.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ *  $Id: Relation.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Schema_Object');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Relation.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Schema_Relation
+ * Holds information on a foreign key relation.
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema_Relation extends Doctrine_Schema_Object
+{
+
+    /**
+     * Column that refers to another table
+     * @access public
+     */
+    public $referencingColumn;
+
+    /**
+     * Column that is referred from another table
+     * @access public
+     */
+    public $referencedColumn;
+
+    /**
+     * Table where the referred column lives
+     * @access public
+     *
+    */
+    public $referencedTable;
+
+    /**
+     * ON UPDATE or ON DELETE action
+     * @static
+     * @access public
+     */
+    public static $ACTION_RESTRICT = 1;
+
+    /**
+     * ON UPDATE or ON DELETE action
+     * @static
+     * @access public
+     */
+    public static $ACTION_SET_NULL = 2;
+
+    /**
+     * ON UPDATE or ON DELETE action
+     * @static
+     * @access public
+     */
+    public static $ACTION_CASCADE = 3;
+
+    /**
+     * ON UPDATE or ON DELETE action
+     * @static
+     * @access public
+     */
+    public static $ACTION_NO_ACTION = 4;
+
+    /**
+     * ON UPDATE or ON DELETE action
+     * @static
+     * @access public
+     */
+    public static $ACTION_SET_DEFAULT = 5;
+
+    /**
+     *
+     * @param Doctrine_Schema_Column referencing
+     * @param Doctrine_Schema_Table referencedtable
+     * @param Doctrine_Schema_Column referencedColumn
+     * @return
+     * @access public
+     */
+    public function setRelationBetween( $referencingColumn, $referencedTable, $referencedColumn )
+    {
+        $this->referencingColumn = $referencingColumn;
+        $this->referencedTable = $referencedTable;
+        $this->referencedColumn = $referencedColumn;
+    }
+    /**
+     * @return string
+     */
+    public function __toString( )
+    {
+        return "Relation between '".$this->referencingColumn."' and '".$this->referencedTable."'.'".$this->referencingColumn."'";
+    }
+    /**
+     *
+     * @return bool
+     */
+    public function isValid( )
+    {
+
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Table.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Table.php
new file mode 100644
index 0000000000000000000000000000000000000000..139e0807448cc06d49032f34caff051be677b724
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Schema/Table.php
@@ -0,0 +1,111 @@
+<?php
+/*
+ *  $Id: Table.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Schema_Object');
+/**
+ * @package     Doctrine
+ * @url         http://www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Jukka Hassinen <Jukka.Hassinen@BrainAlliance.com>
+ * @version     $Id: Table.php 1080 2007-02-10 18:17:08Z romanb $
+ */
+/**
+ * class Doctrine_Schema_Table
+ * Holds information on a database table
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Schema_Table extends Doctrine_Schema_Object implements Countable, IteratorAggregate
+{
+
+    protected $definition = array('name'        => '',
+                                  'check'       => '',
+                                  'charset'     => '',
+                                  'description' => '');
+    /**
+     * Relations this table has with others. An array of Doctrine_Schema_Relation
+     */
+    private $relations = array();
+    /**
+     *
+     * @return bool
+     * @access public
+     */
+    public function isValid( )
+    {
+
+    }
+    /**
+     * returns an array of Doctrine_Schema_Column objects
+     *
+     * @return array
+     */
+    public function getColumns()
+    {
+        return $this->children;
+    }
+    /**
+     * @return Doctrine_Schema_Column|false
+     */
+    public function getColumn($name)
+    {
+        if ( ! isset($this->children[$name])) {
+            return false;
+        }
+        return $this->children[$name];
+    }
+    /**
+     *
+     * @param Doctrine_Schema_Column column
+     * @return Doctrine_Schema_Table
+     * @access public
+     */
+    public function addColumn(Doctrine_Schema_Column $column)
+    {
+        $name = $column->get('name');
+        $this->children[$name] = $column;
+
+        return $this;
+    }
+
+    /**
+     * Adds a relation between a local column and a 2nd table / column
+     *
+     * @param Doctrine_Schema_Relation Relation
+     *
+    */
+    public function setRelation(Doctrine_Schema_Relation $relation){
+         $this->relations[] = $relation;
+    }
+    /**
+     * Return all the relations this table has with others
+     *
+     * @return array Array of Doctrine_Schema_Relation
+    */
+    public function getRelations(){
+        return $this->relations;
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search.php
new file mode 100644
index 0000000000000000000000000000000000000000..01531c4d86cf6f99f25fdc6668dae9bdb2f5afbb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search.php
@@ -0,0 +1,160 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search
+{
+    protected $_options = array('generateFiles' => true,
+                                'className'     => '%CLASS%Index');
+
+    
+    public function __construct(array $options)
+    {
+        $this->_options = array_merge($this->_options, $options);
+        
+        if ( ! isset($this->_options['analyzer'])) {
+            $this->_options['analyzer'] = new Doctrine_Search_Analyzer_Standard();
+        }
+    }
+
+    public function getOption($option)
+    {
+        if (isset($this->_options[$option])) {
+            return $this->_options[$option];
+        }
+        
+        throw new Doctrine_Search_Exception('Unknown option ' . $option);
+    }
+    
+    public function analyze($text)
+    {
+        return $this->_options['analyzer']->analyze($text);
+    }
+
+    public function setOption($option, $value)
+    {
+        $this->_options[$option] = $value;
+
+        return $this;
+    }
+    /**
+     * updateIndex
+     * updates the index
+     *
+     * @param Doctrine_Record $record
+     * @return integer
+     */
+    public function updateIndex(Doctrine_Record $record) 
+    {
+    	$fields = $this->getOption('fields');
+        $class  = $this->getOption('className');
+        $name   = $record->getTable()->getComponentName();
+
+        foreach ($fields as $field) {
+            $data  = $record->get($field);
+
+            $terms = $this->analyze($data);
+
+            foreach ($terms as $pos => $term) {
+                $index = new $class();
+
+                $index->keyword = $term;
+                $index->position = $pos;
+                $index->field = $field;
+                $index->$name = $record;
+                
+                $index->save();
+            }
+        }
+    }
+    public function buildDefinition(Doctrine_Table $table)
+    {
+        $name = $table->getComponentName();
+
+        $className = $this->getOption('className');
+        
+        if (class_exists($className)) {
+            return false;
+        }
+
+        $columns = array('keyword'  => array('type'    => 'string',
+                                             'length'  => 200,
+                                             'notnull' => true,
+                                             'primary' => true,
+                                             ),
+                         'field'    => array('type'    => 'string',
+                                             'length'  => 50,
+                                             'notnull' => true,
+                                             'primary' => true),
+                         'position' => array('type'    => 'integer',
+                                             'length'  => 8,
+                                             'primary' => true,
+                                             ));
+
+        $id = $table->getIdentifier();
+
+        $options = array('className' => $className);
+
+
+        $fk = array();
+        foreach ((array) $id as $column) {
+            $def = $table->getDefinitionOf($column);
+
+            unset($def['autoincrement']);
+            unset($def['sequence']);
+            unset($def['primary']);
+
+            $col = strtolower(Doctrine::tableize($name) . '_' . $column);
+
+            $def['primary'] = true;
+            $fk[$col] = $def;
+        }
+        
+        $local = (count($fk) > 1) ? array_keys($fk) : key($fk);
+        
+        $relations = array($name => array('local' => $local,
+                                          'foreign' => $id, 
+                                          'onDelete' => 'CASCADE',
+                                          'onUpdate' => 'CASCADE'));
+
+
+        $columns += $fk;
+
+        $builder = new Doctrine_Import_Builder();
+
+        $def = $builder->buildDefinition($options, $columns, $relations);
+    
+        if ( ! $this->_options['generateFiles']) {
+            eval($def);
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4d30bceb9034bf1e77c52fbbdba1e791e23c3f9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Analyzer
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Analyzer implements Doctrine_Search_Analyzer_Interface
+{
+    public function analyze($text)
+    {
+    
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..65490d0f421efc19a053564010aa8e85f042a005
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Search_Exception');
+/**
+ * Doctrine_Search_Analyzer_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Search_Analyzer_Exception extends Doctrine_Search_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..696e891e66014a1286af8597311720a61fd7bf13
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Interface.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Analyzer_Interface
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+interface Doctrine_Search_Analyzer_Interface
+{
+    public function analyze($text);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Standard.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Standard.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e2cdda1a1fe2fb6365f59a61a2421f0962f7bd7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Analyzer/Standard.php
@@ -0,0 +1,291 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Analyzer_Standard
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Analyzer_Standard implements Doctrine_Search_Analyzer_Interface
+{
+    protected static $_stopwords = array(
+                            '0',
+                            '1',
+                            '2',
+                            '3',
+                            '4',
+                            '5',
+                            '6',
+                            '7',
+                            '8',
+                            '9',
+                            '10',
+                            'a',
+                            'about',
+                            'after',
+                            'all',
+                            'almost',
+                            'along',
+                            'also',
+                            'amp',
+                            'an',
+                            'and',
+                            'another',
+                            'any',
+                            'are',
+                            'area',
+                            'around',
+                            'as',
+                            'at',
+                            'available',
+                            'back',
+                            'be',
+                            'because',
+                            'been',
+                            'being',
+                            'best',
+                            'better',
+                            'big',
+                            'bit',
+                            'both',
+                            'but',
+                            'by',
+                            'c',
+                            'came',
+                            'can',
+                            'capable',
+                            'control',
+                            'could',
+                            'course',
+                            'd',
+                            'dan',
+                            'day',
+                            'decided',
+                            'did',
+                            'didn',
+                            'different',
+                            'div',
+                            'do',
+                            'doesn',
+                            'don',
+                            'down',
+                            'drive',
+                            'e',
+                            'each',
+                            'easily',
+                            'easy',
+                            'edition',
+                            'end',
+                            'enough',
+                            'even',
+                            'every',
+                            'example',
+                            'few',
+                            'find',
+                            'first',
+                            'for',
+                            'found',
+                            'from',
+                            'get',
+                            'go',
+                            'going',
+                            'good',
+                            'got',
+                            'gt',
+                            'had',
+                            'hard',
+                            'has',
+                            'have',
+                            'he',
+                            'her',
+                            'here',
+                            'how',
+                            'i',
+                            'if',
+                            'in',
+                            'into',
+                            'is',
+                            'isn',
+                            'it',
+                            'just',
+                            'know',
+                            'last',
+                            'left',
+                            'li',
+                            'like',
+                            'little',
+                            'll',
+                            'long',
+                            'look',
+                            'lot',
+                            'lt',
+                            'm',
+                            'made',
+                            'make',
+                            'many',
+                            'mb',
+                            'me',
+                            'menu',
+                            'might',
+                            'mm',
+                            'more',
+                            'most',
+                            'much',
+                            'my',
+                            'name',
+                            'nbsp',
+                            'need',
+                            'new',
+                            'no',
+                            'not',
+                            'now',
+                            'number',
+                            'of',
+                            'off',
+                            'old',
+                            'on',
+                            'one',
+                            'only',
+                            'or',
+                            'original',
+                            'other',
+                            'our',
+                            'out',
+                            'over',
+                            'part',
+                            'place',
+                            'point',
+                            'pretty',
+                            'probably',
+                            'problem',
+                            'put',
+                            'quite',
+                            'quot',
+                            'r',
+                            're',
+                            'really',
+                            'results',
+                            'right',
+                            's',
+                            'same',
+                            'saw',
+                            'see',
+                            'set',
+                            'several',
+                            'she',
+                            'sherree',
+                            'should',
+                            'since',
+                            'size',
+                            'small',
+                            'so',
+                            'some',
+                            'something',
+                            'special',
+                            'still',
+                            'stuff',
+                            'such',
+                            'sure',
+                            'system',
+                            't',
+                            'take',
+                            'than',
+                            'that',
+                            'the',
+                            'their',
+                            'them',
+                            'then',
+                            'there',
+                            'these',
+                            'they',
+                            'thing',
+                            'things',
+                            'think',
+                            'this',
+                            'those',
+                            'though',
+                            'through',
+                            'time',
+                            'to',
+                            'today',
+                            'together',
+                            'too',
+                            'took',
+                            'two',
+                            'up',
+                            'us',
+                            'use',
+                            'used',
+                            'using',
+                            've',
+                            'very',
+                            'want',
+                            'was',
+                            'way',
+                            'we',
+                            'well',
+                            'went',
+                            'were',
+                            'what',
+                            'when',
+                            'where',
+                            'which',
+                            'while',
+                            'white',
+                            'who',
+                            'will',
+                            'with',
+                            'would',
+                            'you',
+                            'your',
+                            );
+
+    public function analyze($text)
+    {
+    	$text = preg_replace('/[.()&#!,?^£@%&{}+]/', ' ', $text);
+        $text = str_replace('  ', ' ', $text);
+
+        $terms = explode(' ', $text);
+        
+        $ret = array();
+        if ( ! empty($terms)) {
+            foreach ($terms as $i => $term) {
+                if (empty($term)) {
+                    continue;
+                }
+                $lower = strtolower(trim($term));
+
+                if (in_array($lower, self::$_stopwords)) {
+                    continue;
+                }
+
+                $ret[$i] = $lower;
+            }
+        }
+        return $ret;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..0766c26fad62c702eccdebb93c492691565e30b0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Search_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Search_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer.php
new file mode 100644
index 0000000000000000000000000000000000000000..298a5a3f0548b7c4d6db65feaa23432bdba832f4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer.php
@@ -0,0 +1,75 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Indexer
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Indexer
+{
+    public function indexDirectory($dir)
+    {
+    	if ( ! file_exists($dir)) {
+    	   throw new Doctrine_Search_Indexer_Exception('Unknown directory ' . $dir);
+    	}
+
+        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY);
+
+        $files = array();
+        foreach ($it as $file) {
+            $name = $file->getPathName();
+            if (strpos($name, '.svn') === false) {
+                $files[] = $name;
+            }
+        }
+
+        $q = new Doctrine_Query();
+        $q->delete()
+          ->from('Doctrine_File f')
+          ->where('f.url LIKE ?', array($dir . '%'))
+          ->execute();
+
+        // clear the index
+        $q = new Doctrine_Query();
+        $q->delete()
+          ->from('Doctrine_File_Index i')
+          ->where('i.file_id = ?')
+          ->execute();
+
+
+        $conn = Doctrine_Manager::connection();
+
+        $coll = new Doctrine_Collection('Doctrine_File');
+
+        foreach ($files as $file) {
+            $coll[]->url = $file;
+        }
+        
+        $coll->save();
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Dir.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Dir.php
new file mode 100644
index 0000000000000000000000000000000000000000..bebacedfc8bcb839309c99e821c5f9e422e94655
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Dir.php
@@ -0,0 +1,47 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Indexer_Dir
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Indexer_Dir
+{
+    public function add($dir)
+    {
+    	if ( ! file_exists($dir)) {
+    	   throw new Doctrine_Search_Indexer_Exception('Unknown directory ' . $dir);
+    	}
+
+        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY);
+        
+        foreach ($it as $file) {
+            $this->indexFile($file);
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..f99297ac73e16166034c7a6c575f1e43a56f22e2
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Indexer/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Indexer
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Indexer_Exception extends Doctrine_Search_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Listener.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Listener.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3d0633e5b79bec5d95af60f5295b46da7b1bab4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Listener.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Listener
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Listener extends Doctrine_Record_Listener 
+{
+    protected $_search;
+
+    public function __construct(Doctrine_Search $search)
+    {
+        $this->_search = $search;
+    }
+
+    public function preUpdate(Doctrine_Event $event)
+    {
+    }
+
+    public function postUpdate(Doctrine_Event $event)
+    {
+
+    }
+    public function postInsert(Doctrine_Event $event)
+    {
+        $record = $event->getInvoker();
+        
+        $this->_search->updateIndex($record);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Parser.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Parser.php
new file mode 100644
index 0000000000000000000000000000000000000000..51173d88c850803b3d879a825d3b4ad41fb41b54
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Parser.php
@@ -0,0 +1,41 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Parser_Standard
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Parser
+{
+    public function parse($file)
+    {
+        $contents = file_get_contents($file);
+        
+        return array('url' => $file, 'contents' => $contents);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Query.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Query.php
new file mode 100644
index 0000000000000000000000000000000000000000..734c9106fdd48dfb692c0dab5145fb2d139db316
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Query.php
@@ -0,0 +1,237 @@
+<?php
+/*
+ *  $Id: Hook.php 1939 2007-07-05 23:47:48Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Query
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1939 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Search_Query
+{
+    /**
+     * @var Doctrine_Query $query           the base query
+     */
+    protected $_query;
+    /**
+     * @var Doctrine_Table $_table          the index table
+     */
+    protected $_table = array();
+    
+    protected $_sql = '';
+    
+    protected $_params = array();
+    
+
+    protected $_condition;
+    /**
+     * @param octrine_Table $_table         the index table
+     */
+    public function __construct($table)
+    {
+        if (is_string($table)) {
+           $table = Doctrine_Manager::table($table);
+        }
+
+        $this->_table = $table;
+
+        $this->_query = new Doctrine_Query();
+        $foreignId = current(array_diff($this->_table->getColumnNames(), array('keyword', 'field', 'position')));
+
+        $this->_condition = $foreignId . ' %s (SELECT ' . $foreignId . ' FROM ' . $this->_table->getTableName() . ' WHERE ';
+    }
+    /**
+     * getQuery
+     *
+     * @return Doctrine_Query       returns the query object associated with this object
+     */
+    public function getQuery()
+    {
+        return $this->_query;
+    }
+
+    public function search($text)
+    {
+        $text = trim($text);
+        
+        $foreignId = current(array_diff($this->_table->getColumnNames(), array('keyword', 'field', 'position')));
+
+        $weighted = false;
+        if (strpos($text, '^') === false) {
+            $select = 'SELECT COUNT(keyword) AS relevance, ' . $foreignId;
+            $from = 'FROM ' . $this->_table->getTableName();
+        } else {
+            // organize terms according weights
+            $weighted = true;
+
+            $select = 'SELECT SUM(sub_relevance) AS relevance, ' . $foreignId;
+            $from = 'FROM ' ;
+        }
+        
+        $where = 'WHERE ';
+        $where .= $this->parseClause($text);
+
+        $groupby = 'GROUP BY ' . $foreignId;
+        $orderby = 'ORDER BY relevance';
+
+        $this->_sql = $select . ' ' . $from . ' ' . $where . ' ' . $groupby . ' ' . $orderby;
+    }
+
+    public function parseClause($originalClause, $recursive = false)
+    {
+        $clause = Doctrine_Tokenizer::bracketTrim($originalClause);
+        
+        $brackets = false;
+
+        if ($clause !== $originalClause) {
+            $brackets = true;
+        }
+
+        $foreignId = current(array_diff($this->_table->getColumnNames(), array('keyword', 'field', 'position')));
+        
+        $terms = Doctrine_Tokenizer::sqlExplode($clause, ' OR ', '(', ')');
+
+        $ret = array();
+
+        if (count($terms) > 1) {
+            $leavesOnly = true;
+
+            foreach ($terms as $k => $term) {
+                if ($this->isExpression($term)) {
+                    $ret[$k] = $this->parseClause($term, true);
+                    $leavesOnly = false;
+                } else {
+                    $ret[$k] = $this->parseTerm($term);
+                }
+            }
+
+            $return = implode(' OR ', $ret);
+
+            if ($leavesOnly && $recursive) {
+                $return = sprintf($this->_condition, 'IN') . $return . ')';
+                $brackets = false;
+            }
+        } else {
+            $terms = Doctrine_Tokenizer::sqlExplode($clause, ' ', '(', ')');
+            
+            if (count($terms) === 1 && ! $recursive) {
+                $return = $this->parseTerm($clause);
+            } else {
+                foreach ($terms as $k => $term) {
+                    $term = trim($term);
+    
+                    if ($term === 'AND') {
+                        continue;
+                    }
+    
+                    if (substr($term, 0, 1) === '-') {
+                        $operator = 'NOT IN';
+                        $term = substr($term, 1);
+                    } else {
+                        $operator = 'IN';
+                    }
+    
+                    if ($this->isExpression($term)) {
+                        $ret[$k] = $this->parseClause($term, true);
+                    } else {
+                        $ret[$k] = sprintf($this->_condition, $operator) . $this->parseTerm($term) . ')';
+                    }
+                }
+                $return = implode(' AND ', $ret);
+            }
+        }
+
+        if ($brackets) {
+            return '(' . $return . ')';
+        } else {
+            return $return;
+        }
+    }
+    public function isExpression($term)
+    {
+        if (strpos($term, '(') !== false) {
+            return true;
+        } else {
+            $terms = Doctrine_Tokenizer::quoteExplode($term);
+            
+            return (count($terms) > 1);
+        }
+    }
+
+    public function parseTerm($term)
+    {
+    	$negation = false;
+
+        if (strpos($term, "'") === false) {
+            $where = $this->parseWord($term);
+        } else {
+            $term = trim($term, "' ");
+
+            $terms = Doctrine_Tokenizer::quoteExplode($term);
+            $where = $this->parseWord($terms[0]);
+
+            foreach ($terms as $k => $word) {
+                if ($k === 0) {
+                    continue;
+                }
+                $where .= ' AND (position + ' . $k . ') = (SELECT position FROM ' . $this->_table->getTableName() . ' WHERE ' . $this->parseWord($word) . ')';
+            }
+        }
+        return $where;
+    }
+    public function parseWord($word) 
+    {
+        if (strpos($word, '?') !== false ||
+            strpos($word, '*') !== false) {
+            
+            $word = str_replace('*', '%', $word);
+
+            $where = 'keyword LIKE ?';
+            
+            $params = array($word);
+        } else {
+            $where = 'keyword = ?';
+        }
+        
+        $this->_params[] = $word;
+
+        return $where;
+    }
+    public function getParams()
+    {
+        return $this->_params;
+    }
+    public function getSql()
+    {
+        return $this->_sql;
+    }
+    public function execute()
+    {
+        $resultSet = $this->_query->execute(); 
+        
+        return $resultSet;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Record.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Record.php
new file mode 100644
index 0000000000000000000000000000000000000000..28684965c6b7acd3f98fa3761984834187c17fa1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Record.php
@@ -0,0 +1,47 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Record
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Record extends Doctrine_Template
+{
+    public function setTableDefinition()
+    {
+        $this->hasColumn('keyword', 'string', 250, array('notnull' => true));
+        $this->hasColumn('field', 'string', 50, array('notnull' => true));
+        $this->hasColumn('position', 'integer', 8);
+        // depending on the identifiers of the owner record this record 
+        // has also one to many foreign key columns
+    }
+    public function setUp()
+    {
+        $this->hasOne('[Component]', array('onDelete' => 'CASCADE'));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Scorer.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Scorer.php
new file mode 100644
index 0000000000000000000000000000000000000000..431ead8f0240b4e2af369ab27bca01769afffa46
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Scorer.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Scorer
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Scorer
+{
+
+    protected $_resultSet;
+    
+    protected $_components = array();
+
+    public function __construct($resultSet)
+    {
+        $this->_resultSet = $resultSet;
+    }
+
+    public function addComponent($component)
+    {
+        $this->_components[] = $component;
+    }
+
+    public function process()
+    {
+        foreach ($this->_resultSet as $mainRow) {
+            if (isset($mainRow[$component])) {
+                if ( ! is_array($mainRow[$component])) {
+                    throw new Doctrine_Search_Exception('Wrong data type in result set.');
+                }
+                
+                foreach ($mainRow[$component] as $indexRow) {
+
+                }
+            }
+        }
+    }
+    
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Template.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Template.php
new file mode 100644
index 0000000000000000000000000000000000000000..10749ef7d3cb83cacf68aa29b0ad76b81ed47623
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Search/Template.php
@@ -0,0 +1,60 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Search_Template
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Search_Template extends Doctrine_Template
+{     
+    protected $_search;
+
+    public function __construct(array $options)
+    {
+        $this->_search = new Doctrine_Search($options);
+    }
+    public function setUp()
+    {
+        $this->_search->buildDefinition($this->_table);
+
+        $id = $this->_table->getIdentifier();
+        $name = $this->_table->getComponentName() . 'Index';
+
+        $this->_search->setOption('className', $name);
+
+        foreach ((array) $id as $column) {
+            $foreign[] = strtolower($this->_table->getComponentName() . '_' . $column);
+        }
+
+        $foreign = (count($foreign) > 1) ? $foreign : current($foreign);
+
+        $this->hasMany($name, array('local' => $id, 'foreign' => $foreign));
+
+        $this->addListener(new Doctrine_Search_Listener($this->_search));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence.php
new file mode 100644
index 0000000000000000000000000000000000000000..503a423db84d2156d8e2f170964029a24bdc39d6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence.php
@@ -0,0 +1,72 @@
+<?php
+/*
+ *  $Id: Sequence.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Sequence
+ * The base class for sequence handling drivers.
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Sequence extends Doctrine_Connection_Module
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool              when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextId($seqName, $ondemand = true)
+    {
+        throw new Doctrine_Sequence_Exception('method not implemented');
+    }
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        throw new Doctrine_Sequence_Exception('method not implemented');
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $this->warnings[] = 'database does not support getting current
+            sequence value, the sequence value was incremented';
+        return $this->nextId($seqName);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Db2.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Db2.php
new file mode 100644
index 0000000000000000000000000000000000000000..a8e3b22cde1fc76cca5e15dd96bb0bedca7c766e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Db2.php
@@ -0,0 +1,123 @@
+<?php
+/*
+ *  $Id: Db2.php 1722 2007-06-17 17:50:05Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Db2
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1722 $
+ */
+class Doctrine_Sequence_Db2 extends Doctrine_Sequence
+{
+    /**
+     * Return the most recent value from the specified sequence in the database.
+     * This is supported only on RDBMS brands that support sequences
+     * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.
+     *
+     * @param string $sequenceName
+     * @return integer
+     * @throws Doctrine_Adapter_Db2_Exception
+     */
+    public function lastSequenceId($sequenceName)
+    {
+        $sql = 'SELECT PREVVAL FOR '
+             . $this->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName))
+             . ' AS VAL FROM SYSIBM.SYSDUMMY1';
+
+        $stmt   = $this->query($sql);
+        $result = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
+        if ($result) {
+            return $result[0]['VAL'];
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Generate a new value from the specified sequence in the database, and return it.
+     * This is supported only on RDBMS brands that support sequences
+     * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.
+     *
+     * @param string $sequenceName
+     * @return integer
+     * @throws Doctrine_Adapter_Db2_Exception
+     */
+    public function nextSequenceId($sequenceName)
+    {
+        $this->_connect();
+        $sql = 'SELECT NEXTVAL FOR '
+             . $this->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName))
+             . ' AS VAL FROM SYSIBM.SYSDUMMY1';
+        $stmt = $this->query($sql);
+        $result = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
+        if ($result) {
+            return $result[0]['VAL'];
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column.
+     *
+     * As a convention, on RDBMS brands that support sequences
+     * (e.g. Oracle, PostgreSQL, DB2), this method forms the name of a sequence
+     * from the arguments and returns the last id generated by that sequence.
+     * On RDBMS brands that support IDENTITY/AUTOINCREMENT columns, this method
+     * returns the last value generated for such a column, and the table name
+     * argument is disregarded.
+     *
+     * The IDENTITY_VAL_LOCAL() function gives the last generated identity value
+     * in the current process, even if it was for a GENERATED column.
+     *
+     * @param string $tableName OPTIONAL
+     * @param string $primaryKey OPTIONAL
+     * @return integer
+     * @throws Doctrine_Adapter_Db2_Exception
+     */
+    public function lastInsertId($tableName = null, $primaryKey = null)
+    {
+        $this->_connect();
+
+        if ($tableName !== null) {
+            $sequenceName = $tableName;
+            if ($primaryKey) {
+                $sequenceName .= "_$primaryKey";
+            }
+            $sequenceName .= '_seq';
+            return $this->lastSequenceId($sequenceName);
+        }
+
+        $sql = 'SELECT IDENTITY_VAL_LOCAL() AS VAL FROM SYSIBM.SYSDUMMY1';
+        $stmt = $this->query($sql);
+        $result = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
+        if ($result) {
+            return $result[0]['VAL'];
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f5c9cc77ee3e8018c44dd8b51ca4441d43ef140
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Sequence_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Sequence_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e244ec56c36badd6109e4c97e61c968d215fe92
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Firebird.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ *  $Id: Firebird.php 1619 2007-06-10 19:28:47Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Firebird
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1619 $
+ */
+class Doctrine_Sequence_Firebird extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool              when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextID($seqName, $onDemand = true)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+
+        $query = 'SELECT GEN_ID(' . $sequenceName . ', 1) as the_value FROM RDB$DATABASE';
+        try {
+        
+            $result = $this->conn->fetchOne($query);
+
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                // Since we are creating the sequence on demand
+                // we know the first id = 1 so initialize the
+                // sequence at 2
+                try {
+                    $result = $this->conn->export->createSequence($seqName, 2);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                // First ID of a newly created sequence is 1
+                // return 1;
+                // BUT generators are not always reset, so return the actual value
+                return $this->currID($seqName);
+            }
+            throw $e;
+        }
+        return $result;
+    }
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        return $this->conn->getDbh()->lastInsertId();
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        
+
+        $query = 'SELECT GEN_ID(' . $sequenceName . ', 0) as the_value FROM RDB$DATABASE';
+        try {
+            $value = $this->conn->fetchOne($query);
+        } catch(Doctrine_Connection_Exception $e) {
+            throw new Doctrine_Sequence_Exception('Unable to select from ' . $seqName);
+        }
+        if ( ! is_numeric($value)) {
+            throw new Doctrine_Sequence_Exception('could not find value in sequence table');
+        }
+        return $value;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..2b9561e2de984708b3d59d5bd070e661df19d688
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Informix.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ *  $Id: Informix.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Sequence_Informix
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Sequence_Informix extends Doctrine_Sequence
+{
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..6208e7f4f17bd7f57b39d3a6b0716f636a511c5b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mssql.php
@@ -0,0 +1,155 @@
+<?php
+/*
+ *  $Id: Mssql.php 1934 2007-07-05 22:42:32Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Mssql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1934 $
+ */
+class Doctrine_Sequence_Mssql extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool              when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextId($seqName, $onDemand = true)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $seqcolName   = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+
+
+        if ($this->checkSequence($sequenceName)) {
+            $query = 'SET IDENTITY_INSERT ' . $sequenceName . ' OFF '
+                   . 'INSERT INTO ' . $sequenceName . ' DEFAULT VALUES';
+        } else {
+            $query = 'INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES (0)';
+        }
+        
+        try {
+
+            $this->conn->exec($query);
+
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                // Since we are creating the sequence on demand
+                // we know the first id = 1 so initialize the
+                // sequence at 2
+                try {
+                    $result = $this->conn->export->createSequence($seqName, 2);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                
+                /**
+                 * This could actually be a table that starts at 18.. oh well..
+                 * we will keep the fallback to return 1 in case we skip this.. which
+                 * should really not happen.. otherwise the returned values is biased.
+                 */
+                if ($this->checkSequence($seqName)) {
+                    return $this->lastInsertId($seqName);
+                }
+                
+                return 1;
+            }
+            throw $e;
+        }
+        
+        $value = $this->lastInsertId($sequenceName);
+
+        if (is_numeric($value)) {
+            $query = 'DELETE FROM ' . $sequenceName . ' WHERE ' . $seqcolName . ' < ' . $value;
+            
+            try {
+                $this->conn->exec($query);
+            } catch (Doctrine_Connection_Exception $e) {
+                throw new Doctrine_Sequence_Exception('Could not delete previous sequence from ' . $sequenceName . 
+                                                      ' at ' . __FILE__ . ' in ' . __FUNCTION__ . ' with the message: ' .
+                                                      $e->getMessage());
+            }
+        }
+        return $value;
+    }
+    /**
+     * Checks if there's a sequence that exists.
+     *
+     * @param  string $seqName     The sequence name to verify.
+     * @return bool   $tableExists The value if the table exists or not
+     * @access private
+     */
+    public function checkSequence($seqName)
+    {
+        $query = 'SELECT COUNT(1) FROM ' . $seqName;
+        try {
+            $this->conn->execute($query);
+        } catch (Doctrine_Connection_Exception $e) {
+            if ($e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        $serverInfo = $this->conn->getServerVersion();
+        if (is_array($serverInfo)
+            && ! is_null($serverInfo['major'])
+            && $serverInfo['major'] >= 8) {
+
+            $query = 'SELECT SCOPE_IDENTITY()';
+
+        } else {
+            $query = 'SELECT @@IDENTITY';
+        }
+
+        return $this->conn->fetchOne($query);
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $this->warnings[] = 'database does not support getting current
+            sequence value, the sequence value was incremented';
+        return $this->nextId($seqName);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4465ebc324f0a2337c0d822afe173099a781431
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Mysql.php
@@ -0,0 +1,110 @@
+<?php
+/*
+ *  $Id: Mysql.php 1721 2007-06-17 17:49:13Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Mysql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1721 $
+ */
+class Doctrine_Sequence_Mysql extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool              when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextId($seqName, $onDemand = true)
+    {
+        $sequenceName  = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $seqcolName    = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+        $query         = 'INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES (NULL)';
+        
+        try {
+
+            $this->conn->exec($query);
+
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                // Since we are creating the sequence on demand
+                // we know the first id = 1 so initialize the
+                // sequence at 2
+                try {
+                    $result = $this->conn->export->createSequence($seqName, 2);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                // First ID of a newly created sequence is 1
+                return 1;
+            }
+            throw $e;
+        }
+
+        $value = $this->lastInsertId();
+
+        if (is_numeric($value)) {
+            $query = 'DELETE FROM ' . $sequenceName . ' WHERE ' . $seqcolName . ' < ' . $value;
+            $this->conn->exec($query);
+            /**
+            TODO: is the following needed ?
+            if (PEAR::isError($result)) {
+                $this->warnings[] = 'nextID: could not delete previous sequence table values from '.$seq_name;
+            }
+            */
+        }
+        return $value;
+    }
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param string  name of the table into which a new row was inserted
+     * @param string  name of the field into which a new row was inserted
+     * @return integer|boolean
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        return $this->conn->getDbh()->lastInsertId();
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $sequenceName   = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $seqcolName     = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+        $query          = 'SELECT MAX(' . $seqcolName . ') FROM ' . $sequenceName;
+
+        return (int) $this->conn->fetchOne($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..f48db09455ce7de739a3a0eb422bccbccb1fef50
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Oracle.php
@@ -0,0 +1,94 @@
+<?php
+/*
+ *  $Id: Oracle.php 1619 2007-06-10 19:28:47Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Oracle
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1619 $
+ */
+class Doctrine_Sequence_Oracle extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool onDemand     when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextID($seqName, $onDemand = true)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $query        = 'SELECT ' . $sequenceName . '.nextval FROM DUAL';
+
+        try {
+            $result = $this->conn->fetchOne($query);
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+
+                try {
+                    $result = $this->conn->export->createSequence($seqName);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                return $this->nextId($seqName, false);
+            }
+            throw $e;
+        }
+        return $result;
+    }
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     */
+    public function lastInsertID($table = null, $field = null)
+    {
+        $seqName = $table . (empty($field) ? '' : '_'.$field);
+        $sequenceName =  $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+
+        return $this->conn->fetchOne('SELECT ' . $sequenceName . '.currval');
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currID($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $query   = 'SELECT (last_number-1) FROM user_sequences';
+        $query  .= ' WHERE sequence_name=' . $this->conn->quote($sequenceName, 'text');
+        $query  .= ' OR sequence_name=' . $this->conn->quote(strtoupper($sequenceName), 'text');
+
+        return $this->conn->fetchOne($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..9dc22d9ec1f2840b0a26c6188fa017745dc153af
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Pgsql.php
@@ -0,0 +1,92 @@
+<?php
+/*
+ *  $Id: Pgsql.php 1632 2007-06-11 23:37:24Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Pgsql
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1632 $
+ */
+class Doctrine_Sequence_Pgsql extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool onDemand     when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextId($seqName, $onDemand = true)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+
+        $query = "SELECT NEXTVAL('" . $sequenceName . "')";
+        try {
+            $result = (int) $this->conn->fetchOne($query);
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+
+                try {
+                    $result = $this->conn->export->createSequence($seqName);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                return $this->nextId($seqName, false);
+            }
+        }
+        return $result;
+    }
+    /**
+     * lastInsertId
+     *
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     * @return integer      the autoincremented id
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        $seqName = $table . (empty($field) ? '' : '_' . $field);
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+
+        return (int) $this->conn->fetchOne("SELECT CURRVAL('" . $sequenceName . "')");
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        return (int) $this->conn->fetchOne('SELECT last_value FROM ' . $sequenceName);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..4bf8a2dbea8e6cfcad054e979aefdecd4d5e145c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Sequence/Sqlite.php
@@ -0,0 +1,112 @@
+<?php
+/*
+ *  $Id: Sqlite.php 1722 2007-06-17 17:50:05Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Sequence');
+/**
+ * Doctrine_Sequence_Sqlite
+ *
+ * @package     Doctrine
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1722 $
+ */
+class Doctrine_Sequence_Sqlite extends Doctrine_Sequence
+{
+    /**
+     * Returns the next free id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     * @param bool $onDemand    when true missing sequences are automatic created
+     *
+     * @return integer          next id in the given sequence
+     */
+    public function nextId($seqName, $onDemand = true)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $seqcolName   = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+
+        $query        = 'INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES (NULL)';
+
+        try {
+
+            $this->conn->exec($query);
+
+        } catch(Doctrine_Connection_Exception $e) {
+            if ($onDemand && $e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) {
+                // Since we are creating the sequence on demand
+                // we know the first id = 1 so initialize the
+                // sequence at 2
+
+                try {
+                    $result = $this->conn->export->createSequence($seqName, 2);
+                } catch(Doctrine_Exception $e) {
+                    throw new Doctrine_Sequence_Exception('on demand sequence ' . $seqName . ' could not be created');
+                }
+                // First ID of a newly created sequence is 1
+                return 1;
+            }
+            throw $e;
+        }
+
+        $value = $this->conn->getDbh()->lastInsertId();
+
+        if (is_numeric($value)) {
+            $query = 'DELETE FROM ' . $sequenceName . ' WHERE ' . $seqcolName . ' < ' . $value;
+            
+            $this->conn->exec($query);
+            /**
+            TODO: is the following needed ?
+            $this->warnings[] = 'nextID: could not delete previous sequence table values from '.$seq_name;
+            */
+        }
+        return $value;
+    }
+    /**
+     * Returns the autoincrement ID if supported or $id or fetches the current
+     * ID in a sequence called: $table.(empty($field) ? '' : '_'.$field)
+     *
+     * @param   string  name of the table into which a new row was inserted
+     * @param   string  name of the field into which a new row was inserted
+     * @return integer|boolean
+     */
+    public function lastInsertId($table = null, $field = null)
+    {
+        return $this->conn->getDbh()->lastInsertId();
+    }
+    /**
+     * Returns the current id of a sequence
+     *
+     * @param string $seqName   name of the sequence
+     *
+     * @return integer          current id in the given sequence
+     */
+    public function currId($seqName)
+    {
+        $sequenceName = $this->conn->quoteIdentifier($this->conn->formatter->getSequenceName($seqName), true);
+        $seqcolName   = $this->conn->quoteIdentifier($this->conn->getAttribute(Doctrine::ATTR_SEQCOL_NAME), true);
+
+        $query        = 'SELECT MAX(' . $seqcolName . ') FROM ' . $sequenceName;
+
+        return (int) $this->conn->fetchOne($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b6e78e5dbc41c76944506aabe7a181ab423940f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table.php
@@ -0,0 +1,1328 @@
+<?php
+/*
+ *  $Id: Table.php 2279 2007-08-27 15:04:32Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Table   represents a database table
+ *                  each Doctrine_Table holds the information of foreignKeys and associations
+ *
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision: 2279 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Table extends Doctrine_Configurable implements Countable
+{
+    /**
+     * @var array $data                                 temporary data which is then loaded into Doctrine_Record::$data
+     */
+    private $data             = array();
+    /**
+     * @var array $primaryKeys                          an array containing all primary key column names
+     */
+    private $primaryKeys      = array();
+    /**
+     * @var mixed $identifier
+     */
+    private $identifier;
+    /**
+     * @see Doctrine_Identifier constants
+     * @var integer $identifierType                     the type of identifier this table uses
+     */
+    private $identifierType;
+    /**
+     * @var Doctrine_Connection $conn                   Doctrine_Connection object that created this table
+     */
+    private $conn;
+    /**
+     * @var array $identityMap                          first level cache
+     */
+    private $identityMap        = array();
+    /**
+     * @var Doctrine_Table_Repository $repository       record repository
+     */
+    private $repository;
+    /**
+     * @var array $columns                  an array of column definitions,
+     *                                      keys as column names and values as column definitions
+     *
+     *                                      the definition array has atleast the following values:
+     *
+     *                                      -- type         the column type, eg. 'integer'
+     *                                      -- length       the column length, eg. 11
+     *
+     *                                      additional keys:
+     *                                      -- notnull      whether or not the column is marked as notnull
+     *                                      -- values       enum values
+     *                                      -- notblank     notblank validator + notnull constraint
+     *                                      ... many more
+     */
+    protected $columns          = array();
+    /**
+     * @var array $columnAliases            an array of column aliases
+     *                                      keys as column aliases and values as column names
+     */
+    protected $columnAliases    = array();
+    /**
+     * @var integer $columnCount            cached column count, Doctrine_Record uses this column count in when
+     *                                      determining its state
+     */
+    private $columnCount;
+    /**
+     * @var boolean $hasDefaultValues       whether or not this table has default values
+     */
+    private $hasDefaultValues;
+    /**
+     * @var array $options                  an array containing all options
+     *
+     *      -- name                         name of the component, for example component name of the GroupTable is 'Group'
+     *
+     *      -- parents                      the parent classes of this component
+     *
+     *      -- declaringClass               name of the table definition declaring class (when using inheritance the class
+     *                                      that defines the table structure can be any class in the inheritance hierarchy, 
+     *                                      hence we need reflection to check out which class actually calls setTableDefinition)
+     *
+     *      -- tableName                    database table name, in most cases this is the same as component name but in some cases
+     *                                      where one-table-multi-class inheritance is used this will be the name of the inherited table
+     *
+     *      -- sequenceName                 Some databases need sequences instead of auto incrementation primary keys,
+     *                                      you can set specific sequence for your table by calling setOption('sequenceName', $seqName)
+     *                                      where $seqName is the name of the desired sequence
+     *
+     *      -- enumMap                      enum value arrays
+     *
+     *      -- inheritanceMap               inheritanceMap is used for inheritance mapping, keys representing columns and values
+     *                                      the column values that should correspond to child classes
+     *
+     *      -- type                         table type (mysql example: INNODB)
+     *
+     *      -- charset                      character set
+     *
+     *      -- foreignKeys                  the foreign keys of this table
+     *
+     *      -- checks                       the check constraints of this table, eg. 'price > dicounted_price'
+     *
+     *      -- collation                    collation attribute
+     *
+     *      -- indexes                      the index definitions of this table
+     *
+     *      -- treeImpl                     the tree implementation of this table (if any)
+     *
+     *      -- treeOptions                  the tree options
+     *
+     *      -- versioning
+     */
+    protected $options          = array('name'           => null,
+                                        'tableName'      => null,
+                                        'sequenceName'   => null,
+                                        'inheritanceMap' => array(),
+                                        'enumMap'        => array(),
+                                        'engine'         => null,
+                                        'charset'        => null,
+                                        'collation'      => null,
+                                        'treeImpl'       => null,
+                                        'treeOptions'    => null,
+                                        'indexes'        => array(),
+                                        'parents'        => array(),
+                                        'versioning'     => null,
+                                        );
+    /**
+     * @var Doctrine_Tree $tree                 tree object associated with this table
+     */
+    protected $tree;
+    /**
+     * @var Doctrine_Relation_Parser $_parser   relation parser object
+     */
+    protected $_parser;
+    /**
+     * @var array $_templates                   an array containing all templates attached to this table
+     */
+    protected $_templates;
+
+
+    /**
+     * the constructor
+     * @throws Doctrine_Connection_Exception    if there are no opened connections
+     * @throws Doctrine_Table_Exception         if there is already an instance of this table
+     * @return void
+     */
+    public function __construct($name, Doctrine_Connection $conn)
+    {
+        $this->conn = $conn;
+
+        $this->setParent($this->conn);
+
+        $this->options['name'] = $name;
+        $this->_parser = new Doctrine_Relation_Parser($this);
+
+        if ( ! class_exists($name) || empty($name)) {
+            throw new Doctrine_Exception("Couldn't find class " . $name);
+        }
+        $record = new $name($this);
+
+        $names = array();
+
+        $class = $name;
+
+        // get parent classes
+
+        do {
+            if ($class == "Doctrine_Record") {
+                break;                        
+            }
+
+            $name  = $class;
+            $names[] = $name;
+        } while ($class = get_parent_class($class));
+
+        // reverse names
+        $names = array_reverse($names);
+        // save parents
+        array_pop($names);
+        $this->options['parents'] = $names;
+
+        // create database table
+        if (method_exists($record, 'setTableDefinition')) {
+            $record->setTableDefinition();
+            // get the declaring class of setTableDefinition method
+            $method = new ReflectionMethod($this->options['name'], 'setTableDefinition');
+            $class  = $method->getDeclaringClass();
+        } else {
+            $class = new ReflectionClass($class);
+        }
+        $this->options['declaringClass'] = $class;
+
+        // set the table definition for the given tree implementation
+        if ($this->isTree()) {
+            $this->getTree()->setTableDefinition();
+        }
+        
+        $this->columnCount = count($this->columns);
+
+        if ( ! isset($this->options['tableName'])) {
+            $this->options['tableName'] = Doctrine::tableize($class->getName());
+        }
+
+        switch (count($this->primaryKeys)) {
+            case 0:
+                $this->columns = array_merge(array('id' =>
+                                              array('type'          => 'integer',
+                                                    'length'        => 20,
+                                                    'autoincrement' => true,
+                                                    'primary'       => true)), $this->columns);
+    
+                $this->primaryKeys[] = 'id';
+                $this->identifier = 'id';
+                $this->identifierType = Doctrine::IDENTIFIER_AUTOINC;
+                $this->columnCount++;
+                break;
+            default:
+                if (count($this->primaryKeys) > 1) {
+                    $this->identifier = $this->primaryKeys;
+                    $this->identifierType = Doctrine::IDENTIFIER_COMPOSITE;
+    
+                } else {
+                    foreach ($this->primaryKeys as $pk) {
+                        $e = $this->columns[$pk];
+    
+                        $found = false;
+    
+                        foreach ($e as $option => $value) {
+                            if ($found)
+                                break;
+    
+                            $e2 = explode(':', $option);
+    
+                            switch (strtolower($e2[0])) {
+                                case 'autoincrement':
+                                case 'autoinc':
+                                    $this->identifierType = Doctrine::IDENTIFIER_AUTOINC;
+                                    $found = true;
+                                    break;
+                                case 'seq':
+                                case 'sequence':
+                                    $this->identifierType = Doctrine::IDENTIFIER_SEQUENCE;
+                                    $found = true;
+    
+                                    if ($value) {
+                                        $this->options['sequenceName'] = $value;
+                                    } else {
+                                        if (($sequence = $this->getAttribute(Doctrine::ATTR_DEFAULT_SEQUENCE)) !== null) {
+                                            $this->options['sequenceName'] = $sequence;
+                                        } else {
+                                            $this->options['sequenceName'] = $this->conn->getSequenceName($this->options['tableName']);
+                                        }
+                                    }
+                                    break;
+                            }
+                        }
+                        if ( ! isset($this->identifierType)) {
+                            $this->identifierType = Doctrine::IDENTIFIER_NATURAL;
+                        }
+                        $this->identifier = $pk;
+                    }
+            }
+        }
+
+
+        $record->setUp();
+
+        // if tree, set up tree
+        if ($this->isTree()) {
+            $this->getTree()->setUp();
+        }
+        $this->repository = new Doctrine_Table_Repository($this);
+    }
+    /**
+     * getTemplates
+     * returns all templates attached to this table
+     *
+     * @return array     an array containing all templates
+     */
+    public function getTemplates()
+    {
+        return $this->_templates;
+    }
+    /**
+     * export
+     * exports this table to database based on column and option definitions
+     *
+     * @throws Doctrine_Connection_Exception    if some error other than Doctrine::ERR_ALREADY_EXISTS
+     *                                          occurred during the create table operation
+     * @return boolean                          whether or not the export operation was successful
+     *                                          false if table already existed in the database
+     */
+    public function export() 
+    {
+        $this->conn->export->exportTable($this);
+    }
+    /**
+     * getExportableFormat
+     * returns exportable presentation of this object
+     *
+     * @return array
+     */
+    public function getExportableFormat($parseForeignKeys = true)
+    {
+        $columns = array();
+        $primary = array();
+
+        foreach ($this->getColumns() as $name => $column) {
+            $definition = $column;
+
+            switch ($definition['type']) {
+                case 'enum':
+                    if (isset($definition['default'])) {
+                        $definition['default'] = $this->enumIndex($name, $definition['default']);
+                    }
+                    break;
+                case 'boolean':
+                    if (isset($definition['default'])) {
+                        $definition['default'] = $this->getConnection()->convertBooleans($definition['default']);
+                    }
+                    break;
+            }
+            $columns[$name] = $definition;
+
+            if(isset($definition['primary']) && $definition['primary']) {
+                $primary[] = $name;
+            }
+        }
+        $options['foreignKeys'] = array();
+
+        if ($parseForeignKeys) {
+            if ($this->getAttribute(Doctrine::ATTR_EXPORT) & Doctrine::EXPORT_CONSTRAINTS) {
+    
+                $constraints = array();
+
+                $emptyIntegrity = array('onUpdate' => null,
+                                        'onDelete' => null);
+
+                foreach ($this->getRelations() as $name => $relation) {
+                    $fk = $relation->toArray();
+                    $fk['foreignTable'] = $relation->getTable()->getTableName();
+
+                    if ($relation->getTable() === $this && in_array($relation->getLocal(), $primary)) {
+                        if ($relation->hasConstraint()) {
+                            throw new Doctrine_Table_Exception("Badly constructed integrity constraints.");
+                        }
+                        
+                        continue;
+                    }
+
+                    $integrity = array('onUpdate' => $fk['onUpdate'],
+                                       'onDelete' => $fk['onDelete']);
+                    
+                    if ($relation instanceof Doctrine_Relation_LocalKey) {
+                        $def = array('local'        => $relation->getLocal(),
+                                     'foreign'      => $relation->getForeign(),
+                                     'foreignTable' => $relation->getTable()->getTableName());
+
+                        if (($key = array_search($def, $options['foreignKeys'])) === false) {
+                            $options['foreignKeys'][] = $def;
+
+                            $constraints[] = $integrity;
+                        } else {
+                            if ($integrity !== $emptyIntegrity) {
+                                $constraints[$key] = $integrity;
+                            }
+                        }
+                    }
+                }
+
+                foreach ($constraints as $k => $def) {
+                    $options['foreignKeys'][$k] = array_merge($options['foreignKeys'][$k], $def);
+                }
+
+            }
+        }
+        $options['primary'] = $primary;
+        
+        return array('tableName' => $this->getOption('tableName'), 
+                     'columns'   => $columns, 
+                     'options'   => array_merge($this->getOptions(), $options));
+    }
+    /**
+     * exportConstraints
+     * exports the constraints of this table into database based on option definitions
+     *
+     * @throws Doctrine_Connection_Exception    if something went wrong on db level
+     * @return void
+     */
+    public function exportConstraints()
+    {
+        try {
+            $this->conn->beginTransaction();
+
+            foreach ($this->options['index'] as $index => $definition) {
+                $this->conn->export->createIndex($this->options['tableName'], $index, $definition);
+            }
+            $this->conn->commit();
+        } catch(Doctrine_Connection_Exception $e) {
+            $this->conn->rollback();
+
+            throw $e;
+        }
+    }
+    /**
+     * getRelationParser
+     * return the relation parser associated with this table
+     *
+     * @return Doctrine_Relation_Parser     relation parser object
+     */
+    public function getRelationParser()
+    {
+        return $this->_parser;
+    }
+    /**
+     * __get
+     * an alias for getOption
+     *
+     * @param string $option
+     */
+    public function __get($option)
+    {
+        if (isset($this->options[$option])) {
+            return $this->options[$option];
+        }
+        return null;
+    }
+    /**
+     * __isset
+     *
+     * @param string $option
+     */
+    public function __isset($option) 
+    {
+        return isset($this->options[$option]);
+    }
+    /**
+     * getOptions
+     * returns all options of this table and the associated values
+     *
+     * @return array    all options and their values
+     */
+    public function getOptions()
+    {
+        return $this->options;
+    }
+    /**
+     * addForeignKey
+     *
+     * adds a foreignKey to this table
+     *
+     * @return void
+     */
+    public function addForeignKey(array $definition)
+    {
+        $this->options['foreignKeys'][] = $definition;
+    }
+    /**
+     * addCheckConstraint
+     * 
+     * adds a check constraint to this table
+     *
+     * @return void
+     */
+    public function addCheckConstraint($definition, $name)
+    {
+    	if (is_string($name)) {
+            $this->options['checks'][$name] = $definition;
+        } else {
+            $this->options['checks'][] = $definition;
+        }
+        
+        return $this;
+    }
+    /**
+     * addIndex
+     * 
+     * adds an index to this table
+     *
+     * @return void
+     */
+    public function addIndex($index, array $definition)
+    {
+        $this->options['indexes'][$index] = $definition;
+    }
+    /**
+     * getIndex
+     *
+     * @return array|boolean        array on success, FALSE on failure
+     */
+    public function getIndex($index) 
+    {
+        if (isset($this->options['indexes'][$index])) {
+            return $this->options['indexes'][$index];
+        }
+
+        return false;
+    }
+    public function bind($args, $type)
+    {
+    	$options = array();
+        $options['type'] = $type;
+        
+        if ( ! isset($args[1])) {
+            $args[1] = array();
+        }
+        
+        // the following is needed for backwards compatibility
+        if (is_string($args[1])) {
+            if ( ! isset($args[2])) {
+                $args[2] = array();
+            } elseif (is_string($args[2])) {
+                $args[2] = (array) $args[2];
+            }
+
+            $classes = array_merge($this->options['parents'], array($this->getComponentName()));
+
+
+            $e = explode('.', $args[1]);
+            if (in_array($e[0], $classes)) {
+                if ($options['type'] >= Doctrine_Relation::MANY) {
+                    $options['foreign'] = $e[1];                                             	
+                } else {
+                    $options['local'] = $e[1];
+                }
+            } else {
+                $e2 = explode(' as ', $args[0]);
+                if ($e[0] !== $e2[0] && ( ! isset($e2[1]) || $e[0] !== $e2[1])) {
+                    $options['refClass'] = $e[0];
+                }
+
+                $options['foreign'] = $e[1];
+            }
+
+            $options = array_merge($args[2], $options);
+
+            $this->_parser->bind($args[0], $options);
+        } else { 
+            $options = array_merge($args[1], $options);
+            $this->_parser->bind($args[0], $options);
+        }
+    }
+
+    /** 
+     * hasRelation
+     *
+     * @param string $alias      the relation to check if exists
+     * @return boolean           true if the relation exists otherwise false
+     */
+    public function hasRelation($alias)
+    {
+        return $this->_parser->hasRelation($alias);
+    }	
+
+    /**
+     * getRelation
+     *
+     * @param string $alias      relation alias
+     */
+    public function getRelation($alias, $recursive = true)
+    {
+        return $this->_parser->getRelation($alias, $recursive);
+    }
+    /**
+     * getRelations
+     * returns an array containing all relation objects
+     *
+     * @return array        an array of Doctrine_Relation objects
+     */
+    public function getRelations()
+    {
+        return $this->_parser->getRelations();
+    }
+    /**
+     * createQuery
+     * creates a new Doctrine_Query object and adds the component name
+     * of this table as the query 'from' part
+     *
+     * @return Doctrine_Query
+     */
+    public function createQuery()
+    {
+        return Doctrine_Query::create()->from($this->getComponentName());
+    }
+    /**
+     * getRepository
+     *
+     * @return Doctrine_Table_Repository
+     */
+    public function getRepository()
+    {
+        return $this->repository;
+    }
+    /**
+     * setOption
+     * sets an option and returns this object in order to 
+     * allow flexible method chaining
+     *
+     * @see Doctrine_Table::$_options   for available options
+     * @param string $name              the name of the option to set
+     * @param mixed $value              the value of the option
+     * @return Doctrine_Table           this object
+     */
+    public function setOption($name, $value)
+    {
+        switch ($name) {
+        case 'name':
+        case 'tableName':
+            break;
+        case 'enumMap':
+        case 'inheritanceMap':
+        case 'index':
+        case 'treeOptions':
+            if ( ! is_array($value)) {
+                throw new Doctrine_Table_Exception($name . ' should be an array.');
+            }
+            break;
+        }
+        $this->options[$name] = $value;
+    }
+    /**
+     * getOption
+     * returns the value of given option
+     *
+     * @param string $name  the name of the option
+     * @return mixed        the value of given option
+     */
+    public function getOption($name)
+    {
+        if (isset($this->options[$name])) {
+            return $this->options[$name];
+        }
+        return null;
+    }
+    /**
+     * getColumnName
+     *
+     * returns a column name for column alias
+     * if the actual name for the alias cannot be found
+     * this method returns the given alias
+     *
+     * @param string $alias         column alias
+     * @return string               column name
+     */
+    public function getColumnName($alias)
+    {
+        $alias = strtolower($alias);
+        if(isset($this->columnAliases[$alias])) {
+            return $this->columnAliases[$alias];
+        }
+
+        return $alias;
+    }
+    /**
+     * setColumn
+     *
+     * @param string $name
+     * @param string $type
+     * @param integer $length
+     * @param mixed $options
+     * @throws Doctrine_Table_Exception     if trying use wrongly typed parameter
+     * @return void
+     */
+    public function setColumn($name, $type, $length = null, $options = array())
+    {
+        if (is_string($options)) {
+            $options = explode('|', $options);
+        }
+
+        foreach ($options as $k => $option) {
+            if (is_numeric($k)) {
+                if ( ! empty($option)) {
+                    $options[$option] = true;
+                }
+                unset($options[$k]);
+            }
+        }
+
+        $name  = strtolower($name);
+        $parts = explode(' as ', $name);
+
+        if (count($parts) > 1) {
+            $this->columnAliases[$parts[1]] = $parts[0];
+            $name = $parts[0];
+        }
+
+
+
+        if ($length == null) {
+            switch ($type) {
+                case 'string':
+                case 'clob':
+                case 'float':
+                case 'integer':
+                case 'array':
+                case 'object':
+                case 'blob':
+                case 'gzip':
+                    // use php int max
+                    $length = 2147483647;
+                break;
+                case 'boolean':
+                    $length = 1;
+                case 'date':
+                    // YYYY-MM-DD ISO 8601
+                    $length = 10;
+                case 'time':
+                    // HH:NN:SS+00:00 ISO 8601
+                    $length = 14;
+                case 'timestamp':
+                    // YYYY-MM-DDTHH:MM:SS+00:00 ISO 8601
+                    $length = 25;
+                break;
+            }
+        }
+
+        $this->columns[$name] = $options;
+        $this->columns[$name]['type'] = $type;
+        $this->columns[$name]['length'] = $length;
+
+        if (isset($options['primary'])) {
+            $this->primaryKeys[] = $name;
+        }
+        if (isset($options['default'])) {
+            $this->hasDefaultValues = true;
+        }
+    }
+    /**
+     * hasDefaultValues
+     * returns true if this table has default values, otherwise false
+     *
+     * @return boolean
+     */
+    public function hasDefaultValues()
+    {
+        return $this->hasDefaultValues;
+    }
+    /**
+     * getDefaultValueOf
+     * returns the default value(if any) for given column
+     *
+     * @param string $column
+     * @return mixed
+     */
+    public function getDefaultValueOf($column)
+    {
+        $column = strtolower($column);
+        if ( ! isset($this->columns[$column])) {
+            throw new Doctrine_Table_Exception("Couldn't get default value. Column ".$column." doesn't exist.");
+        }
+        if (isset($this->columns[$column]['default'])) {
+            return $this->columns[$column]['default'];
+        } else {
+            return null;
+        }
+    }
+    /**
+     * @return mixed
+     */
+    public function getIdentifier()
+    {
+        return $this->identifier;
+    }
+    /**
+     * @return integer
+     */
+    public function getIdentifierType()
+    {
+        return $this->identifierType;
+    }
+    /**
+     * hasColumn
+     * @return boolean
+     */
+    public function hasColumn($name)
+    {
+        return isset($this->columns[$name]);
+    }
+    /**
+     * @param mixed $key
+     * @return void
+     */
+    public function setPrimaryKey($key)
+    {
+        switch (gettype($key)) {
+        case "array":
+            $this->primaryKeys = array_values($key);
+            break;
+        case "string":
+            $this->primaryKeys[] = $key;
+            break;
+        };
+    }
+    /**
+     * returns all primary keys
+     * @return array
+     */
+    public function getPrimaryKeys()
+    {
+        return $this->primaryKeys;
+    }
+    /**
+     * @return boolean
+     */
+    public function hasPrimaryKey($key)
+    {
+        return in_array($key,$this->primaryKeys);
+    }
+    /**
+     * @return Doctrine_Connection
+     */
+    public function getConnection()
+    {
+        return $this->conn;
+    }
+    /**
+     * create
+     * creates a new record
+     *
+     * @param $array                    an array where keys are field names and values representing field values
+     * @return Doctrine_Record
+     */
+    public function create(array $array = array()) {
+        $this->data         = $array;
+        $record = new $this->options['name']($this, true);
+        $this->data         = array();
+        return $record;
+    }
+    /**
+     * finds a record by its identifier
+     *
+     * @param $id                       database row id
+     * @return Doctrine_Record|false    a record for given database identifier
+     */
+    public function find($id)
+    {
+        if ($id !== null) {
+            if ( ! is_array($id)) {
+                $id = array($id);
+            } else {
+                $id = array_values($id);
+            }
+
+            $records = Doctrine_Query::create()
+                       ->from($this->getComponentName())
+                       ->where(implode(' = ? AND ', $this->primaryKeys) . ' = ?')
+                       ->execute($id);
+
+            if (count($records) === 0) {
+                return false;
+            }
+
+            return $records->getFirst();
+        }
+        return false;
+    }
+    /**
+     * applyInheritance
+     * @param $where                    query where part to be modified
+     * @return string                   query where part with column aggregation inheritance added
+     */
+    final public function applyInheritance($where)
+    {
+        if ( ! empty($this->options['inheritanceMap'])) {
+            $a = array();
+            foreach ($this->options['inheritanceMap'] as $field => $value) {
+                $a[] = $field . ' = ?';
+            }
+            $i = implode(' AND ', $a);
+            $where .= ' AND ' . $i;
+        }
+        return $where;
+    }
+    /**
+     * findAll
+     * returns a collection of records
+     *
+     * @return Doctrine_Collection
+     */
+    public function findAll()
+    {
+        $graph = new Doctrine_Query($this->conn);
+        $users = $graph->query('FROM ' . $this->options['name']);
+        return $users;
+    }
+    /**
+     * findByDql
+     * finds records with given DQL where clause
+     * returns a collection of records
+     *
+     * @param string $dql               DQL after WHERE clause
+     * @param array $params             query parameters
+     * @return Doctrine_Collection
+     */
+    public function findBySql($dql, array $params = array()) {
+        $q = new Doctrine_Query($this->conn);
+        $users = $q->query('FROM ' . $this->options['name'] . ' WHERE ' . $dql, $params);
+        return $users;
+    }
+
+    public function findByDql($dql, array $params = array()) {
+        return $this->findBySql($dql, $params);
+    }
+    /**
+     * clear
+     * clears the first level cache (identityMap)
+     *
+     * @return void
+     */
+    public function clear()
+    {
+        $this->identityMap = array();
+    }
+    /**
+     * addRecord
+     * adds a record to identity map
+     *
+     * @param Doctrine_Record $record       record to be added
+     * @return boolean
+     */
+    public function addRecord(Doctrine_Record $record)
+    {
+        $id = implode(' ', $record->identifier());
+        
+        if (isset($this->identityMap[$id])) {
+            return false;
+        }
+        
+        $this->identityMap[$id] = $record;
+        
+        return true;
+    }
+    /**
+     * getRecord
+     * first checks if record exists in identityMap, if not
+     * returns a new record
+     *
+     * @return Doctrine_Record
+     */
+    public function getRecord()
+    {
+    	if ( ! empty($this->data)) {
+            $this->data = array_change_key_case($this->data, CASE_LOWER);
+    
+            $key = $this->getIdentifier();
+    
+            if ( ! is_array($key)) {
+                $key = array($key);
+            }
+    
+            $found = false;
+            foreach ($key as $k) {
+                if ( ! isset($this->data[$k])) {
+                    // primary key column not found return new record
+                    $found = true;
+                    break;
+                }
+                $id[] = $this->data[$k];
+            }
+            
+            if ($found) {
+                $recordName = $this->getClassnameToReturn();
+                $record = new $recordName($this, true);
+                $this->data = array();
+
+                return $record;
+            }
+
+
+            $id = implode(' ', $id);
+    
+            if (isset($this->identityMap[$id])) {
+                $record = $this->identityMap[$id];
+                $record->hydrate($this->data);
+            } else {
+                $recordName = $this->getClassnameToReturn();
+                $record = new $recordName($this);
+                $this->identityMap[$id] = $record;
+            }
+            $this->data = array();
+        } else {
+            $recordName = $this->getClassnameToReturn();
+            $record = new $recordName($this, true);
+        }
+
+
+        return $record;
+    }
+
+    /**
+     * Get the classname to return. Most often this is just the options['name']
+     *
+     * Check the subclasses option and the inheritanceMap for each subclass to see 
+     * if all the maps in a subclass is met. If this is the case return that 
+     * subclass name. If no subclasses match or if there are no subclasses defined 
+     * return the name of the class for this tables record.
+     *
+     * @todo this function could use reflection to check the first time it runs 
+     * if the subclassing option is not set. 
+     *
+     * @return string The name of the class to create
+     *
+     */ 
+    public function getClassnameToReturn()
+    {
+        if (!isset($this->options['subclasses'])) {
+            return $this->options['name'];
+        }
+        foreach ($this->options['subclasses'] as $subclass) {
+            $table = $this->conn->getTable($subclass);
+            $inheritanceMap = $table->getOption('inheritanceMap');
+            $nomatch = false;
+            foreach ($inheritanceMap as $key => $value) {
+                if ( ! isset($this->data[$key]) || $this->data[$key] != $value) {
+                    $nomatch = true;
+                    break;
+                }
+            }
+            if ( ! $nomatch) {
+                return $table->getComponentName();
+            }
+        }
+        return $this->options['name'];
+    }
+
+    /**
+     * @param $id                       database row id
+     * @throws Doctrine_Find_Exception
+     */
+    final public function getProxy($id = null)
+    {
+        if ($id !== null) {
+            $query = 'SELECT ' . implode(', ',$this->primaryKeys) 
+                . ' FROM ' . $this->getTableName() 
+                . ' WHERE ' . implode(' = ? && ',$this->primaryKeys) . ' = ?';
+            $query = $this->applyInheritance($query);
+
+            $params = array_merge(array($id), array_values($this->options['inheritanceMap']));
+
+            $this->data = $this->conn->execute($query, $params)->fetch(PDO::FETCH_ASSOC);
+
+            if ($this->data === false)
+                return false;
+        }
+        return $this->getRecord();
+    }
+    /**
+     * count
+     *
+     * @return integer
+     */
+    public function count()
+    {
+        $a = $this->conn->execute('SELECT COUNT(1) FROM ' . $this->options['tableName'])->fetch(Doctrine::FETCH_NUM);
+        return current($a);
+    }
+    /**
+     * @return Doctrine_Query                           a Doctrine_Query object
+     */
+    public function getQueryObject()
+    {
+        $graph = new Doctrine_Query($this->getConnection());
+        $graph->load($this->getComponentName());
+        return $graph;
+    }
+    /**
+     * @param string $field
+     * @return array
+     */
+    public function getEnumValues($field)
+    {
+        if (isset($this->columns[$field]['values'])) {
+            return $this->columns[$field]['values'];
+        } else {
+            return array();
+        }
+    }
+    /**
+     * enumValue
+     *
+     * @param string $field
+     * @param integer $index
+     * @return mixed
+     */
+    public function enumValue($field, $index)
+    {
+        if ($index instanceof Doctrine_Null)
+            return $index;
+
+        return isset($this->columns[$field]['values'][$index]) ? $this->columns[$field]['values'][$index] : $index;
+    }
+    /**
+     * enumIndex
+     *
+     * @param string $field
+     * @param mixed $value
+     * @return mixed
+     */
+    public function enumIndex($field, $value)
+    {
+        $values = $this->getEnumValues($field);
+
+        return array_search($value, $values);
+    }
+    /**
+     * getColumnCount
+     *
+     * @return integer      the number of columns in this table
+     */
+    public function getColumnCount()
+    {
+        return $this->columnCount;
+    }
+
+    /**
+     * returns all columns and their definitions
+     *
+     * @return array
+     */
+    public function getColumns()
+    {
+        return $this->columns;
+    }
+    /**
+     * returns an array containing all the column names
+     *
+     * @return array
+     */
+    public function getColumnNames()
+    {
+        return array_keys($this->columns);
+    }
+    /**
+     * getDefinitionOf
+     *
+     * @return mixed        array on success, false on failure
+     */
+    public function getDefinitionOf($column)
+    {
+        if (isset($this->columns[$column])) {
+            return $this->columns[$column];
+        }
+        return false;
+    }
+    /**
+     * getTypeOf
+     *
+     * @return mixed        string on success, false on failure
+     */
+    public function getTypeOf($column)
+    {
+        if (isset($this->columns[$column])) {
+            return $this->columns[$column]['type'];
+        }
+        return false;
+    }
+    /**
+     * setData
+     * doctrine uses this function internally
+     * users are strongly discouraged to use this function
+     *
+     * @param array $data               internal data
+     * @return void
+     */
+    public function setData(array $data)
+    {
+        $this->data = $data;
+    }
+    /**
+     * returns internal data, used by Doctrine_Record instances
+     * when retrieving data from database
+     *
+     * @return array
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+    /**
+     * prepareValue
+     * this method performs special data preparation depending on 
+     * the type of the given column
+     *
+     * 1. It unserializes array and object typed columns
+     * 2. Uncompresses gzip typed columns
+     * 3. Gets the appropriate enum values for enum typed columns
+     * 4. Initializes special null object pointer for null values (for fast column existence checking purposes)
+     *
+     * example:
+     * <code type='php'>
+     * $field = 'name';
+     * $value = null;
+     * $table->prepareValue($field, $value); // Doctrine_Null
+     * </code>
+     *
+     * @throws Doctrine_Table_Exception     if unserialization of array/object typed column fails or
+     * @throws Doctrine_Table_Exception     if uncompression of gzip typed column fails         *
+     * @param string $field     the name of the field
+     * @param string $value     field value
+     * @return mixed            prepared value
+     */
+    public function prepareValue($field, $value)
+    {
+        if ($value === self::$_null) {
+            return self::$_null;
+        } else if ($value === null) {
+            return null;
+        } else {
+            $type = $this->getTypeOf($field);
+
+            switch ($type) {
+                case 'array':
+                case 'object':
+                    if (is_string($value)) {
+                        $value = unserialize($value);
+
+                        if ($value === false) {
+                            throw new Doctrine_Table_Exception('Unserialization of ' . $field . ' failed.');
+                        }
+                        return $value;
+                    }
+                break;
+                case 'gzip':
+                    $value = gzuncompress($value);
+
+                    if ($value === false) {
+                        throw new Doctrine_Table_Exception('Uncompressing of ' . $field . ' failed.');
+                    }
+                    return $value;
+                break;
+                case 'enum':
+                    return $this->enumValue($field, $value);
+                break;
+                case 'boolean':
+                    return (boolean) $value;
+                break;
+                case 'integer':
+                    // don't do any casting here PHP INT_MAX is smaller than what the databases support
+                break;
+            }
+        }
+        return $value;
+    }
+    /**
+     * getter for associated tree
+     *
+     * @return mixed  if tree return instance of Doctrine_Tree, otherwise returns false
+     */    
+    public function getTree() {
+        if (isset($this->options['treeImpl'])) {
+            if ( ! $this->tree) {
+                $options = isset($this->options['treeOptions']) ? $this->options['treeOptions'] : array();
+                $this->tree = Doctrine_Tree::factory($this, 
+                    $this->options['treeImpl'], 
+                    $options
+                );
+            }
+            return $this->tree;
+        }
+        return false;
+    }
+    public function getComponentName() 
+    {
+        return $this->options['name'];
+    }
+    public function getTableName()
+    {
+        return $this->options['tableName'];
+    }
+    public function setTableName($tableName)
+    {
+        $this->options['tableName'] = $tableName;	
+    }
+    /**
+     * determine if table acts as tree
+     *
+     * @return mixed  if tree return true, otherwise returns false
+     */    
+    public function isTree() {
+        return ( ! is_null($this->options['treeImpl'])) ? true : false;
+    }
+
+    public function getTemplate($template)
+    {
+    	if ( ! isset($this->_templates[$template])) {
+            throw new Doctrine_Table_Exception('Template ' . $template . ' not loaded');
+    	}
+    	
+    	return $this->_templates[$template];
+    }
+    
+    public function addTemplate($template, Doctrine_Template $impl)
+    {
+        $this->_templates[$template] = $impl;
+    }
+    /**
+     * returns a string representation of this object
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return Doctrine_Lib::getTableAsString($this);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc0afb16d1ffc120fe1e7ecd572d1164abbaf8ed
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Exception.php
@@ -0,0 +1,41 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * thrown when user tries to initialize a new instance of Doctrine_Table,
+ * while there already exists an instance of that table
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Table_Exception extends Doctrine_Exception
+{
+    public function __construct($message = "Couldn't initialize table. One instance of this
+                            table already exists. Always use Doctrine_Session::getTable(\$name)
+                            to get on instance of a Doctrine_Table.") {
+        parent::__construct($message);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a2caa5b8999906a493f29ebfdcf118d06f2d01c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository.php
@@ -0,0 +1,151 @@
+<?php
+/*
+ *  $Id: Repository.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Repository
+ * each record is added into Doctrine_Repository at the same time they are created,
+ * loaded from the database or retrieved from the cache
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Table_Repository implements Countable, IteratorAggregate
+{
+    /**
+     * @var object Doctrine_Table $table
+     */
+    private $table;
+    /**
+     * @var array $registry
+     * an array of all records
+     * keys representing record object identifiers
+     */
+    private $registry = array();
+    /**
+     * constructor
+     *
+     * @param Doctrine_Table $table
+     */
+    public function __construct(Doctrine_Table $table)
+    {
+        $this->table = $table;
+    }
+    /**
+     * getTable
+     *
+     * @return object Doctrine_Table
+     */
+    public function getTable()
+    {
+        return $this->table;
+    }
+    /**
+     * add
+     *
+     * @param Doctrine_Record $record       record to be added into registry
+     * @return boolean
+     */
+    public function add(Doctrine_Record $record)
+    {
+        $oid = $record->getOID();
+
+        if (isset($this->registry[$oid])) {
+            return false;
+        }
+        $this->registry[$oid] = $record;
+
+        return true;
+    }
+    /**
+     * get
+     * @param integer $oid
+     * @throws Doctrine_Table_Repository_Exception
+     */
+    public function get($oid)
+    {
+        if ( ! isset($this->registry[$oid])) {
+            throw new Doctrine_Table_Repository_Exception("Unknown object identifier");
+        }
+        return $this->registry[$oid];
+    }
+    /**
+     * count
+     * Doctrine_Registry implements interface Countable
+     * @return integer                      the number of records this registry has
+     */
+    public function count()
+    {
+        return count($this->registry);
+    }
+    /**
+     * @param integer $oid                  object identifier
+     * @return boolean                      whether ot not the operation was successful
+     */
+    public function evict($oid)
+    {
+        if ( ! isset($this->registry[$oid])) {
+            return false;
+        }
+        unset($this->registry[$oid]);
+        return true;
+    }
+    /**
+     * @return integer                      number of records evicted
+     */
+    public function evictAll()
+    {
+        $evicted = 0;
+        foreach ($this->registry as $oid=>$record) {
+            if ($this->evict($oid)) {
+                $evicted++;
+            }
+        }
+        return $evicted;
+    }
+    /**
+     * getIterator
+     * @return ArrayIterator
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->registry);
+    }
+    /**
+     * contains
+     * @param integer $oid                  object identifier
+     */
+    public function contains($oid)
+    {
+        return isset($this->registry[$oid]);
+    }
+    /**
+     * loadAll
+     * @return void
+     */
+    public function loadAll()
+    {
+        $this->table->findAll();
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c64fe0afb0a61ff5da40caebc994d2371f78d85
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Table/Repository/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Table_Repository_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Table_Repository_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template.php
new file mode 100644
index 0000000000000000000000000000000000000000..17878cffc9253b3dd9e627545f00148af86f94da
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template.php
@@ -0,0 +1,65 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Record_Abstract');
+/**
+ * Doctrine_Template
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Template extends Doctrine_Record_Abstract
+{
+
+    /**
+     * setTable
+     *
+     * @param Doctrine_Table $_table     the table object this Template belongs to
+     */
+    public function setTable(Doctrine_Table $table)
+    {
+        $this->_table = $table;
+    }
+    /**
+     * getTable
+     * returns the associated table object
+     *
+     * @return Doctrine_Table   the associated table object
+     */
+    public function getTable()
+    {
+        return $this->_table;
+    }
+
+    public function setUp()
+    {
+
+    }
+
+    public function setTableDefinition()
+    {
+
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/NestedSet.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/NestedSet.php
new file mode 100644
index 0000000000000000000000000000000000000000..22ca1babb390646c6d8161c92e0d810d53f22d2f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/NestedSet.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Template_NestedSet
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Roman Borschel <roman@code-factory.org>
+ */
+class Doctrine_Template_NestedSet extends Doctrine_Template
+{
+    private $_options;
+    
+    public function __construct(array $options)
+    {
+        $this->_options = $options;
+    }
+    
+    public function setUp()
+    {
+        $this->_table->setOption('treeOptions', $this->_options);
+        $this->_table->setOption('treeImpl', 'NestedSet');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Searchable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Searchable.php
new file mode 100644
index 0000000000000000000000000000000000000000..25c2899531149980292e711f9ec6118d18ebcf75
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Searchable.php
@@ -0,0 +1,63 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Template_Searchable
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Template_Searchable extends Doctrine_Template
+{     
+    protected $_search;
+
+    public function __construct(array $options)
+    {
+        $this->_search = new Doctrine_Search($options);
+    }
+    public function setUp()
+    {
+        $id = $this->_table->getIdentifier();
+        $name = $this->_table->getComponentName();
+        $className = $this->_search->getOption('className');
+
+        if (strpos($className, '%CLASS%') !== false) {
+            $this->_search->setOption('className', str_replace('%CLASS%', $name, $className));
+            $className = $this->_search->getOption('className');
+        }
+        $this->_search->buildDefinition($this->_table);
+
+        foreach ((array) $id as $column) {
+            $foreign[] = strtolower($this->_table->getComponentName() . '_' . $column);
+        }
+
+        $foreign = (count($foreign) > 1) ? $foreign : current($foreign);
+
+        $this->hasMany($className, array('local' => $id, 'foreign' => $foreign));
+
+        $this->addListener(new Doctrine_Search_Listener($this->_search));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Taggable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Taggable.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc7f4c5f8d4d791d6845d9a0a6c1682c4246948d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Taggable.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Template_Taggable
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Template_Taggable extends Doctrine_Template
+{
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Versionable.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Versionable.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a94582be28ae83645f79af9723fa1db02094d1f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Template/Versionable.php
@@ -0,0 +1,51 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Template_Versionable
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Template_Versionable extends Doctrine_Template
+{
+    protected $_auditLog;
+
+    public function __construct(array $options)
+    {
+        $this->_auditLog = new Doctrine_AuditLog($options);
+    }
+    public function setUp()
+    {
+    	$this->_auditLog->setOption('table', $this->_table);
+        $this->_auditLog->buildDefinition($this->_table);
+
+        $this->addListener(new Doctrine_AuditLog_Listener($this->_auditLog));
+    }
+    public function getAuditLog()
+    {
+        return $this->_auditLog;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tokenizer.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tokenizer.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e1773aa659e36b7305638afab56a7347321cfa4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tokenizer.php
@@ -0,0 +1,317 @@
+<?php
+/*
+ *  $Id: From.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Tokenizer
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Tokenizer 
+{
+    public function __construct() 
+    {
+        
+    }
+    public function tokenize() 
+    {
+
+    }
+    /**
+     * trims brackets
+     *
+     * @param string $str
+     * @param string $e1        the first bracket, usually '('
+     * @param string $e2        the second bracket, usually ')'
+     */
+    public static function bracketTrim($str, $e1 = '(', $e2 = ')')
+    {
+        if (substr($str, 0, 1) === $e1 && substr($str, -1) === $e2) {
+            return substr($str, 1, -1);
+        } else {
+            return $str;
+        }
+    }
+    /**
+     * bracketExplode
+     *
+     * example:
+     *
+     * parameters:
+     *      $str = (age < 20 AND age > 18) AND email LIKE 'John@example.com'
+     *      $d = ' AND '
+     *      $e1 = '('
+     *      $e2 = ')'
+     *
+     * would return an array:
+     *      array("(age < 20 AND age > 18)",
+     *            "email LIKE 'John@example.com'")
+     *
+     * @param string $str
+     * @param string $d         the delimeter which explodes the string
+     * @param string $e1        the first bracket, usually '('
+     * @param string $e2        the second bracket, usually ')'
+     *
+     */
+    public static function bracketExplode($str, $d = ' ', $e1 = '(', $e2 = ')')
+    {
+        if(is_array($d)) {
+            $a = preg_split('/('.implode('|', $d).')/', $str);
+            $d = stripslashes($d[0]);
+        } else {
+            $a = explode($d, $str);
+        }
+
+        $i = 0;
+        $term = array();
+        foreach($a as $key=>$val) {
+            if (empty($term[$i])) {
+                $term[$i] = trim($val);
+                $s1 = substr_count($term[$i], $e1);
+                $s2 = substr_count($term[$i], $e2);
+                
+                if($s1 == $s2) {
+                    $i++;
+                }
+            } else {
+                $term[$i] .= $d . trim($val);
+                $c1 = substr_count($term[$i], $e1);
+                $c2 = substr_count($term[$i], $e2);
+                
+                if($c1 == $c2) { 
+                    $i++;
+                }
+            }
+        }
+        return $term;
+    }
+    /**
+     * quoteExplode
+     *
+     * example:
+     *
+     * parameters:
+     *      $str = email LIKE 'John@example.com'
+     *      $d = ' AND '
+     *
+     * would return an array:
+     *      array("email", "LIKE", "'John@example.com'")
+     *
+     * @param string $str
+     * @param string $d         the delimeter which explodes the string
+     */
+    public static function quoteExplode($str, $d = ' ')
+    {
+        if (is_array($d)) {
+            $a = preg_split('/('.implode('|', $d).')/', $str);
+            $d = stripslashes($d[0]);
+        } else {
+            $a = explode($d, $str);
+        }
+
+        $i = 0;
+        $term = array();
+        foreach ($a as $key => $val) {
+            if (empty($term[$i])) {
+                $term[$i] = trim($val);
+
+                if ( ! (substr_count($term[$i], "'") & 1)) {
+                    $i++;
+                }
+            } else {
+                $term[$i] .= $d . trim($val);
+
+                if ( ! (substr_count($term[$i], "'") & 1)) {
+                    $i++;
+                }
+            }
+        }
+        return $term;
+    }
+    /**
+     * sqlExplode
+     *
+     * explodes a string into array using custom brackets and
+     * quote delimeters
+     *
+     *
+     * example:
+     *
+     * parameters:
+     *      $str = "(age < 20 AND age > 18) AND name LIKE 'John Doe'"
+     *      $d   = ' '
+     *      $e1  = '('
+     *      $e2  = ')'
+     *
+     * would return an array:
+     *      array('(age < 20 AND age > 18)',
+     *            'name',
+     *            'LIKE',
+     *            'John Doe')
+     *
+     * @param string $str
+     * @param string $d         the delimeter which explodes the string
+     * @param string $e1        the first bracket, usually '('
+     * @param string $e2        the second bracket, usually ')'
+     *
+     * @return array
+     */
+    public static function sqlExplode($str, $d = ' ', $e1 = '(', $e2 = ')')
+    {
+        if ($d == ' ') {
+            $d = array(' ', '\s');
+        }
+        if (is_array($d)) {
+            $d = array_map('preg_quote', $d);
+
+            if (in_array(' ', $d)) {
+                $d[] = '\s';
+            }
+
+            $split = '§(' . implode('|', $d) . ')§';
+
+            $str = preg_split($split, $str);
+            $d = stripslashes($d[0]);
+        } else {
+            $str = explode($d, $str);
+        }
+
+        $i = 0;
+        $term = array();
+
+        foreach ($str as $key => $val) {
+            if (empty($term[$i])) {
+                $term[$i] = trim($val);
+
+                $s1 = substr_count($term[$i], $e1);
+                $s2 = substr_count($term[$i], $e2);
+
+                if (strpos($term[$i], '(') !== false) {
+                    if($s1 == $s2) {
+                        $i++;
+                    }
+                } else {
+                    if ( ! (substr_count($term[$i], "'") & 1) &&
+                         ! (substr_count($term[$i], "\"") & 1)) {
+                        $i++;
+                    }
+                }
+            } else {
+                $term[$i] .= $d . trim($val);
+                $c1 = substr_count($term[$i], $e1);
+                $c2 = substr_count($term[$i], $e2);
+
+                if (strpos($term[$i], '(') !== false) {
+                    if($c1 == $c2) {
+                        $i++;
+                    }
+                } else {
+                    if ( ! (substr_count($term[$i], "'") & 1) &&
+                         ! (substr_count($term[$i], "\"") & 1)) {
+                        $i++;
+                    }
+                }
+            }
+        }
+        return $term;
+    }
+    /**
+     * clauseExplode
+     *
+     * explodes a string into array using custom brackets and
+     * quote delimeters
+     *
+     *
+     * example:
+     *
+     * parameters:
+     *      $str = "(age < 20 AND age > 18) AND name LIKE 'John Doe'"
+     *      $d   = ' '
+     *      $e1  = '('
+     *      $e2  = ')'
+     *
+     * would return an array:
+     *      array('(age < 20 AND age > 18)',
+     *            'name',
+     *            'LIKE',
+     *            'John Doe')
+     *
+     * @param string $str
+     * @param string $d         the delimeter which explodes the string
+     * @param string $e1        the first bracket, usually '('
+     * @param string $e2        the second bracket, usually ')'
+     *
+     * @return array
+     */
+    public static function clauseExplode($str, array $d, $e1 = '(', $e2 = ')')
+    {
+        if (is_array($d)) {
+            $d = array_map('preg_quote', $d);
+
+            if (in_array(' ', $d)) {
+                $d[] = '\s';
+            }
+
+            $split = '§(' . implode('|', $d) . ')§';
+
+            $str = preg_split($split, $str, -1, PREG_SPLIT_DELIM_CAPTURE);
+        }
+
+        $i = 0;
+        $term = array();
+
+        foreach ($str as $key => $val) {
+            if ($key & 1) {
+                if (isset($term[($i - 1)]) && ! is_array($term[($i - 1)])) {
+                    $term[($i - 1)] = array($term[($i - 1)], $val);
+                }
+                continue;
+            }
+            if (empty($term[$i])) {
+                $term[$i] = $val;
+            } else {
+                $term[$i] .= $str[($key - 1)] . $val;
+            }
+
+            $c1 = substr_count($term[$i], $e1);
+            $c2 = substr_count($term[$i], $e2);
+
+            if (strpos($term[$i], '(') !== false) {
+                if($c1 == $c2) {
+                    $i++;
+                }
+            } else {
+                if ( ! (substr_count($term[$i], "'") & 1) &&
+                     ! (substr_count($term[$i], "\"") & 1)) {
+                    $i++;
+                }
+            }
+        }
+        $term[$i - 1] = array($term[$i - 1], '');
+
+        return $term;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction.php
new file mode 100644
index 0000000000000000000000000000000000000000..48a5974ca0930871cabea64758b148d095bce9d1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction.php
@@ -0,0 +1,523 @@
+<?php
+/*
+ *  $Id: Transaction.php 2268 2007-08-24 21:43:50Z jackbravo $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Transaction
+ * Handles transaction savepoint and isolation abstraction
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2268 $
+ */
+class Doctrine_Transaction extends Doctrine_Connection_Module
+{
+    /**
+     * Doctrine_Transaction is in sleep state when it has no active transactions
+     */
+    const STATE_SLEEP       = 0;
+    /**
+     * Doctrine_Transaction is in active state when it has one active transaction
+     */
+    const STATE_ACTIVE      = 1;
+    /**
+     * Doctrine_Transaction is in busy state when it has multiple active transactions
+     */
+    const STATE_BUSY        = 2;
+    /**
+     * @var integer $transactionLevel      the nesting level of transactions, used by transaction methods
+     */
+    protected $transactionLevel  = 0;
+    /**
+     * @var array $invalid                  an array containing all invalid records within this transaction
+     */
+    protected $invalid          = array();
+    /**
+     * @var array $delete                   two dimensional pending delete list, the records in
+     *                                      this list will be deleted when transaction is committed
+     */
+    protected $delete           = array();
+    /**
+     * @var array $savepoints               an array containing all savepoints
+     */
+    protected $savePoints       = array();
+    /**
+     * @var array $_collections             an array of Doctrine_Collection objects that were affected during the Transaction
+     */
+    protected $_collections     = array();
+
+    /**
+     * addCollection
+     * adds a collection in the internal array of collections
+     *
+     * at the end of each commit this array is looped over and
+     * of every collection Doctrine then takes a snapshot in order
+     * to keep the collections up to date with the database
+     *
+     * @param Doctrine_Collection $coll     a collection to be added
+     * @return Doctrine_Transaction         this object
+     */
+    public function addCollection(Doctrine_Collection $coll)
+    {
+        $this->_collections[] = $coll;
+
+        return $this;
+    }
+    /**
+     * getState
+     * returns the state of this connection
+     *
+     * @see Doctrine_Connection_Transaction::STATE_* constants
+     * @return integer          the connection state
+     */
+    public function getState()
+    {
+        switch ($this->transactionLevel) {
+            case 0:
+                return Doctrine_Transaction::STATE_SLEEP;
+                break;
+            case 1:
+                return Doctrine_Transaction::STATE_ACTIVE;
+                break;
+            default:
+                return Doctrine_Transaction::STATE_BUSY;
+        }
+    }
+
+    /**
+     * addDelete
+     * adds record into pending delete list
+     *
+     * @param Doctrine_Record $record       a record to be added
+     * @return void
+     */
+    public function addDelete(Doctrine_Record $record)
+    {
+        $name = $record->getTable()->getComponentName();
+        $this->delete[$name][] = $record;
+    }
+
+    /**
+     * addInvalid
+     * adds record into invalid records list
+     *
+     * @param Doctrine_Record $record
+     * @return boolean        false if record already existed in invalid records list,
+     *                        otherwise true
+     */
+    public function addInvalid(Doctrine_Record $record)
+    {
+        if (in_array($record, $this->invalid, true)) {
+            return false;
+        }
+        $this->invalid[] = $record;
+        return true;
+    }
+
+    /**
+     * returns the pending delete list
+     *
+     * @return array
+     */
+    public function getDeletes()
+    {
+        return $this->delete;
+    }
+
+    /**
+     * bulkDelete
+     * deletes all records from the pending delete list
+     *
+     * @return void
+     */
+    public function bulkDelete()
+    {
+
+        foreach ($this->delete as $name => $deletes) {
+            $record = false;
+            $ids    = array();
+
+    	    if (is_array($deletes[count($deletes)-1]->getTable()->getIdentifier())) {
+                if (count($deletes) > 0) {
+                    $query = 'DELETE FROM '
+                           . $this->conn->quoteIdentifier($deletes[0]->getTable()->getTableName())
+                           . ' WHERE ';
+    
+                    $params = array();
+                    $cond = array();
+                    foreach ($deletes as $k => $record) {
+                        $ids = $record->identifier();
+                        $tmp = array();
+                        foreach (array_keys($ids) as $id){
+                            $tmp[] = $id . ' = ? ';
+                        }
+                        $params = array_merge($params, array_values($ids));
+                        $cond[] = '(' . implode(' AND ', $tmp) . ')';
+                    }
+                    $query .= implode(' OR ', $cond);
+
+                    $this->conn->execute($query, $params);
+                }
+    	    } else {
+    		    foreach ($deletes as $k => $record) {
+                    $ids[] = $record->getIncremented();
+    		    }
+    		    if ($record instanceof Doctrine_Record) {
+        			$params = substr(str_repeat('?, ', count($ids)), 0, -2);
+    
+        			$query = 'DELETE FROM '
+        				   . $this->conn->quoteIdentifier($record->getTable()->getTableName())
+        				   . ' WHERE '
+        				   . $record->getTable()->getIdentifier()
+        				   . ' IN(' . $params . ')';
+        
+        			$this->conn->execute($query, $ids);
+    		    }
+    	    }
+
+        }
+        $this->delete = array();
+    }
+    /**
+     * getTransactionLevel
+     * get the current transaction nesting level
+     *
+     * @return integer
+     */
+    public function getTransactionLevel()
+    {
+        return $this->transactionLevel;
+    }
+    /**
+     * getTransactionLevel
+     * set the current transaction nesting level
+     *
+     * @return Doctrine_Transaction     this object
+     */
+    public function setTransactionLevel($level)
+    {
+        $this->transactionLevel = $level;
+
+        return $this;
+    }
+    /**
+     * beginTransaction
+     * Start a transaction or set a savepoint.
+     *
+     * if trying to set a savepoint and there is no active transaction
+     * a new transaction is being started
+     *
+     * Listeners: onPreTransactionBegin, onTransactionBegin
+     *
+     * @param string $savepoint                 name of a savepoint to set
+     * @throws Doctrine_Transaction_Exception   if the transaction fails at database level     
+     * @return integer                          current transaction nesting level
+     */
+    public function beginTransaction($savepoint = null)
+    {
+        $this->conn->connect();
+        
+        $listener = $this->conn->getAttribute(Doctrine::ATTR_LISTENER);
+
+        if ( ! is_null($savepoint)) {
+            $this->savePoints[] = $savepoint;
+
+            $event = new Doctrine_Event($this, Doctrine_Event::SAVEPOINT_CREATE);
+
+            $listener->preSavepointCreate($event);
+
+            if ( ! $event->skipOperation) {
+                $this->createSavePoint($savepoint);
+            }
+
+            $listener->postSavepointCreate($event);
+        } else {
+            if ($this->transactionLevel == 0) {
+                $event = new Doctrine_Event($this, Doctrine_Event::TX_BEGIN);
+
+                $listener->preTransactionBegin($event);
+
+                if ( ! $event->skipOperation) {
+                    try {
+                        $this->conn->getDbh()->beginTransaction();
+                    } catch(Exception $e) {
+                        throw new Doctrine_Transaction_Exception($e->getMessage());
+                    }
+                }
+                $listener->postTransactionBegin($event);
+            }
+        }
+
+        $level = ++$this->transactionLevel;
+
+        return $level;
+    }
+    /**
+     * commit
+     * Commit the database changes done during a transaction that is in
+     * progress or release a savepoint. This function may only be called when
+     * auto-committing is disabled, otherwise it will fail.
+     *
+     * Listeners: preTransactionCommit, postTransactionCommit
+     *
+     * @param string $savepoint                 name of a savepoint to release
+     * @throws Doctrine_Transaction_Exception   if the transaction fails at database level
+     * @throws Doctrine_Validator_Exception     if the transaction fails due to record validations
+     * @return boolean                          false if commit couldn't be performed, true otherwise
+     */
+    public function commit($savepoint = null)
+    {
+    	$this->conn->connect();
+
+        if ($this->transactionLevel == 0) {
+            return false;
+        }
+
+        $listener = $this->conn->getAttribute(Doctrine::ATTR_LISTENER);
+
+        if ( ! is_null($savepoint)) {
+            $this->transactionLevel -= $this->removeSavePoints($savepoint);
+
+            $event = new Doctrine_Event($this, Doctrine_Event::SAVEPOINT_COMMIT);
+
+            $listener->preSavepointCommit($event);
+
+            if ( ! $event->skipOperation) {
+                $this->releaseSavePoint($savepoint);
+            }
+
+            $listener->postSavepointCommit($event);
+        } else {
+
+            if ($this->transactionLevel == 1) {
+                $event = new Doctrine_Event($this, Doctrine_Event::TX_COMMIT);
+                
+                $listener->preTransactionCommit($event);
+
+                if ( ! $event->skipOperation) {
+                    try {
+                        $this->bulkDelete();
+
+                    } catch(Exception $e) {
+                        $this->rollback();
+    
+                        throw new Doctrine_Transaction_Exception($e->getMessage());
+                    }
+                    if ( ! empty($this->invalid)) {
+                        $this->rollback();
+    
+                        $tmp = $this->invalid;
+                        $this->invalid = array();
+    
+                        throw new Doctrine_Validator_Exception($tmp);
+                    }
+    
+                    // take snapshots of all collections used within this transaction
+                    foreach ($this->_collections as $coll) {
+                        $coll->takeSnapshot();
+                    }
+                    $this->_collections = array();
+                    $this->conn->getDbh()->commit();
+    
+                    //$this->conn->unitOfWork->reset();
+                }
+
+                $listener->postTransactionCommit($event);
+            }
+            
+            $this->transactionLevel--;
+        }
+
+        return true;
+    }
+
+    /**
+     * rollback
+     * Cancel any database changes done during a transaction or since a specific
+     * savepoint that is in progress. This function may only be called when
+     * auto-committing is disabled, otherwise it will fail. Therefore, a new
+     * transaction is implicitly started after canceling the pending changes.
+     *
+     * this method can be listened with onPreTransactionRollback and onTransactionRollback
+     * eventlistener methods
+     *
+     * @param string $savepoint                 name of a savepoint to rollback to   
+     * @throws Doctrine_Transaction_Exception   if the rollback operation fails at database level
+     * @return boolean                          false if rollback couldn't be performed, true otherwise
+     */
+    public function rollback($savepoint = null)
+    {
+        $this->conn->connect();
+
+        if ($this->transactionLevel == 0) {
+            return false;
+        }
+
+        $listener = $this->conn->getAttribute(Doctrine::ATTR_LISTENER);
+
+        if ( ! is_null($savepoint)) {
+            $this->transactionLevel -= $this->removeSavePoints($savepoint);
+
+            $event = new Doctrine_Event($this, Doctrine_Event::SAVEPOINT_ROLLBACK);
+
+            $listener->preSavepointRollback($event);
+            
+            if ( ! $event->skipOperation) {
+                $this->rollbackSavePoint($savepoint);
+            }
+
+            $listener->postSavepointRollback($event);
+        } else {
+            $event = new Doctrine_Event($this, Doctrine_Event::TX_ROLLBACK);
+    
+            $listener->preTransactionRollback($event);
+            
+            if ( ! $event->skipOperation) {
+                $this->deteles = array();
+
+                $this->transactionLevel = 0;
+                try {
+                    $this->conn->getDbh()->rollback();
+                } catch (Exception $e) {
+                    throw new Doctrine_Transaction_Exception($e->getMessage());
+                }
+            }
+
+            $listener->postTransactionRollback($event);
+        }
+
+        return true;
+    }
+
+    /**
+     * releaseSavePoint
+     * creates a new savepoint
+     *
+     * @param string $savepoint     name of a savepoint to create
+     * @return void
+     */
+    protected function createSavePoint($savepoint)
+    {
+        throw new Doctrine_Transaction_Exception('Savepoints not supported by this driver.');
+    }
+
+    /**
+     * releaseSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to release
+     * @return void
+     */
+    protected function releaseSavePoint($savepoint)
+    {
+        throw new Doctrine_Transaction_Exception('Savepoints not supported by this driver.');
+    }
+
+    /**
+     * rollbackSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to rollback to
+     * @return void
+     */
+    protected function rollbackSavePoint($savepoint)
+    {
+        throw new Doctrine_Transaction_Exception('Savepoints not supported by this driver.');
+    }
+
+    /**
+     * removeSavePoints
+     * removes a savepoint from the internal savePoints array of this transaction object
+     * and all its children savepoints
+     *
+     * @param sring $savepoint      name of the savepoint to remove
+     * @return integer              removed savepoints
+     */
+    private function removeSavePoints($savepoint)
+    {
+    	$this->savePoints = array_values($this->savePoints);
+
+        $found = false;
+        $i = 0;
+
+        foreach ($this->savePoints as $key => $sp) {
+            if ( ! $found) {
+                if ($sp === $savepoint) {
+                    $found = true;
+                }
+            }
+            if ($found) {
+                $i++;
+                unset($this->savePoints[$key]);
+            }
+        }
+
+        return $i;
+    }
+
+    /**
+     * setIsolation
+     *
+     * Set the transacton isolation level.
+     * (implemented by the connection drivers)
+     *
+     * example:
+     *
+     * <code>
+     * $tx->setIsolation('READ UNCOMMITTED');
+     * </code>
+     *
+     * @param   string  standard isolation level
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     *
+     * @throws Doctrine_Transaction_Exception           if the feature is not supported by the driver
+     * @throws PDOException                             if something fails at the PDO level
+     * @return void
+     */
+    public function setIsolation($isolation)
+    {
+        throw new Doctrine_Transaction_Exception('Transaction isolation levels not supported by this driver.');
+    }
+
+    /**
+     * getTransactionIsolation
+     *
+     * fetches the current session transaction isolation level
+     *
+     * note: some drivers may support setting the transaction isolation level
+     * but not fetching it
+     *
+     * @throws Doctrine_Transaction_Exception           if the feature is not supported by the driver
+     * @throws PDOException                             if something fails at the PDO level
+     * @return string                                   returns the current session transaction isolation level
+     */
+    public function getIsolation()
+    {
+        throw new Doctrine_Transaction_Exception('Fetching transaction isolation level not supported by this driver.');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..0990a0c1a82ce281570ea7f125ffa2e05edd84f4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Transaction_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ */
+class Doctrine_Transaction_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Firebird.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Firebird.php
new file mode 100644
index 0000000000000000000000000000000000000000..20db4540a72cac163b8b347b749d71f32109750c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Firebird.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ *  $Id: Firebird.php 1269 2007-04-18 08:59:10Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1269 $
+ */
+class Doctrine_Transaction_Firebird extends Doctrine_Transaction
+{
+    /**
+     * createSavepoint
+     * creates a new savepoint
+     *
+     * @param string $savepoint     name of a savepoint to set
+     * @return void
+     */
+    protected function createSavePoint($savepoint)
+    {
+        $query = 'SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * releaseSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to release
+     * @return void
+     */
+    protected function releaseSavePoint($savepoint)
+    {
+        $query = 'RELEASE SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * rollbackSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to rollback to
+     * @return void
+     */
+    protected function rollbackSavePoint($savepoint)
+    {
+        $query = 'ROLLBACK TO SAVEPOINT '.$savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level (SQL-92)
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     *
+     * @param   array some transaction options:
+     *                  'wait' => 'WAIT' | 'NO WAIT'
+     *                  'rw'   => 'READ WRITE' | 'READ ONLY'
+     *
+     * @throws PDOException                         if something fails at the PDO level
+     * @throws Doctrine_Transaction_Exception       if using unknown isolation level or unknown wait option
+     * @return void
+     */
+    public function setIsolation($isolation, $options = array()) {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+                $nativeIsolation = 'READ COMMITTED RECORD_VERSION';
+                break;
+            case 'READ COMMITTED':
+                $nativeIsolation = 'READ COMMITTED NO RECORD_VERSION';
+                break;
+            case 'REPEATABLE READ':
+                $nativeIsolation = 'SNAPSHOT';
+                break;
+            case 'SERIALIZABLE':
+                $nativeIsolation = 'SNAPSHOT TABLE STABILITY';
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('isolation level is not supported: ' . $isolation);
+        }
+
+        $rw = $wait = '';
+
+        if (isset($options['wait'])) {
+            switch ($options['wait']) {
+                case 'WAIT':
+                case 'NO WAIT':
+                    $wait = ' ' . $options['wait'];
+                break;
+                default:
+                    throw new Doctrine_Transaction_Exception('wait option is not supported: ' . $options['wait']);
+            }
+        }
+
+        if (isset($options['rw'])) {
+            switch ($options['rw']) {
+                case 'READ ONLY':
+                case 'READ WRITE':
+                    $rw = ' ' . $options['rw'];
+                    break;
+                default:
+                    throw new Doctrine_Transaction_Exception('wait option is not supported: ' . $options['rw']);
+            }
+        }
+
+        $query = 'SET TRANSACTION' . $rw . $wait .' ISOLATION LEVEL ' . $nativeIsolation;
+
+        $this->conn->execute($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Informix.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Informix.php
new file mode 100644
index 0000000000000000000000000000000000000000..b12b17f8c7c40a9fe7fe8150f3733896a8df11de
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Informix.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Informix.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Transaction_Informix extends Doctrine_Transaction
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mock.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mock.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f337c496fdd3b7354e7c71ddf1895378359d654
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mock.php
@@ -0,0 +1,37 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ * Doctrine_Transaction_Mock
+ * This class is used for testing purposes
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ */
+class Doctrine_Transaction_Mock extends Doctrine_Transaction
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mssql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mssql.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e45136cfc6f89915138d1201bfd3bc950a0b71b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mssql.php
@@ -0,0 +1,68 @@
+<?php
+/*
+ *  $Id: Mssql.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Transaction_Mssql extends Doctrine_Transaction
+{
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level (SQL-92)
+     *      portable modes:
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     *      mssql specific modes:
+     *                  SNAPSHOT
+     *
+     * @link http://msdn2.microsoft.com/en-us/library/ms173763.aspx
+     * @throws PDOException                         if something fails at the PDO level
+     * @throws Doctrine_Transaction_Exception       if using unknown isolation level or unknown wait option
+     * @return void
+     */
+    public function setIsolation($isolation, $options = array()) {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+            case 'READ COMMITTED':
+            case 'REPEATABLE READ':
+            case 'SERIALIZABLE':
+            case 'SNAPSHOT':
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('isolation level is not supported: ' . $isolation);
+        }
+
+        $query = 'SET TRANSACTION ISOLATION LEVEL ' . $isolation;
+
+        $this->conn->execute($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mysql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mysql.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e170f5be3581284dfc654c16998c7905c3acb8a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Mysql.php
@@ -0,0 +1,112 @@
+<?php
+/*
+ *  $Id: Mysql.php 1269 2007-04-18 08:59:10Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1269 $
+ */
+class Doctrine_Transaction_Mysql extends Doctrine_Transaction
+{
+    /**
+     * createSavepoint
+     * creates a new savepoint
+     *
+     * @param string $savepoint     name of a savepoint to set
+     * @return void
+     */
+    protected function createSavePoint($savepoint)
+    {
+        $query = 'SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * releaseSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to release
+     * @return void
+     */
+    protected function releaseSavePoint($savepoint)
+    {
+        $query = 'RELEASE SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * rollbackSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to rollback to
+     * @return void
+     */
+    protected function rollbackSavePoint($savepoint)
+    {
+        $query = 'ROLLBACK TO SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     *
+     * @throws Doctrine_Transaction_Exception           if using unknown isolation level
+     * @throws PDOException                             if something fails at the PDO level
+     * @return void
+     */
+    public function setIsolation($isolation)
+    {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+            case 'READ COMMITTED':
+            case 'REPEATABLE READ':
+            case 'SERIALIZABLE':
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('Isolation level ' . $isolation . ' is not supported.');
+        }
+
+        $query = 'SET SESSION TRANSACTION ISOLATION LEVEL ' . $isolation;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * getTransactionIsolation
+     *
+     * @return string               returns the current session transaction isolation level
+     */
+    public function getIsolation()
+    {
+        return $this->conn->fetchOne('SELECT @@tx_isolation');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Oracle.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Oracle.php
new file mode 100644
index 0000000000000000000000000000000000000000..476025a3fc61674b31bc3d7e71b2a75818519647
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Oracle.php
@@ -0,0 +1,103 @@
+<?php
+/*
+ *  $Id: Oracle.php 1119 2007-02-17 18:21:26Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1119 $
+ */
+class Doctrine_Transaction_Oracle extends Doctrine_Transaction
+{
+    /**
+     * createSavepoint
+     * creates a new savepoint
+     *
+     * @param string $savepoint     name of a savepoint to set
+     * @return void
+     */
+    protected function createSavePoint($savepoint)
+    {
+        $query = 'SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * releaseSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to release
+     * @return void
+     */
+    protected function releaseSavePoint($savepoint)
+    {
+        // oracle doesn't support manual releasing of savepoints
+        return true;
+    }
+    /**
+     * rollbackSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to rollback to
+     * @return void
+     */
+    protected function rollbackSavePoint($savepoint)
+    {
+        $query = 'ROLLBACK TO SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     * @throws PDOException                         if something fails at the PDO level
+     * @throws Doctrine_Transaction_Exception       if using unknown isolation level
+     * @return void
+     */
+    public function setIsolation($isolation)
+    {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+                $isolation = 'READ COMMITTED';
+                break;
+            case 'READ COMMITTED':
+            case 'REPEATABLE READ':
+            case 'SERIALIZABLE':
+                $isolation = 'SERIALIZABLE';
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('Isolation level ' . $isolation . ' is not supported.');
+        }
+
+        $query = 'ALTER SESSION ISOLATION LEVEL ' . $isolation;
+        return $this->conn->execute($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Pgsql.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Pgsql.php
new file mode 100644
index 0000000000000000000000000000000000000000..026362c40d2391b2d583426eeda225cac2edf430
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Pgsql.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ *  $Id: Pgsql.php 1269 2007-04-18 08:59:10Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Paul Cooper <pgc@ucecom.com> (PEAR MDB2 Pgsql driver)
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1269 $
+ */
+class Doctrine_Transaction_Pgsql extends Doctrine_Transaction
+{
+    /**
+     * createSavepoint
+     * creates a new savepoint
+     *
+     * @param string $savepoint     name of a savepoint to set
+     * @return void
+     */
+    protected function createSavePoint($savepoint)
+    {
+        $query = 'SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * releaseSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to release
+     * @return void
+     */
+    protected function releaseSavePoint($savepoint)
+    {
+        $query = 'RELEASE SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * rollbackSavePoint
+     * releases given savepoint
+     *
+     * @param string $savepoint     name of a savepoint to rollback to
+     * @return void
+     */
+    protected function rollbackSavePoint($savepoint)
+    {
+        $query = 'ROLLBACK TO SAVEPOINT ' . $savepoint;
+
+        return $this->conn->execute($query);
+    }
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     * @throws PDOException                         if something fails at the PDO level
+     * @throws Doctrine_Transaction_Exception       if using unknown isolation level or unknown wait option
+     * @return void
+     */
+    public function setIsolation($isolation)
+    {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+            case 'READ COMMITTED':
+            case 'REPEATABLE READ':
+            case 'SERIALIZABLE':
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('Isolation level '.$isolation.' is not supported.');
+        }
+
+        $query = 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ' . $isolation;
+        return $this->conn->execute($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Sqlite.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Sqlite.php
new file mode 100644
index 0000000000000000000000000000000000000000..93ab4e8c43c6d50afec9fba940429ac1a8d0e127
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Transaction/Sqlite.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ *  $Id: Sqlite.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Transaction');
+/**
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Transaction_Sqlite extends Doctrine_Transaction
+{
+    /**
+     * Set the transacton isolation level.
+     *
+     * @param   string  standard isolation level
+     *                  READ UNCOMMITTED (allows dirty reads)
+     *                  READ COMMITTED (prevents dirty reads)
+     *                  REPEATABLE READ (prevents nonrepeatable reads)
+     *                  SERIALIZABLE (prevents phantom reads)
+     * @throws PDOException                         if something fails at the PDO level
+     * @throws Doctrine_Transaction_Exception       if using unknown isolation level
+     * @return void
+     */
+    public function setIsolation($isolation)
+    {
+        switch ($isolation) {
+            case 'READ UNCOMMITTED':
+                $isolation = 0;
+                break;
+            case 'READ COMMITTED':
+            case 'REPEATABLE READ':
+            case 'SERIALIZABLE':
+                $isolation = 1;
+                break;
+            default:
+                throw new Doctrine_Transaction_Exception('Isolation level ' . $isolation . 'is not supported.');
+        }
+
+        $query = 'PRAGMA read_uncommitted = ' . $isolation;
+
+        return $this->conn->execute($query);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree.php
new file mode 100644
index 0000000000000000000000000000000000000000..d41146cfa52fc57d4fe998f59eb10c98136489ab
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree.php
@@ -0,0 +1,130 @@
+<?php
+/*
+ *  $Id: Tree.php 2097 2007-07-29 19:38:11Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */                   
+/**
+ * Doctrine_Tree
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2097 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Tree
+{
+    /**
+     * @param object $table   reference to associated Doctrine_Table instance
+     */
+    protected $table;
+
+    /**
+     * @param array $options
+     */
+    protected $options = array();
+    
+    protected $_baseComponent;
+
+    /**
+     * constructor, creates tree with reference to table and any options
+     *
+     * @param object $table                     instance of Doctrine_Table
+     * @param array $options                    options
+     */
+    public function __construct(Doctrine_Table $table, $options)
+    {
+        $this->table = $table;
+        $this->options = $options;
+        $this->_baseComponent = $table->getComponentName();
+        $class = $this->_baseComponent;
+        if ($table->getOption('inheritanceMap')) {
+            $subclasses = $table->getOption('subclasses');
+            while (in_array($class, $subclasses)) {
+                $class = get_parent_class($class);
+            }
+            $this->_baseComponent = $class;
+        }
+        //echo $this->_baseComponent;
+    }
+
+    /**
+     * Used to define table attributes required for the given implementation
+     *
+     * @throws Doctrine_Tree_Exception          if table attributes have not been defined
+     */
+    public function setTableDefinition()
+    {
+        throw new Doctrine_Tree_Exception('Table attributes have not been defined for this Tree implementation.');
+    }
+
+    /**
+     * this method is used for setting up relations and attributes and should be used by specific implementations
+     *
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * factory method to return tree instance based upon chosen implementation
+     *
+     * @param object $table                     instance of Doctrine_Table
+     * @param string $impName                   implementation (NestedSet, AdjacencyList, MaterializedPath)
+     * @param array $options                    options
+     * @return object $options                  instance of Doctrine_Node
+     * @throws Doctrine_Exception               if class does not extend Doctrine_Tree
+     */
+    public static function factory(Doctrine_Table $table, $implName, $options = array())
+    {
+        $class = 'Doctrine_Tree_' . $implName;
+        if (!class_exists($class)) {
+            throw new Doctrine_Exception('The chosen class must extend Doctrine_Tree');
+        }
+        return new $class($table, $options);
+    }
+
+    /**
+     * gets tree attribute value
+     *        
+     */     
+    public function getAttribute($name)
+    {
+      return isset($this->options[$name]) ? $this->options[$name] : null;
+    }
+
+    /**
+     * sets tree attribute value
+     *
+     * @param mixed            
+     */
+    public function setAttribute($name, $value)
+    {
+      $this->options[$name] = $value;
+    }
+    
+    /**
+     * Returns the base tree component.
+     */
+    public function getBaseComponent()
+    {
+        return $this->_baseComponent;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/AdjacencyList.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/AdjacencyList.php
new file mode 100644
index 0000000000000000000000000000000000000000..86e8012019f23ff52ef4a3f09655bc6efffcf5db
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/AdjacencyList.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: AdjacencyList.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Tree_AdjacencyList
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Tree_AdjacencyList extends Doctrine_Tree implements Doctrine_Tree_Interface
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d6c3aa5de757881d1b5c7154c95e45fa086e5e8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Exception.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Tree_Exception
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Tree_Exception extends Doctrine_Exception
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Interface.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8716f5372f97b7cbec40d3abe664456e8e6e9f2
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/Interface.php
@@ -0,0 +1,64 @@
+<?php
+/*
+ *  $Id: Interface.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Tree_Interface
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+interface Doctrine_Tree_Interface {
+
+    /**
+     * creates root node from given record or from a new record
+     *
+     * @param object $record                    instance of Doctrine_Record
+     */
+    public function createRoot(Doctrine_Record $record = null);
+
+    /**
+     * returns root node
+     *
+     * @return object $record                   instance of Doctrine_Record
+     */
+    public function findRoot($root_id = 1);
+
+    /**
+     * optimised method to returns iterator for traversal of the entire tree from root
+     *
+     * @param array $options                    options
+     * @return object $iterator                 instance of Doctrine_Node_<Implementation>_PreOrderIterator
+     */
+    public function fetchTree($options = array());
+
+    /**
+     * optimised method that returns iterator for traversal of the tree from the given record primary key
+     *
+     * @param mixed $pk                         primary key as used by table::find() to locate node to traverse tree from
+     * @param array $options                    options
+     * @return iterator                         instance of Doctrine_Node_<Implementation>_PreOrderIterator
+     */
+    public function fetchBranch($pk, $options = array());
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/MaterializedPath.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/MaterializedPath.php
new file mode 100644
index 0000000000000000000000000000000000000000..5763bf5e9d0d937bf3b508eaa0a2dfe32bf02e9d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/MaterializedPath.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ *  $Id: MaterializedPath.php 1716 2007-06-15 10:33:15Z zYne $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Tree_MaterializedPath
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1716 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+abstract class Doctrine_Tree_MaterializedPath extends Doctrine_Tree implements Doctrine_Tree_Interface
+{}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/NestedSet.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/NestedSet.php
new file mode 100644
index 0000000000000000000000000000000000000000..cd4cdf2ccfc989e50fea320ed05cc46e6d6e44fb
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Tree/NestedSet.php
@@ -0,0 +1,355 @@
+<?php
+/*
+ *  $Id: NestedSet.php 2230 2007-08-14 16:37:48Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Tree_NestedSet
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2230 $
+ * @author      Joe Simms <joe.simms@websites4.com>
+ */
+class Doctrine_Tree_NestedSet extends Doctrine_Tree implements Doctrine_Tree_Interface
+{
+    private $_baseQuery;
+    private $_baseAlias = "base";
+    
+    /**
+     * constructor, creates tree with reference to table and sets default root options
+     *
+     * @param object $table                     instance of Doctrine_Table
+     * @param array $options                    options
+     */
+    public function __construct(Doctrine_Table $table, $options)
+    {
+        // set default many root attributes
+        $options['hasManyRoots'] = isset($options['hasManyRoots']) ? $options['hasManyRoots'] : false;
+        if($options['hasManyRoots'])
+            $options['rootColumnName'] = isset($options['rootColumnName']) ? $options['rootColumnName'] : 'root_id';
+  
+        parent::__construct($table, $options);
+    }
+    
+    /**
+     * used to define table attributes required for the NestetSet implementation
+     * adds lft and rgt columns for corresponding left and right values
+     *
+     */
+    public function setTableDefinition()
+    {
+        if ($root = $this->getAttribute('rootColumnName')) {
+            $this->table->setColumn($root, 'integer', 4);
+        }
+
+        $this->table->setColumn('lft', 'integer', 4);
+        $this->table->setColumn('rgt', 'integer', 4);
+        $this->table->setColumn('level', 'integer', 2);
+    }
+
+    /**
+     * creates root node from given record or from a new record
+     *
+     * @param object $record        instance of Doctrine_Record
+     */
+    public function createRoot(Doctrine_Record $record = null)
+    {
+        if ( ! $record) {
+            $record = $this->table->create();
+        }
+
+        // if tree is many roots, and no root id has been set, then get next root id
+        if ($root = $this->getAttribute('hasManyRoots') && $record->getNode()->getRootValue() <= 0) {
+            $record->getNode()->setRootValue($this->getNextRootId());
+        }
+
+        $record->set('lft', '1');
+        $record->set('rgt', '2');
+        $record->set('level', 0);
+
+        $record->save();
+
+        return $record;
+    }
+
+    /**
+     * returns root node
+     *
+     * @return object $record        instance of Doctrine_Record
+     * @deprecated Use fetchRoot()
+     */
+    public function findRoot($rootId = 1)
+    {
+        return $this->fetchRoot($rootId);
+    }
+    
+    /**
+     * Fetches a/the root node.
+     *
+     * @param integer $rootId
+     */
+    public function fetchRoot($rootId = 1)
+    {
+        $q = $this->getBaseQuery();
+        $q = $q->addWhere($this->_baseAlias . '.lft = ?', 1);
+        
+        // if tree has many roots, then specify root id
+        $q = $this->returnQueryWithRootId($q, $rootId);
+        $data = $q->execute();
+
+        if (count($data) <= 0) {
+            return false;
+        }
+
+        if ($data instanceof Doctrine_Collection) {
+            $root = $data->getFirst();
+            $root['level'] = 0;
+        } else if (is_array($data)) {
+            $root = array_shift($data);
+            $root['level'] = 0;
+        } else {
+            throw new Doctrine_Tree_Exception("Unexpected data structure returned.");
+        }
+
+        return $root;
+    }
+
+    /**
+     * Fetches a tree.
+     *
+     * @param array $options  Options
+     * @return mixed          The tree or FALSE if the tree could not be found.
+     */
+    public function fetchTree($options = array())
+    {
+        // fetch tree
+        $q = $this->getBaseQuery();
+
+        $q = $q->addWhere($this->_baseAlias . ".lft >= ?", 1);
+
+        // if tree has many roots, then specify root id
+        $rootId = isset($options['root_id']) ? $options['root_id'] : '1';
+        if (is_array($rootId)) {
+            $q->addOrderBy($this->_baseAlias . "." . $this->getAttribute('rootColumnName') .
+                    ", " . $this->_baseAlias . ".lft ASC");
+        } else {
+            $q->addOrderBy($this->_baseAlias . ".lft ASC");
+        }
+        
+        $q = $this->returnQueryWithRootId($q, $rootId);
+        $tree = $q->execute();
+        
+        if (count($tree) <= 0) {
+            return false;
+        }
+        
+        return $tree;
+    }
+
+    /**
+     * Fetches a branch of a tree.
+     *
+     * @param mixed $pk              primary key as used by table::find() to locate node to traverse tree from
+     * @param array $options         Options.
+     * @return mixed                 The branch or FALSE if the branch could not be found.
+     * @todo Only fetch the lft and rgt values of the initial record. more is not needed.
+     */
+    public function fetchBranch($pk, $options = array())
+    {
+        $record = $this->table->find($pk);
+        if ( ! ($record instanceof Doctrine_Record) || !$record->exists()) {
+            // TODO: if record doesn't exist, throw exception or similar?
+            return false;
+        }
+        //$depth = isset($options['depth']) ? $options['depth'] : null;
+        
+        $q = $this->getBaseQuery();
+        $params = array($record->get('lft'), $record->get('rgt'));
+        $q->addWhere($this->_baseAlias . ".lft >= ? AND " . $this->_baseAlias . ".rgt <= ?", $params)
+                ->addOrderBy($this->_baseAlias . ".lft asc");
+        $q = $this->returnQueryWithRootId($q, $record->getNode()->getRootValue());
+        return $q->execute();
+    }
+
+    /**
+     * Fetches all root nodes. If the tree has only one root this is the same as
+     * fetchRoot().
+     *
+     * @return mixed  The root nodes.
+     */
+    public function fetchRoots()
+    {
+        $q = $this->getBaseQuery();
+        $q = $q->addWhere($this->_baseAlias . '.lft = ?', 1);
+        return $q->execute();
+    }
+
+    /**
+     * calculates the next available root id
+     *
+     * @return integer
+     */
+    public function getNextRootId()
+    {
+        return $this->getMaxRootId() + 1;
+    }
+
+    /**
+     * calculates the current max root id
+     *
+     * @return integer
+     */    
+    public function getMaxRootId()
+    {      
+        $component = $this->table->getComponentName();
+        $column    = $this->getAttribute('rootColumnName');
+
+        // cannot get this dql to work, cannot retrieve result using $coll[0]->max
+        //$dql = "SELECT MAX(c.$column) FROM $component c";
+        
+        $dql = 'SELECT c.' . $column . ' FROM ' . $component . ' c ORDER BY c.' . $column . ' DESC LIMIT 1';
+  
+        $coll = $this->table->getConnection()->query($dql);
+  
+        $max = $coll[0]->get($column);
+  
+        $max = !is_null($max) ? $max : 0;
+  
+        return $max;      
+    }
+
+    /**
+     * returns parsed query with root id where clause added if applicable
+     *
+     * @param object    $query    Doctrine_Query
+     * @param integer   $root_id  id of destination root
+     * @return object   Doctrine_Query
+     */
+    public function returnQueryWithRootId($query, $rootId = 1)
+    {
+        if ($root = $this->getAttribute('rootColumnName')) {
+            if (is_array($rootId)) {
+               $query->addWhere($root . ' IN (' . implode(',', array_fill(0, count($rootId), '?')) . ')',
+                       $rootId);
+            } else {
+               $query->addWhere($root . ' = ?', $rootId); 
+            }
+        }
+
+        return $query;
+    }
+    
+    /**
+     * Enter description here...
+     *
+     * @param array $options
+     * @return unknown
+     */
+    public function getBaseQuery()
+    {
+        if (!isset($this->_baseQuery)) {
+            $this->_baseQuery = $this->_createBaseQuery();
+        }
+        return $this->_baseQuery->copy();
+    }
+    
+    /**
+     * Enter description here...
+     *
+     */
+    public function getBaseAlias()
+    {
+        return $this->_baseAlias;
+    }
+    
+    /**
+     * Enter description here...
+     *
+     */
+    private function _createBaseQuery()
+    {
+        $this->_baseAlias = "base";
+        $q = new Doctrine_Query();
+        $q->select($this->_baseAlias . ".*")->from($this->getBaseComponent() . " " . $this->_baseAlias);
+        return $q;
+    }
+    
+    /**
+     * Enter description here...
+     *
+     * @param Doctrine_Query $query
+     */
+    public function setBaseQuery(Doctrine_Query $query)
+    {
+        $this->_baseAlias = $query->getRootAlias();
+        $query->addSelect($this->_baseAlias . ".lft, " . $this->_baseAlias . ".rgt, ". $this->_baseAlias . ".level");
+        if ($this->getAttribute('rootColumnName')) {
+            $query->addSelect($this->_baseAlias . "." . $this->getAttribute('rootColumnName'));
+        }
+        $this->_baseQuery = $query;
+    }
+    
+    /**
+     * Enter description here...
+     *
+     */
+    public function resetBaseQuery()
+    {
+        $this->_baseQuery = null;
+    }
+    
+    /**
+     * Enter description here...
+     *
+     * @param unknown_type $graph
+     */
+    /*
+    public function computeLevels($tree)
+    {
+        $right = array();
+        $isArray = is_array($tree);
+        $rootColumnName = $this->getAttribute('rootColumnName');
+        
+        for ($i = 0, $count = count($tree); $i < $count; $i++) {
+            if ($rootColumnName && $i > 0 && $tree[$i][$rootColumnName] != $tree[$i-1][$rootColumnName]) {
+                $right = array();
+            }
+            
+            if (count($right) > 0) {
+                while (count($right) > 0 && $right[count($right)-1] < $tree[$i]['rgt']) {
+                    //echo count($right);
+                    array_pop($right);
+                }
+            }
+     
+            if ($isArray) {
+                $tree[$i]['level'] = count($right);
+            } else {
+                $tree[$i]->getNode()->setLevel(count($right));
+            }
+    
+            $right[] = $tree[$i]['rgt'];
+        }
+        return $tree;
+    }
+    */
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Util.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Util.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2c374cbcb36803fd1ecef52aafd079f34cbdf3b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Util.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Connection_Module');
+/**
+ * Doctrine_Util
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision$
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Util extends Doctrine_Connection_Module
+{
+    
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator.php
new file mode 100644
index 0000000000000000000000000000000000000000..faca5f01dbadfe1ce64d1ad8d73b6161fee4d788
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator.php
@@ -0,0 +1,263 @@
+<?php
+/*
+ *  $Id: Validator.php 2193 2007-08-10 06:01:54Z nicobn $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Validator
+ * Doctrine_Validator performs validations in record properties
+ *
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2193 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator extends Doctrine_Object
+{
+    /**
+     * @var array $validators           an array of validator objects
+     */
+    private static $validators  = array();
+    /**
+     * returns a validator object
+     *
+     * @param string $name
+     * @return Doctrine_Validator_Interface
+     */
+    public static function getValidator($name)
+    {
+        if ( ! isset(self::$validators[$name])) {
+            $class = 'Doctrine_Validator_' . ucwords(strtolower($name));
+            if (class_exists($class)) {
+                self::$validators[$name] = new $class;
+            } else {
+                throw new Doctrine_Exception("Validator named '$name' not available.");
+            }
+
+        }
+        return self::$validators[$name];
+    }
+    /**
+     * validates a given record and saves possible errors
+     * in Doctrine_Validator::$stack
+     *
+     * @param Doctrine_Record $record
+     * @return void
+     */
+    public function validateRecord(Doctrine_Record $record)
+    {
+        $columns   = $record->getTable()->getColumns();
+        $component = $record->getTable()->getComponentName();
+
+        $errorStack = $record->getErrorStack();
+
+        // if record is transient all fields will be validated
+        // if record is persistent only the modified fields will be validated
+        $data = ($record->exists()) ? $record->getModified() : $record->getData();
+
+        $err      = array();
+        foreach ($data as $key => $value) {
+            if ($value === self::$_null) {
+                $value = null;
+            } elseif ($value instanceof Doctrine_Record) {
+                $value = $value->getIncremented();
+            }
+
+            $column = $columns[$key];
+
+            if ($column['type'] == 'enum') {
+                $value = $record->getTable()->enumIndex($key, $value);
+
+                if ($value === false) {
+                    $errorStack->add($key, 'enum');
+                    continue;
+                }
+            }
+
+            if ($record->getTable()->getAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD)) {
+                if (!$this->validateLength($column, $key, $value)) {
+                    $errorStack->add($key, 'length');
+
+                    continue;
+                }
+            }
+
+            foreach ($column as $name => $args) {
+                if (empty($name)
+                    || $name == 'primary'
+                    || $name == 'protected'
+                    || $name == 'autoincrement'
+                    || $name == 'default'
+                    || $name == 'values'
+                    || $name == 'sequence'
+                    || $name == 'zerofill') {
+                    continue;
+                }
+
+                if (strtolower($name) === 'notnull' && isset($column['autoincrement'])) {
+                    continue;
+                }
+
+                if (strtolower($name) == 'length') {
+                    if (!$record->getTable()->getAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD)) {
+                        if (!$this->validateLength($column, $key, $value)) {
+                            $errorStack->add($key, 'length');
+                        }
+                    }
+                    continue;
+                }
+
+                if (strtolower($name) == 'type') {
+                    if (!$record->getTable()->getAttribute(Doctrine::ATTR_AUTO_TYPE_VLD)) {
+                        if ( ! self::isValidType($value, $column['type'])) {
+                            $errorStack->add($key, 'type');
+                        }
+                    }
+                    continue;
+                }
+
+                $validator = self::getValidator($name);
+                if ( ! $validator->validate($record, $key, $value, $args)) {
+                    $errorStack->add($key, $name);
+
+                    //$err[$key] = 'not valid';
+
+                    // errors found quit validation looping for this column
+                    //break;
+                }
+            }
+
+            if ($record->getTable()->getAttribute(Doctrine::ATTR_AUTO_TYPE_VLD)) {
+                if ( ! self::isValidType($value, $column['type'])) {
+                    $errorStack->add($key, 'type');
+                    continue;
+                }
+            }
+        }
+    }
+    /**
+     * Validates the length of a field.
+     */
+    private function validateLength($column, $key, $value)
+    {
+        if ($column['type'] == 'timestamp' || $column['type'] == 'integer') {
+            return true;
+        } elseif ($column['type'] == 'array' || $column['type'] == 'object') {
+            $length = strlen(serialize($value));
+        } else {
+            $length = strlen($value);
+        }
+
+        if ($length > $column['length']) {
+            return false;
+        }
+        return true;
+    }
+    /**
+     * whether or not this validator has errors
+     *
+     * @return boolean
+     */
+    public function hasErrors()
+    {
+        return (count($this->stack) > 0);
+    }
+    /**
+     * converts a doctrine type to native php type
+     *
+     * @param $doctrineType
+     * @return string
+     */
+    public static function phpType($doctrineType)
+    {
+        switch ($doctrineType) {
+            case 'enum':
+                return 'integer';
+            case 'blob':
+            case 'clob':
+            case 'mbstring':
+            case 'timestamp':
+            case 'date':
+            case 'gzip':
+                return 'string';
+                break;
+            default:
+                return $doctrineType;
+        }
+    }
+    /**
+     * returns whether or not the given variable is
+     * valid type
+     *
+     * @param mixed $var
+     * @param string $type
+     * @return boolean
+     */
+    public static function isValidType($var, $type)
+    {
+        if ($type == 'boolean') {
+            return true;
+        }
+
+        $looseType = self::gettype($var);
+        $type      = self::phpType($type);
+
+        switch ($looseType) {
+            case 'float':
+            case 'double':
+            case 'integer':
+                if ($type == 'string' || $type == 'float') {
+                    return true;
+                }
+            case 'string':
+            case 'array':
+            case 'object':
+                return ($type === $looseType);
+                break;
+            case 'NULL':
+                return true;
+                break;
+        };
+    }
+    /**
+     * returns the type of loosely typed variable
+     *
+     * @param mixed $var
+     * @return string
+     */
+    public static function gettype($var)
+    {
+        $type = gettype($var);
+        switch ($type) {
+            case 'string':
+                if (preg_match("/^[0-9]+$/",$var)) {
+                    return 'integer';
+                } elseif (is_numeric($var)) {
+                    return 'float';
+                } else {
+                    return $type;
+                }
+                break;
+            default:
+                return $type;
+        };
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Country.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Country.php
new file mode 100644
index 0000000000000000000000000000000000000000..88ece94e2e7250cd8941f909199a82234977d106
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Country.php
@@ -0,0 +1,299 @@
+<?php
+/*
+ *  $Id: Country.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Country
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Country
+{
+    private static $countries = array(
+        'ad' =>	'Andorra',
+        'ae' =>	'United Arab Emirates',
+        'af' =>	'Afghanistan',
+        'ag' =>	'Antigua and Barbuda',
+        'ai' =>	'Anguilla',
+        'al' =>	'Albania',
+        'am' =>	'Armenia',
+        'an' =>	'Netherlands Antilles',
+        'ao' =>	'Angola',
+        'aq' =>	'Antarctica',
+        'ar' =>	'Argentina',
+        'as' =>	'American Samoa',
+        'at' =>	'Austria',
+        'au' =>	'Australia',
+        'aw' =>	'Aruba',
+        'az' =>	'Azerbaijan',
+        'ba' =>	'Bosnia Hercegovina',
+        'bb' =>	'Barbados',
+        'bd' =>	'Bangladesh',
+        'be' =>	'Belgium',
+        'bf' =>	'Burkina Faso',
+        'bg' =>	'Bulgaria',
+        'bh' =>	'Bahrain',
+        'bi' =>	'Burundi',
+        'bj' =>	'Benin',
+        'bm' =>	'Bermuda',
+        'bn' =>	'Brunei Darussalam',
+        'bo' =>	'Bolivia',
+        'br' =>	'Brazil',
+        'bs' =>	'Bahamas',
+        'bt' =>	'Bhutan',
+        'bv' =>	'Bouvet Island',
+        'bw' =>	'Botswana',
+        'by' =>	'Belarus (Byelorussia)',
+        'bz' =>	'Belize',
+        'ca' =>	'Canada',
+        'cc' =>	'Cocos Islands',
+        'cd' =>	'Congo, The Democratic Republic of the',
+        'cf' =>	'Central African Republic',
+        'cg' =>	'Congo',
+        'ch' =>	'Switzerland',
+        'ci' =>	'Ivory Coast',
+        'ck' =>	'Cook Islands',
+        'cl' =>	'Chile',
+        'cm' =>	'Cameroon',
+        'cn' =>	'China',
+        'co' =>	'Colombia',
+        'cr' =>	'Costa Rica',
+        'cs' =>	'Czechoslovakia',
+        'cu' =>	'Cuba',
+        'cv' =>	'Cape Verde',
+        'cx' =>	'Christmas Island',
+        'cy' =>	'Cyprus',
+        'cz' =>	'Czech Republic',
+        'de' =>	'Germany',
+        'dj' =>	'Djibouti',
+        'dk' =>	'Denmark',
+        'dm' =>	'Dominica',
+        'do' =>	'Dominican Republic',
+        'dz' =>	'Algeria',
+        'ec' =>	'Ecuador',
+        'ee' =>	'Estonia',
+        'eg' =>	'Egypt',
+        'eh' =>	'Western Sahara',
+        'er' =>	'Eritrea',
+        'es' =>	'Spain',
+        'et' =>	'Ethiopia',
+        'fi' =>	'Finland',
+        'fj' =>	'Fiji',
+        'fk' =>	'Falkland Islands',
+        'fm' =>	'Micronesia',
+        'fo' =>	'Faroe Islands',
+        'fr' =>	'France',
+        'fx' =>	'France, Metropolitan FX',
+        'ga' =>	'Gabon',
+        'gb' =>	'United Kingdom (Great Britain)',
+        'gd' =>	'Grenada',
+        'ge' =>	'Georgia',
+        'gf' =>	'French Guiana',
+        'gh' =>	'Ghana',
+        'gi' =>	'Gibraltar',
+        'gl' =>	'Greenland',
+        'gm' =>	'Gambia',
+        'gn' =>	'Guinea',
+        'gp' =>	'Guadeloupe',
+        'gq' =>	'Equatorial Guinea',
+        'gr' =>	'Greece',
+        'gs' =>	'South Georgia and the South Sandwich Islands',
+        'gt' =>	'Guatemala',
+        'gu' =>	'Guam',
+        'gw' =>	'Guinea-bissau',
+        'gy' =>	'Guyana',
+        'hk' =>	'Hong Kong',
+        'hm' =>	'Heard and McDonald Islands',
+        'hn' =>	'Honduras',
+        'hr' =>	'Croatia',
+        'ht' =>	'Haiti',
+        'hu' =>	'Hungary',
+        'id' =>	'Indonesia',
+        'ie' =>	'Ireland',
+        'il' =>	'Israel',
+        'in' =>	'India',
+        'io' =>	'British Indian Ocean Territory',
+        'iq' =>	'Iraq',
+        'ir' =>	'Iran',
+        'is' =>	'Iceland',
+        'it' =>	'Italy',
+        'jm' =>	'Jamaica',
+        'jo' =>	'Jordan',
+        'jp' =>	'Japan',
+        'ke' =>	'Kenya',
+        'kg' =>	'Kyrgyzstan',
+        'kh' =>	'Cambodia',
+        'ki' =>	'Kiribati',
+        'km' =>	'Comoros',
+        'kn' =>	'Saint Kitts and Nevis',
+        'kp' =>	'North Korea',
+        'kr' =>	'South Korea',
+        'kw' =>	'Kuwait',
+        'ky' =>	'Cayman Islands',
+        'kz' =>	'Kazakhstan',
+        'la' =>	'Laos',
+        'lb' =>	'Lebanon',
+        'lc' =>	'Saint Lucia',
+        'li' =>	'Lichtenstein',
+        'lk' =>	'Sri Lanka',
+        'lr' =>	'Liberia',
+        'ls' =>	'Lesotho',
+        'lt' =>	'Lithuania',
+        'lu' =>	'Luxembourg',
+        'lv' =>	'Latvia',
+        'ly' =>	'Libya',
+        'ma' =>	'Morocco',
+        'mc' =>	'Monaco',
+        'md' =>	'Moldova Republic',
+        'mg' =>	'Madagascar',
+        'mh' =>	'Marshall Islands',
+        'mk' =>	'Macedonia, The Former Yugoslav Republic of',
+        'ml' =>	'Mali',
+        'mm' =>	'Myanmar',
+        'mn' =>	'Mongolia',
+        'mo' =>	'Macau',
+        'mp' =>	'Northern Mariana Islands',
+        'mq' =>	'Martinique',
+        'mr' =>	'Mauritania',
+        'ms' =>	'Montserrat',
+        'mt' =>	'Malta',
+        'mu' =>	'Mauritius',
+        'mv' =>	'Maldives',
+        'mw' =>	'Malawi',
+        'mx' =>	'Mexico',
+        'my' =>	'Malaysia',
+        'mz' =>	'Mozambique',
+        'na' =>	'Namibia',
+        'nc' =>	'New Caledonia',
+        'ne' =>	'Niger',
+        'nf' =>	'Norfolk Island',
+        'ng' =>	'Nigeria',
+        'ni' =>	'Nicaragua',
+        'nl' =>	'Netherlands',
+        'no' =>	'Norway',
+        'np' =>	'Nepal',
+        'nr' =>	'Nauru',
+        'nt' =>	'Neutral Zone',
+        'nu' =>	'Niue',
+        'nz' =>	'New Zealand',
+        'om' =>	'Oman',
+        'pa' =>	'Panama',
+        'pe' =>	'Peru',
+        'pf' =>	'French Polynesia',
+        'pg' =>	'Papua New Guinea',
+        'ph' =>	'Philippines',
+        'pk' =>	'Pakistan',
+        'pl' =>	'Poland',
+        'pm' =>	'St. Pierre and Miquelon',
+        'pn' =>	'Pitcairn',
+        'pr' =>	'Puerto Rico',
+        'pt' =>	'Portugal',
+        'pw' =>	'Palau',
+        'py' =>	'Paraguay',
+        'qa' =>	'Qatar',
+        're' =>	'Reunion',
+        'ro' =>	'Romania',
+        'ru' =>	'Russia',
+        'rw' =>	'Rwanda',
+        'sa' =>	'Saudi Arabia',
+        'sb' =>	'Solomon Islands',
+        'sc' =>	'Seychelles',
+        'sd' =>	'Sudan',
+        'se' =>	'Sweden',
+        'sg' =>	'Singapore',
+        'sh' =>	'St. Helena',
+        'si' =>	'Slovenia',
+        'sj' =>	'Svalbard and Jan Mayen Islands',
+        'sk' =>	'Slovakia (Slovak Republic)',
+        'sl' =>	'Sierra Leone',
+        'sm' =>	'San Marino',
+        'sn' =>	'Senegal',
+        'so' =>	'Somalia',
+        'sr' =>	'Suriname',
+        'st' =>	'Sao Tome and Principe',
+        'sv' =>	'El Salvador',
+        'sy' =>	'Syria',
+        'sz' =>	'Swaziland',
+        'tc' =>	'Turks and Caicos Islands',
+        'td' =>	'Chad',
+        'tf' =>	'French Southern Territories',
+        'tg' =>	'Togo',
+        'th' =>	'Thailand',
+        'tj' =>	'Tajikistan',
+        'tk' =>	'Tokelau',
+        'tm' =>	'Turkmenistan',
+        'tn' =>	'Tunisia',
+        'to' =>	'Tonga',
+        'tp' =>	'East Timor',
+        'tr' =>	'Turkey',
+        'tt' =>	'Trinidad, Tobago',
+        'tv' =>	'Tuvalu',
+        'tw' =>	'Taiwan',
+        'tz' =>	'Tanzania',
+        'ua' =>	'Ukraine',
+        'ug' =>	'Uganda',
+        'uk' =>	'United Kingdom',
+        'um' =>	'United States Minor Islands',
+        'us' =>	'United States of America',
+        'uy' =>	'Uruguay',
+        'uz' =>	'Uzbekistan',
+        'va' =>	'Vatican City',
+        'vc' =>	'Saint Vincent, Grenadines',
+        've' =>	'Venezuela',
+        'vg' =>	'Virgin Islands (British)',
+        'vi' =>	'Virgin Islands (USA)',
+        'vn' =>	'Viet Nam',
+        'vu' =>	'Vanuatu',
+        'wf' =>	'Wallis and Futuna Islands',
+        'ws' =>	'Samoa',
+        'ye' =>	'Yemen',
+        'yt' =>	'Mayotte',
+        'yu' =>	'Yugoslavia',
+        'za' =>	'South Africa',
+        'zm' =>	'Zambia',
+        'zr' =>	'Zaire',
+        'zw' =>	'Zimbabwe');
+    /**
+     * @return array
+     */
+    public static function getCountries()
+    {
+        return self::$countries;
+    }
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        $value = strtolower($value);
+        return isset(self::$countries[$value]);
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Creditcard.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Creditcard.php
new file mode 100644
index 0000000000000000000000000000000000000000..a85623e2fb8fc90705917dead40757b363b62b9b
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Creditcard.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ *  $Id: Creditcard.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Creditcard
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Creditcard
+{
+
+    /**
+     * @link http://www.owasp.org/index.php/OWASP_Validation_Regex_Repository
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        return preg_match('#^((4\d{3})|(5[1-5]\d{2})|(6011)|(7\d{3}))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$#', $value);
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Date.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Date.php
new file mode 100644
index 0000000000000000000000000000000000000000..fdaf0de247b5f0122c369bb1911fcfc54af3e5a1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Date.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ *  $Id: Date.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Date
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Date
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        if (empty($value)) {
+            return true;
+        }
+        $e = explode("-", $value);
+        if (count($e) !== 3) {
+            return false;
+        }
+        return checkdate($e[1], $e[2], $e[0]);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Email.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Email.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c1c6d69d3addfaa8ba6629e20fc78100f01912e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Email.php
@@ -0,0 +1,80 @@
+<?php
+/*
+ *  $Id: Email.php 1444 2007-05-23 09:55:32Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Email
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1444 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Email
+{
+    /**
+     * @link http://iamcal.com/publish/articles/php/parsing_email/pdf/
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        if (empty($value)) {
+            return true;
+        }
+        if (isset($args[0])) {
+            $parts = explode("@", $value);
+            if (isset($parts[1]) && function_exists("checkdnsrr")) {
+                if ( ! checkdnsrr($parts[1], "MX")) {
+                    return false;
+                }
+            }
+        }
+
+        $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
+        $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
+        $atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
+        $quoted_pair = '\\x5c[\\x00-\\x7f]';
+        $domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d";
+        $quoted_string = "\\x22($qtext|$quoted_pair)*\\x22";
+        $domain_ref = $atom;
+        $sub_domain = "($domain_ref|$domain_literal)";
+        $word = "($atom|$quoted_string)";
+        $domain = "$sub_domain(\\x2e$sub_domain)+";
+        /*
+          following psudocode to allow strict checking - ask pookey about this if you're puzzled
+
+          if ($this->getValidationOption('strict_checking') == true) {
+              $domain = "$sub_domain(\\x2e$sub_domain)*";
+          }
+        */
+        $local_part = "$word(\\x2e$word)*";
+        $addr_spec = "$local_part\\x40$domain";
+
+        return (bool)preg_match("!^$addr_spec$!D", $value);
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Enum.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Enum.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bec644d429118e3d81255152ed2186e8d33d6d6
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Enum.php
@@ -0,0 +1,55 @@
+<?php
+/*
+ *  $Id: Enum.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Enum
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Enum
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        $max = substr_count($args, '-');
+        $int = (int) $value;
+
+        if ($int != $value) {
+            return false;
+        }
+        if ($int < 0 || $int > $max) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/ErrorStack.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/ErrorStack.php
new file mode 100644
index 0000000000000000000000000000000000000000..32d13d38bc3f3a63461068f3aba85c8c2a9f1f38
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/ErrorStack.php
@@ -0,0 +1,135 @@
+<?php
+/*
+ *  $Id: ErrorStack.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_Validator_ErrorStack
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Roman Borschel <roman@code-factory.org>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_Validator_ErrorStack extends Doctrine_Access implements Countable, IteratorAggregate
+{
+
+    /**
+     * The errors of the error stack.
+     *
+     * @var array
+     */
+    protected $errors = array();
+
+    /**
+     * Constructor
+     *
+     */
+    public function __construct()
+    {}
+
+    /**
+     * Adds an error to the stack.
+     *
+     * @param string $invalidFieldName
+     * @param string $errorType
+     */
+    public function add($invalidFieldName, $errorCode = 'general')
+    {
+        $this->errors[$invalidFieldName][] = $errorCode;
+    }
+
+    /**
+     * Removes all existing errors for the specified field from the stack.
+     *
+     * @param string $fieldName
+     */
+    public function remove($fieldName)
+    {
+        if (isset($this->errors[$fieldName])) {
+            unset($this->errors[$fieldName]);
+        }
+    }
+
+    /**
+     * Enter description here...
+     *
+     * @param unknown_type $name
+     * @return unknown
+     */
+    public function get($fieldName)
+    {
+        return isset($this->errors[$fieldName]) ? $this->errors[$fieldName] : null;
+    }
+
+    /**
+     * Enter description here...
+     *
+     * @param unknown_type $name
+     */
+    public function set($fieldName, $errorCode)
+    {
+        $this->add($fieldName, $errorCode);
+    }
+
+    /**
+     * Enter description here...
+     *
+     * @return unknown
+     */
+    public function contains($fieldName)
+    {
+        return array_key_exists($fieldName, $this->errors);
+    }
+
+    /**
+     * Removes all errors from the stack.
+     */
+    public function clear()
+    {
+        $this->errors = array();
+    }
+
+    /** IteratorAggregate implementation */
+
+    /**
+     * Enter description here...
+     *
+     * @return unknown
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->errors);
+    }
+
+    /** Countable implementation */
+
+    /**
+     * Enter description here...
+     *
+     * @return unknown
+     */
+    public function count()
+    {
+        return count($this->errors);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..a2605da67bc8cfb7b5d209e036714d48e4eb9207
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Exception.php
@@ -0,0 +1,82 @@
+<?php
+/*
+ *  $Id: Exception.php 2041 2007-07-21 22:15:22Z meus $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_Exception');
+/**
+ * Doctrine_Validator_Exception
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2041 $
+ */
+class Doctrine_Validator_Exception extends Doctrine_Exception implements Countable, IteratorAggregate
+{
+    /**
+     * @var array $invalid
+     */
+    private $invalid = array();
+    /**
+     * @param Doctrine_Validator $validator
+     */
+    public function __construct(array $invalid)
+    {
+        $this->invalid = $invalid;
+        parent::__construct($this->generateMessage());
+    }
+
+    public function getInvalidRecords()
+    {
+        return $this->invalid;
+    }
+
+    public function getIterator()
+    {
+        return new ArrayIterator($this->invalid);
+    }
+
+    public function count()
+    {
+        return count($this->invalid);
+    }
+    /**
+     * __toString
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+
+        return parent::__toString();
+    }
+
+    private function generateMessage()
+    {
+        $message = "";
+        foreach ($this->invalid as $record){
+           $message .= "Validaton error in class " . get_class($record) . " ";
+        }
+        return $message;
+    }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Htmlcolor.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Htmlcolor.php
new file mode 100644
index 0000000000000000000000000000000000000000..5914c71d7465c322b54409c6e45714dd91869355
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Htmlcolor.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ *  $Id: Htmlcolor.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_HtmlColor
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_HtmlColor
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        if ( ! preg_match("/^#{0,1}[0-9]{6}$/", $value)) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Interface.class.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Interface.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec55215614290dc084aa410a24cf40166c1552d7
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Interface.class.php
@@ -0,0 +1,4 @@
+<?php
+interface Doctrine_Validator_Interface {
+    public function validate();
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Ip.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Ip.php
new file mode 100644
index 0000000000000000000000000000000000000000..76c5ce22d0fe0426a40174bbd214810e3472d928
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Ip.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ *  $Id: Ip.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Ip
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Ip
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        return (bool) ip2long(str_replace("\0", '', $value));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Minlength.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Minlength.php
new file mode 100644
index 0000000000000000000000000000000000000000..f16fff574f3427d0ce1d59942b1d12148958afc4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Minlength.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ *  $Id: Minlength.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Regexp
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Gijs van Dulmen <gijs@vandulmen.net>
+ */
+class Doctrine_Validator_Minlength {
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args) {
+       if(isset($args) && strlen( $value ) < $args)
+            return false;
+
+        return true;
+    }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Nospace.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Nospace.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1a1537c436869ec290d5a2ea916343eb197e49c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Nospace.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ *  $Id: Nospace.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Nospace
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Nospace
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        return ($value === null || ! preg_match('/\s\t\r\n/',$value));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notblank.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notblank.php
new file mode 100644
index 0000000000000000000000000000000000000000..842c5f4b03f8f77e6ec331e30d760f3d607d8f6d
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notblank.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ *  $Id: Notblank.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Notblank
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Notblank
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        return (trim($value) != '');
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notnull.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notnull.php
new file mode 100644
index 0000000000000000000000000000000000000000..f00ef394723e2b7e732259184bbda162b25fb93a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Notnull.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ *  $Id: Notnull.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Notnull
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Notnull
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value)
+    {
+        if ($value === null || $value === '') {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Protected.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Protected.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fd199e66e1314ab4fa4f4a743233f210959ec8e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Protected.php
@@ -0,0 +1 @@
+<?php
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Range.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Range.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5c3aa38074b3f3eff0766dc3cacea3381d81ae0
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Range.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ *  $Id: Range.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Range
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Range
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        if (isset($args[0]) && $value < $args[0]) {
+            return false;
+        }
+        if (isset($args[1]) && $value > $args[1]) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Regexp.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Regexp.php
new file mode 100644
index 0000000000000000000000000000000000000000..7931152d701604479d6eb2c0330a788a581929ac
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Regexp.php
@@ -0,0 +1,59 @@
+<?php
+/*
+ *  $Id: Regexp.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Regexp
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Regexp
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        if (is_array($args)) {
+            foreach ($args as $regexp) {
+                if ( ! preg_match($args, $value)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            if (preg_match($args, $value)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unique.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unique.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7f73f6013b530be860de933842f99fa29f466fd
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unique.php
@@ -0,0 +1,71 @@
+<?php
+/*
+ *  $Id: Unique.php 2240 2007-08-14 20:23:54Z Jonathan.Wage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Unique
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 2240 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Unique
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        $table = $record->getTable();
+        $pks = $table->getIdentifier();
+        if ( is_array($pks) ) {
+            $pks = join(',',$pks);
+        }
+
+        $sql   = 'SELECT ' . $pks . ' FROM ' . $table->getTableName() . ' WHERE ' . $key . ' = ?';
+        
+        $values = array();
+        $values[] = $value;
+        
+        // If the record is not new we need to add primary key checks because its ok if the 
+        // unique value already exists in the database IF the record in the database is the same
+        // as the one that is validated here.
+        $state = $record->state();
+        if (! ($state == Doctrine_Record::STATE_TDIRTY || $state == Doctrine_Record::STATE_TCLEAN)) {
+            foreach ($table->getPrimaryKeys() as $pk) {
+                $sql .= " AND {$pk} != ?";
+                $values[] = $record->$pk;
+            }
+        }
+        
+        $stmt  = $table->getConnection()->getDbh()->prepare($sql);
+        $stmt->execute($values);
+
+        return ( ! is_array($stmt->fetch()));
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unsigned.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unsigned.php
new file mode 100644
index 0000000000000000000000000000000000000000..0385862980c6c3cbb517298f0e944d950ab5e898
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Unsigned.php
@@ -0,0 +1,54 @@
+<?php
+/*
+ *  $Id: Enum.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Enum
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Unsigned
+{
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        $int = (int) $value;
+
+        if ($int != $value || $int < 0) {
+            return false;
+        }
+        if ($int < 0) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Usstate.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Usstate.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce6453a3f75d8535a0190cba4c797b7fd743066c
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/Validator/Usstate.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ *  $Id: Usstate.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Validator_Usstate
+ *
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Validator_Usstate
+{
+    private static $states = array (
+                "AK" =>	true,
+                "AL" => true,
+                "AR" => true,
+                "AZ" => true,
+                "CA" => true,
+                "CO" => true,
+                "CT" => true,
+                "DC" => true,
+                "DE" => true,
+                "FL" => true,
+                "GA" => true,
+                "HI" => true,
+                "IA" => true,
+                "ID" => true,
+                "IL" => true,
+                "IN" => true,
+                "KS" => true,
+                "KY" => true,
+                "LA" => true,
+                "MA" => true,
+                "MD" => true,
+                "ME" => true,
+                "MI" => true,
+                "MN" => true,
+                "MO" => true,
+                "MS" => true,
+                "MT" => true,
+                "NC" => true,
+                "ND" => true,
+                "NE" => true,
+                "NH" => true,
+                "NJ" => true,
+                "NM" => true,
+                "NV" => true,
+                "NY" => true,
+                "OH" => true,
+                "OK" => true,
+                "OR" => true,
+                "PA" => true,
+                "PR" => true,
+                "RI" => true,
+                "SC" => true,
+                "SD" => true,
+                "TN" => true,
+                "TX" => true,
+                "UT" => true,
+                "VA" => true,
+                "VI" => true,
+                "VT" => true,
+                "WA" => true,
+                "WI" => true,
+                "WV" =>	true,
+                "WY" =>	true
+            );
+    public function getStates()
+    {
+        return self::$states;
+    }
+    /**
+     * @param Doctrine_Record $record
+     * @param string $key
+     * @param mixed $value
+     * @param string $args
+     * @return boolean
+     */
+    public function validate(Doctrine_Record $record, $key, $value, $args)
+    {
+        return isset(self::$states[$value]);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb076b22c0c510de9d8659b6648b99ae81811941
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View.php
@@ -0,0 +1,156 @@
+<?php
+/*
+ *  $Id: View.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+/**
+ * Doctrine_View
+ *
+ * this class represents a database view
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_View
+{
+    /**
+     * SQL DROP constant
+     */
+    const DROP   = 'DROP VIEW %s';
+    /**
+     * SQL CREATE constant
+     */
+    const CREATE = 'CREATE VIEW %s AS %s';
+    /**
+     * SQL SELECT constant
+     */
+    const SELECT = 'SELECT * FROM %s';
+
+    /**
+     * @var string $name                the name of the view
+     */
+    protected $name;
+    /**
+     * @var Doctrine_Query $query       the DQL query object this view is hooked into
+     */
+    protected $query;
+    /**
+     * @var Doctrine_Connection $conn   the connection object
+     */
+    protected $conn;
+
+    /**
+     * constructor
+     *
+     * @param Doctrine_Query $query
+     */
+    public function __construct(Doctrine_Query $query, $viewName)
+    {
+        $this->name  = $viewName;
+        $this->query = $query;
+        $this->query->setView($this);
+        $this->conn   = $query->getConnection();
+    }
+    /**
+     * getQuery
+     * returns the associated query object
+     *
+     * @return Doctrine_Query
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+    /**
+     * getName
+     * returns the name of this view
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+    /**
+     * getConnection
+     * returns the connection object
+     *
+     * @return Doctrine_Connection
+     */
+    public function getConnection()
+    {
+        return $this->conn;
+    }
+    /**
+     * create
+     * creates this view
+     *
+     * @throws Doctrine_View_Exception
+     * @return void
+     */
+    public function create()
+    {
+        $sql = sprintf(self::CREATE, $this->name, $this->query->getQuery());
+        try {
+            $this->conn->execute($sql);
+        } catch(Doctrine_Exception $e) {
+            throw new Doctrine_View_Exception($e->__toString());
+        }
+    }
+    /**
+     * drop
+     * drops this view from the database
+     *
+     * @throws Doctrine_View_Exception
+     * @return void
+     */
+    public function drop()
+    {
+        try {
+            $this->conn->execute(sprintf(self::DROP, $this->name));
+        } catch(Doctrine_Exception $e) {
+            throw new Doctrine_View_Exception($e->__toString());
+        }
+    }
+    /**
+     * execute
+     * executes the view
+     * returns a collection of Doctrine_Record objects
+     *
+     * @return Doctrine_Collection
+     */
+    public function execute()
+    {
+        return $this->query->execute();
+    }
+    /**
+     * getSelectSql
+     * returns the select sql for this view
+     *
+     * @return string
+     */
+    public function getSelectSql()
+    {
+        return sprintf(self::SELECT, $this->name);
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View/Exception.php b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..54d3c42f8bea771cb739a600fd121b69f6802e2a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/View/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ *  $Id: Exception.php 1080 2007-02-10 18:17:08Z romanb $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+Doctrine::autoload('Doctrine_View_Exception');
+/**
+ * Doctrine_Validator_Exception
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package     Doctrine
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ * @version     $Revision: 1080 $
+ */
+class Doctrine_View_Exception extends Doctrine_Exception
+{ }
diff --git a/website/plugins/sfDoctrinePlugin/lib/helper/ObjectDoctrineAdminHelper.php b/website/plugins/sfDoctrinePlugin/lib/helper/ObjectDoctrineAdminHelper.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dcd2a1070a43afb8cbf0b7632638786953e9b8a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/helper/ObjectDoctrineAdminHelper.php
@@ -0,0 +1,67 @@
+<?php
+
+use_helper('ObjectAdmin');
+
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * ObjectHelper for doctrine admin generator.
+ *
+ * @package    symfony
+ * @subpackage helper
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: ObjectDoctrineAdminHelper.php 3339 2007-01-28 09:47:52Z chtito $
+ */
+
+function object_doctrine_admin_double_list($object, $method, $options = array())
+{
+  return object_admin_double_list($object, $method, $options, '_get_doctrine_object_list');
+}
+
+function object_doctrine_admin_select_list($object, $method, $options = array())
+{
+  return object_admin_select_list($object, $method, $options, '_get_doctrine_object_list');
+}
+
+function object_doctrine_admin_check_list($object, $method, $options = array())
+{
+  return object_admin_check_list($object, $method, $options, '_get_doctrine_object_list');
+}
+
+function _get_doctrine_object_list($object, $method, $options)
+{
+  $foreignTable = $object->getTable()->getRelation($method[1][0])->getTable();
+  $foreignClass = $foreignTable->getComponentName();
+
+  $allObjects = $foreignTable->findAll();
+  $associatedObjects = $object->get($method[1][0]);
+  
+  $ids = array();
+  foreach ($associatedObjects as $associatedObject)
+  {
+    $ids[] = $associatedObject->obtainIdentifier();
+  }
+  
+  // fix due to the fact that an empty doctrine collection $c (count == 0)
+  // will return true on: if ($c)
+  // if (!empty($c)) won't work either...
+  // the if($c) test is in _get_options_from_objects
+  if (count($associatedObjects) == 0)
+    $associatedObjects = null;
+
+  return array($allObjects, $associatedObjects, $ids);
+}
+
+function object_enum_tag($object, $method, $options)
+{
+  $enumValues = _get_option($options, 'enumValues', array());
+  $currentValue = _get_object_value($object, $method);
+  $enumValues = array_combine($enumValues, $enumValues);
+  return select_tag(_convert_method_to_name($method, $options), options_for_select($enumValues, $currentValue), $options);
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrine.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrine.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..43999caa66ff4154e0532f82e55cbad340a6b805
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrine.class.php
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @version    SVN: $Id: sfDoctrine.class.php 4092 2007-05-23 17:37:26Z chtito $
+ */
+
+class sfDoctrine
+{
+  // uses the default connection if none is given
+  static public function connection($connection = null)
+  {
+    if ($connection === null)
+    {
+      return Doctrine_Manager::getInstance()->getCurrentConnection();
+    }
+
+    return Doctrine_Manager::getInstance()->getConnection($connection);
+  }
+
+  // returns either the connection connectionName or uses the doctrine manager
+  // to find out the connection bound to the class (or the current one)
+  public static function connectionForClass($className, $connectionName = null)
+  {
+    if (isset($connectionName))
+    {
+      return Doctrine_Manager::getInstance()->getConnection($connectionName);
+    }
+    return Doctrine_Manager::getInstance()->getConnectionForComponent($className);
+  }
+
+  public static function getTable($className)
+  {
+    return Doctrine_Manager::getInstance()->getTable($className);
+  }
+
+  public static function queryFrom($className)
+  {
+      sfContext::getInstance()->getLogger()->err('The sfDoctrine::queryFrom()  method is deprecated; use "Doctrine_Query::create()->from($className)" instead.');
+     return self::getTable($className)->createQuery();
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineAdminGenerator.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineAdminGenerator.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..03ec011ba85638174a5b591d4a1e62088d0e5eba
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineAdminGenerator.class.php
@@ -0,0 +1,275 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineAdminGenerator.class.php 4533 2007-07-03 23:36:10Z gnat $
+ */
+
+class sfDoctrineAdminGenerator extends sfAdminGenerator
+{
+
+  protected $table;
+
+  public function initialize($generatorManager)
+  {
+    // otherwise the class never gets loaded... don't ask me why...
+    include_once(sfConfig::get('sf_symfony_lib_dir').'/vendor/creole/CreoleTypes.php');
+    parent::initialize($generatorManager);
+
+    $this->setGeneratorClass('sfDoctrineAdmin');
+  }
+
+  protected function loadMapBuilderClasses()
+  {
+    $conn = Doctrine_Manager::getInstance()->openConnection('mock://no-one@localhost/empty', null, false);
+    $this->table = $conn->getTable($this->getClassName());
+  }
+
+  protected function getTable()
+  {
+    return $this->table;
+  }
+
+  protected function loadPrimaryKeys()
+  {
+    foreach ($this->getTable()->getPrimaryKeys() as $primaryKey)
+      $this->primaryKey[] = new sfDoctrineAdminColumn($primaryKey);
+    // FIXME: check that there is at least one primary key
+  }
+
+  public function getColumns($paramName, $category='NONE')
+  {
+
+    $columns = parent::getColumns($paramName, $category);    
+
+    // set the foreign key indicator
+    $relations = $this->getTable()->getRelations();
+
+    $cols = $this->getTable()->getColumns();
+
+    foreach ($columns as $index => $column)
+    {
+      if (isset($relations[$column->getName()]))
+      {
+        $fkcolumn = $relations[$column->getName()];
+        $columnName = $relations[$column->getName()]->getLocal();
+        if ($columnName != 'id') // i don't know why this is necessary
+        {
+          $column->setRelatedClassName($fkcolumn->getTable()->getComponentName());
+          $column->setColumnName($columnName);
+
+          if (isset($cols[$columnName])) // if it is not a many2many
+            $column->setColumnInfo($cols[$columnName]);
+
+          $columns[$index] = $column;
+        }
+      }
+    }
+
+    return $columns;
+  }
+
+  function getAllColumns()
+  {
+    $cols = $this->getTable()->getColumns();
+    $rels = $this->getTable()->getRelations();
+    $columns = array();
+    foreach ($cols as $name => $col)
+    {
+      // we set out to replace the foreign key to their corresponding aliases
+      $found = null;
+      foreach ($rels as $alias=>$rel)
+      {
+        $relType = $rel->getType();
+        if ($rel->getLocal() == $name && $relType != Doctrine_Relation::MANY_AGGREGATE && $relType != Doctrine_Relation::MANY_COMPOSITE)
+          $found = $alias;
+      }
+      if ($found)
+      {
+        $name = $found;
+      }
+      $columns[] = new sfDoctrineAdminColumn($name, $col);
+    }    
+    return $columns;
+  }
+
+  function getAdminColumnForField($field, $flag = null)
+  {
+    $cols = $this->getTable()->getColumns(); // put this in an internal variable?
+    return  new sfDoctrineAdminColumn($field, (isset($cols[$field]) ? $cols[$field] : null), $flag);
+  }
+
+
+  function getPHPObjectHelper($helperName, $column, $params, $localParams = array())
+  {
+    $params = $this->getObjectTagParams($params, $localParams);
+
+    // special treatment for object_select_tag:
+    if ($helperName == 'select_tag')
+    {
+      $column = new sfDoctrineAdminColumn($column->getColumnName(), null, null);
+    }
+    return sprintf ('object_%s($%s, %s, %s)', $helperName, $this->getSingularName(), var_export($this->getColumnGetter($column), true), $params);
+  }
+
+  function getColumnGetter($column, $developed = false, $prefix = '')
+  {
+    if ($developed)
+      return sprintf("$%s%s->get('%s')", $prefix, $this->getSingularName(), $column->getName());
+    // no parenthesis, we return a method+parameters array
+    return array('get', array($column->getName()));
+  }
+
+  function getColumnSetter($column, $value, $singleQuotes = false, $prefix = 'this->')
+  {
+    if ($singleQuotes)
+      $value = sprintf("'%s'", $value);
+    return sprintf('$%s%s->set(\'%s\', %s)', $prefix, $this->getSingularName(), $column->getName(), $value);
+  }
+
+  function getRelatedClassName($column)
+  {
+    return $column->getRelatedClassName();
+  }
+
+  public function getColumnEditTag($column, $params = array())
+  {
+    if ($column->getDoctrineType() == 'enum')
+    {
+      // FIXME: this is called already in the sfAdminGenerator class!!!
+      $params = array_merge(array('control_name' => $this->getSingularName().'['.$column->getName().']'), $params);
+
+      $values = $this->getTable()->getEnumValues($column->getName());
+      $params = array_merge(array('enumValues'=>$values), $params);
+      return $this->getPHPObjectHelper('enum_tag', $column, $params);
+    }
+    return parent::getColumnEditTag($column, $params);
+  }
+
+}
+
+class sfDoctrineAdminColumn extends sfAdminColumn
+{
+  // doctrine to creole type conversion
+  static $docToCreole = array(
+    'boolean'   => CreoleTypes::BOOLEAN,
+    'string'    => CreoleTypes::TEXT, 
+    'integer'   => CreoleTypes::INTEGER,
+    'date'      => CreoleTypes::DATE, 
+    'timestamp' => CreoleTypes::TIMESTAMP,
+    'time'      => CreoleTypes::TIME,
+    'enum'      => CreoleTypes::TINYINT,
+    'float'     => CreoleTypes::FLOAT,
+    'double'    => CreoleTypes::FLOAT,
+    'clob'      => CreoleTypes::CLOB,
+    'blob'      => CreoleTypes::BLOB,
+    'object'    => CreoleTypes::VARCHAR,
+    'array'     => CreoleTypes::VARCHAR,
+    'decimal'	=> CreoleTypes::DECIMAL,
+  );
+
+  protected $relatedClassName = null;
+  protected $name = null;
+  protected $columnName; // stores the real foreign id column
+
+  function getDoctrineType()
+  {
+    return isset($this->column['type']) ? $this->column['type'] : null;
+  }
+
+  function getCreoleType()
+  { 
+    $dType = $this->getDoctrineType();
+
+    // we simulate the CHAR/VARCHAR types to generate input_tags
+    if(($dType == 'string') and ($this->getSize() < 256))
+    {
+      return CreoleTypes::VARCHAR;
+    }
+
+    return $dType ? self::$docToCreole[$dType] : CreoleTypes::OTHER;
+  }
+
+  function getSize()
+  {
+    return $this->column['length'];
+  }
+
+  function isNotNull()
+  {
+    //FIXME THIS NEEDS TO BE UPDATE-but I don't know the format for the column array
+    if (isset($this->column[2]['notnull']))
+      return $this->column[2]['notnull'];
+    return false;
+  }
+
+  function isPrimaryKey()
+  {
+    if (isset($this->column['primary']))
+      return $this->column['primary'];
+    return false;
+  }
+
+  function setRelatedClassName($newName)
+  {
+    $this->relatedClassName = $newName;
+  }
+
+  function getRelatedClassName()
+  {
+    return $this->relatedClassName;
+  }
+
+  function setColumnName($newName)
+  {
+    $this->columnName = $newName;
+  }
+
+  function getColumnName()
+  {
+    return $this->columnName;
+  }
+
+  function setColumnInfo($col)
+  {
+    $this->column = $col;
+  }
+
+  // FIXME: this method is never used... remove it?
+  function setName($newName)
+  {
+    $this->name = $newName;
+  }
+
+  function getName()
+  {
+    if (isset($this->name))
+    {
+      return $this->name;
+    }
+    // a bit kludgy: the field name is actually in $this->phpName
+    return parent::getPhpName();
+  }
+
+  function isForeignKey()
+  {
+    return isset($this->relatedClassName);
+  }
+
+  // all the calls that were forwarded to the table object with propel
+  // have to be dealt with explicitly here, otherwise:  
+  public function __call($name, $arguments)
+  {
+    throw new Exception(sprintf('Unhandled call: "%s"', $name));
+  }
+}
+
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConfigHandler.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConfigHandler.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..9ad1b8e687a2427cf25e325de0ba038008ecbcb3
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConfigHandler.class.php
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ *
+ * sfDoctrineConfigHandler parses the PHPDoctrine config file
+ *
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Amadeus
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @author     Dan Porter
+ * @version    SVN: $Id: sfDoctrineConfigHandler.class.php 4132 2007-05-31 19:50:01Z gnat $
+ */
+class sfDoctrineConfigHandler extends sfYamlConfigHandler
+{
+  public function execute($configFiles)
+  {
+    // Parse yaml config files
+    $configs = $this->parseYamls($configFiles);
+
+    // Default config: all.attributes
+    $default_config = array ();
+    if (isset ($configs['all']['attributes']) && is_array($configs['all']['attributes']))
+    {
+      $default_config = $configs['all']['attributes'];
+      unset ($configs['all']['attributes']);
+    }
+
+    // Environment specific defaults: <env>.attributes
+    $env = sfConfig::get('sf_environment');
+    if (isset ($configs[$env]['attributes']) && is_array($configs[$env]['attributes']))
+    {
+      $default_config = sfToolKit::arrayDeepMerge($default_config, $configs[$env]['attributes']);
+      unset ($configs[$env]['attributes']);
+    }
+
+    // Connection specific configs
+    $conn_configs = array();
+    foreach ($configs as $env => $env_config)
+    {
+      foreach ($env_config as $conn => $conn_config)
+      {
+        $conn_configs[$conn] = sfToolkit::arrayDeepMerge($default_config, $conn_config);
+      }
+    }
+    
+    // Prepare default config data
+    $data = array();
+    foreach ($this->configToAttributes($default_config) as $key => $value)
+    {
+      $data[] = sprintf('$default_attributes["%s"] = %s;', $key, $this->attributeToPhp($value));
+    }
+    $data[] = '';
+    
+    // Prepare connection specific data
+    foreach ($conn_configs as $conn_name => $conn_config)
+    {
+      foreach ($this->configToAttributes($conn_config) as $key => $value)
+      {
+        $data[] = sprintf('$attributes["%s"]["%s"] = %s;', $conn_name, $key, $this->attributeToPHP($value));
+      }
+      $data[] = '';
+    }
+
+    // compile data
+    $retval = sprintf("<?php\n" .
+    "// auto-generated by sfDoctrineConfigHandler\n" .
+    "// date: %s\n%s\n", date('Y-m-d H:i:s'), implode("\n", $data));
+
+    return $retval;
+  }
+
+  protected function configToAttributes($config)
+  {
+    $attributes = array();
+    foreach ($config as $key => $value)
+    {
+      $attr_key = 'ATTR_' . strtoupper($key);
+
+      switch ($key)
+      {
+          // event listener (name of the listener class)
+        case 'listener':
+          $attributes[$attr_key] = array ('php', "new $value()");
+          break;
+
+        // fetch mode (immediate, batch, offset, lazy_offset)
+        case 'fetchmode':
+          $attributes[$attr_key] = array ('constant', 'FETCH_' . strtoupper($value));
+          break;
+
+          // locking (optimistic, pessimistic)
+        case 'lockmode':
+          $attributes[$attr_key] = array ('constant', 'LOCK_' . strtoupper($value));
+          break;
+
+          // export (none, tables, constraints, all)
+          case 'export':
+            $attributes[$attr_key] = array('constant', 'EXPORT_'.strtoupper($value));
+            break;
+
+          // accessors (none, get, set, both)
+/*        case 'accessors':
+          $attributes[$attr_key] = array ('constant', 'ACCESSOR_' . strtoupper($value));
+          break;
+*/
+          // portability (none, fix_case, rtrim, delete_count, empty_to_null, fix_assoc_field_names, all)
+        case 'portability':
+          $attributes[$attr_key] = array ('constant', 'PORTABILITY_' . strtoupper($value));
+          break;
+
+        // the default will set the value as a string or a boolean (depending on the type returned by the yaml parser)
+        default:
+          $attributes[$attr_key] = $value;
+      }
+    }
+    return $attributes;
+  }
+  
+  protected function attributeToPhp($attr)
+  {
+    if (is_array($attr))
+    {
+      if ($attr[0] == 'constant')
+      {
+        $attr = 'Doctrine::' . $attr[1];
+      }
+      elseif ($attr[0] == 'php')
+      {
+        $attr = $attr[1];
+      }
+    }
+    elseif (is_string($attr))
+    {
+      $attr = sprintf("'%s'", $attr);
+    }
+    else
+    {
+      $attr = var_export($attr, 1);
+    }
+    return $attr;
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConnectionListener.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConnectionListener.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae0b9c8d0612ad2ae4909d9233982f8f5403cd5e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineConnectionListener.class.php
@@ -0,0 +1,32 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id$
+ */
+
+class sfDoctrineConnectionListener extends Doctrine_EventListener
+{
+
+  public function __construct($connection, $encoding)
+  {
+    $this->connection = $connection;
+    $this->encoding = $encoding;
+  }
+
+  public function postConnect(Doctrine_Event $event)
+  {
+    $this->connection->setCharset($this->encoding);
+    $this->connection->setDateFormat();
+  }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineData.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineData.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf033d9d28b6241a1ec42ceaec6a96b592dfe0f1
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineData.class.php
@@ -0,0 +1,361 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    sfDoctrinePlugin
+ * @subpackage sfDoctrineData
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineData.class.php 4493 2007-06-30 00:47:02Z Jonathan.Wage $
+ */
+class sfDoctrineData extends sfData
+{
+  /**
+   * connectionName 
+   * 
+   * @var mixed
+   * @access protected
+   */
+  protected $connectionName = null;
+
+  /**
+   * loadData 
+   * 
+   * @param mixed $directory_or_file 
+   * @param mixed $connectionName 
+   * @access public
+   * @return void
+   */
+  public function loadData($directory_or_file = null, $connectionName = null)
+  {
+    $this->connectionName = $connectionName;
+
+    $fixture_files = $this->getFiles($directory_or_file);
+
+    // wrap all database operations in a single transaction
+    $con = sfDoctrine::connection($connectionName);
+    try
+    {
+      $con->beginTransaction();
+
+      $this->doLoadData($fixture_files);
+
+      $con->commit();
+    }
+    catch (Exception $e)
+    {
+      $con->rollback();
+      throw $e;
+    }
+  }
+
+  /**
+   * loadDataFromArray 
+   * 
+   * @param mixed $data 
+   * @access public
+   * @return void
+   */
+  public function loadDataFromArray($data)
+  {
+    $pendingRelations = array();
+
+    if ($data === null)
+    {
+      // no data
+      return;
+    }
+
+    // only for pake_echo_action
+    require_once(sfConfig::get('sf_symfony_lib_dir').'/vendor/pake/pakeFunction.php');
+
+    foreach ($data as $class => $entries)
+    {
+      pake_echo_action('Filling', sprintf('class "%s"', $class)."\t");
+      // fetch a table object
+      $table = sfDoctrine::getTable($class, $this->connectionName);
+
+      $colNames = array_keys($table->getColumns());
+
+      $tableName = $table->getTableName();
+
+      // relation fields
+      $relations = $table->getRelations();
+
+      //echo "Class $class: ".implode(', ', array_keys($relations))."\n";
+
+      if ($this->deleteCurrentData)
+      {
+        $q = new Doctrine_Query();
+        $q->delete()->from($class);
+        $q->execute();
+      }
+
+      // iterate through entries for this class
+      // might have been empty just for force a table to be emptied on import
+      if (is_array($entries))
+      {
+        foreach ($entries as $key => $columnAssignments)
+        {
+          // create a new entry in the database
+          $obj = $table->create();
+          $now = date("Y-m-d H:i:s", time());
+          if($obj->getTable()->hasColumn('created_at')) 
+          {
+            $obj->set('created_at', $now);
+          }
+           
+          if (!is_array($columnAssignments))
+          {
+            throw new Exception('You must give a name for each fixture data entry');
+          }
+
+          foreach ($columnAssignments as $name => $value)
+          {
+            $isRelation = isset($relations[$name]);
+            // foreign key?
+            if ($isRelation)
+            {
+              $rel = $relations[$name];
+              // $relatedTable = $rel->getTable()->getTableName();
+              $localKey = $rel->getLocal();
+              $foreignKey = $rel->getForeign();
+
+              $pendingRelations[] = array($obj, $localKey, $foreignKey, $value);
+            }
+            else              
+            {
+              // first check that the column exists
+              if (!in_array($name, $colNames))
+              {
+                $error = 'Column "%s" does not exist for class "%s"';
+                $error = sprintf($error, $name, $class);
+                throw new sfException($error);         
+              }
+
+              $obj->rawSet($name, $value);
+            }
+          }
+          
+          $obj->save();
+          
+          // For progress meter
+          echo '.';
+          
+          // save the id for future reference
+          $pk = $obj->obtainIdentifier();
+          if (isset($this->object_references[$key]))
+          {
+            throw new sfException(sprintf('The key "%s" is not unique', $key));
+          }
+          
+          $this->object_references[$key] = $pk;
+        }
+      }
+      echo "\n";
+    }
+
+    // now we take care of the pending relations
+    foreach ($pendingRelations as $pending)
+    {
+      list($obj, $localKey, $foreignKey, $key) = $pending;
+      
+      if (!isset($this->object_references[$key]))
+      {
+        $error = 'No object with key "%s" is defined in your data file';
+        $error = sprintf($error, $key);
+        throw new sfException($error);
+      }
+      
+      $foreignId = $this->object_references[$key][$foreignKey];
+      
+      $obj->rawSet($localKey, $foreignId);
+      $obj->save();
+    }
+  }
+  
+  /**
+   * loadMapBuilder 
+   * 
+   * @param mixed $class 
+   * @access protected
+   * @return void
+   */
+  protected function loadMapBuilder($class)
+  {
+    $class_map_builder = $class.'MapBuilder';
+    if (!isset($this->maps[$class]))
+    {
+      if (!$classPath = sfCore::getClassPath($class_map_builder))
+      {
+        throw new sfException(sprintf('Unable to find path for class "%s".', $class_map_builder));
+      }
+
+      require_once($classPath);
+      $this->maps[$class] = new $class_map_builder();
+      $this->maps[$class]->doBuild();
+    }
+  }
+
+  /**
+   * dumpData 
+   * 
+   * @param mixed $directory_or_file 
+   * @param string $tables 
+   * @param string $connectionName 
+   * @access public
+   * @return void
+   */
+  public function dumpData($directory_or_file = null, $tables = 'all', $connectionName = 'propel')
+  {
+    $sameFile = true;
+    if (is_dir($directory_or_file))
+    {
+      // multi files
+      $sameFile = false;
+    }
+    else
+    {
+      // same file
+      // delete file
+    }
+    
+    $manager = Doctrine_Manager::getInstance();
+    $con = $manager->getCurrentConnection();
+
+    // get tables
+    if ('all' === $tables || null === $tables)
+    {
+      $modelDirectories = array();
+      $modelDirectories[] = sfConfig::get('sf_model_lib_dir').'/doctrine';
+      
+      $directories = sfFinder::type('dir')->maxdepth(0)->in(sfConfig::get('sf_model_lib_dir').'/doctrine');
+     
+      foreach($directories AS $directory)
+      {
+        if( strstr($directory, 'generated') )
+        {
+          continue;
+        }
+        
+        $modelDirectories[] = $directory;
+      }
+      
+      $tables = array();
+      foreach($modelDirectories AS $directory)
+      {
+        $dirTables = sfFinder::type('file')->name('/(?<!Table)\.class.php$/')->maxdepth(0)->in($directory);
+      
+        foreach ($dirTables AS $key => $table)
+        {
+          $table = basename($table, '.class.php');
+          $tables[] = $table;
+        }
+      }
+    }
+    else if (!is_array($tables))
+    {
+      $tables = array($tables);
+    }
+
+    $dumpData = array();
+    
+    foreach ($tables as $modelName)
+    {
+      $table = sfDoctrine::getTable($modelName, $this->connectionName);
+
+      // get table name
+      $tableName = $table->getTableName();
+      
+      $relations = $table->getRelations();
+
+      // get columns
+      $columns = $con->fetchAll('DESCRIBE '.$tableName);
+
+      // get records
+      //$records = $con->fetchAll('SELECT * FROM '.$tableName);
+      $query = new Doctrine_Query();
+      $query->from($modelName);
+      $records = $query->execute();
+      
+      $dumpData[$modelName] = array();
+
+      foreach($records AS $record)
+      {
+        $pk = $modelName;
+        
+        $values = array();
+        foreach($columns AS $column)
+        {
+          $col = strtolower($column['Field']);
+          
+          try {
+            $initialValue = $record[$col];
+          } catch(Exception $e) {
+            continue;
+          }
+          
+          if( !$initialValue )
+          {
+            continue;
+          }
+          
+          if ($column['Key'] == 'PRI')
+          {
+            $pk .= '_'.$initialValue;
+          }
+          else
+          {
+            $isForeignKey = false;
+            foreach($relations AS $relation)
+            {
+              if( $relation->getLocal() == $col )
+              {
+                $isForeignKey = true;
+                break;
+              }
+            }
+            
+            if( $isForeignKey )
+            {
+              $array = $relation->toArray();
+              $values[$relation->getAlias()] = $array['class'].'_'.$initialValue;
+            } else {
+              $value = $initialValue;
+              
+              // Needed to maintain bool values
+              if( is_bool($value) )
+              {
+                $value = $value ? 1:0;
+              }
+              
+              $values[$col] = $value;
+            }
+          }
+        }
+
+        $dumpData[$modelName][$pk] = $values;
+      }
+    }
+
+    // save to file(s)
+    if ($sameFile)
+    {
+      $yaml = Spyc::YAMLDump($dumpData);
+      file_put_contents($directory_or_file, $yaml);
+    }
+    else
+    {
+      foreach ($dumpData as $table => $data)
+      {
+        $yaml = Spyc::YAMLDump($data);
+        file_put_contents($directory_or_file."/$table.yml", $yaml);
+      }
+    }
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDataRetriever.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDataRetriever.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..f482b4b4509da0e0b3e2cb32de945c94a458d26f
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDataRetriever.class.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineDataRetriever.class.php 3437 2007-02-10 09:04:27Z chtito $
+ */
+class sfDoctrineDataRetriever
+{
+  static public function retrieveObjects($class, $peer_method = 'findAll')
+  {
+    if (!$peer_method)
+      $peer_method = 'findAll';
+    $table = sfDoctrine::getTable($class);
+    return call_user_func(array($table, $peer_method));
+  }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDatabase.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDatabase.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..caa5465fd98371b564168a5bf6738d7314db233a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineDatabase.class.php
@@ -0,0 +1,141 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * (c) 2004-2006 Sean Kerr.
+ * (c) 2006-2007 Olivier Verdier <olivier.verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * sfDoctrineDatabase provides connectivity for the Doctrine.
+ *
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Maarten den Braber <mdb@twister.cx>
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @author     Dan Porter
+ * @version    SVN: $Id: sfDoctrineDatabase.class.php 4394 2007-06-25 17:59:38Z subzero2000 $
+ */
+class sfDoctrineDatabase extends sfDatabase
+{
+  protected
+    $doctrineConnection = null;
+
+  public function initialize($parameters = array(), $name = null)
+  {
+    parent::initialize($parameters);
+
+    // if a default connection is defined we only open that one
+    if ($defaultDatabase = sfConfig::get('sf_default_database'))
+    {
+      if ($name != $defaultDatabase)
+      {
+        return;
+      }
+    }
+
+    // load doctrine config
+    require(sfConfigCache::getInstance()->checkConfig('config/doctrine.yml'));
+    
+    $db_attributes = $default_attributes;
+    
+    if (isset($attributes[$name]))
+    {
+      $db_attributes = array_merge($default_attributes, $attributes[$name]);
+    }
+    
+    $this->setParameter('attributes', $db_attributes);
+    $this->setParameter('name', $name);
+
+    // take care of the component binding
+    // suppress errors from include_once
+    // because config/schemas.yml is optional.
+    @include_once(sfConfigCache::getInstance()->checkConfig('config/schemas.yml', true));
+
+    // opening the doctrine connection
+    // determine how to get our parameters
+    $method = $this->getParameter('method', 'dsn');
+
+    // get parameters
+    switch ($method)
+    {
+      case 'dsn':
+        $dsn = $this->getParameter('dsn');
+
+        if ($dsn == null)
+        {
+          // missing required dsn parameter
+          $error = 'Database configuration specifies method "dsn", but is missing dsn parameter';
+
+          throw new sfDatabaseException($error);
+        }
+        break;
+    }
+
+    try
+    {
+      // Make sure we pass non-PEAR style DSNs as an array
+      if ( ! strpos($dsn, '://'))
+      {
+        $dsn = array($dsn, $this->getParameter('username'), $this->getParameter('password'));
+      }
+
+      $this->doctrineConnection = Doctrine_Manager::connection($dsn, $name);
+
+      // figure out the encoding
+      $encoding = $this->getParameter('encoding', 'UTF8');
+
+      // set up the connection parameters from the doctrine.yml config file
+      foreach($this->getParameter('attributes') as $k => $v)
+      {
+        $this->doctrineConnection->setAttribute(constant('Doctrine::'.$k), $v);
+      }
+
+      // we add the listener that sets up encoding and date formats
+      $eventListener = new sfDoctrineConnectionListener($this->doctrineConnection, $encoding);
+      $this->doctrineConnection->addListener($eventListener);
+
+      // add the query logger
+      if (sfConfig::get('sf_debug') && sfConfig::get('sf_logging_enabled'))
+      {
+        $this->doctrineConnection->addListener(new sfDoctrineQueryLogger());
+      }
+    }
+    catch (PDOException $e)
+    {
+      throw new sfDatabaseException($e->getMessage());
+    }
+  }
+
+  /**
+   * Connect to the database.
+   * Stores the PDO connection in $connection
+   *
+   */
+  public function connect ()
+  {
+    $dbh = $this->doctrineConnection->getDbh();
+    $dbh->connect();
+    $this->connection = $dbh->getDbh();
+  }
+
+  /**
+   * Execute the shutdown procedure.
+   *
+   * @return void
+   *
+   * @throws <b>sfDatabaseException</b> If an error occurs while shutting down this database.
+   */
+  public function shutdown ()
+  {
+    if ($this->connection !== null)
+    {
+      @$this->connection = null;
+    }
+  }
+
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineEventListener.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineEventListener.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..02a196bdcd44b89e99c61a9a0e7e6d95afeb53db
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineEventListener.class.php
@@ -0,0 +1,20 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Jan Schaefer <jschaefe@sinntax.de>
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineEventListener.class.php 4416 2007-06-26 21:54:15Z subzero2000 $
+ */
+
+class sfDoctrineEventListener extends Doctrine_EventListener
+{
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineException.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineException.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e1a2c5de507620a36808aa026e41d3ecf281831
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineException.class.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineException.class.php 2675 2006-11-14 07:00:59Z chtito $
+ */
+class sfDoctrineException extends sfException
+{
+  /**
+   * Class constructor.
+   *
+   * @param string The error message.
+   * @param int    The error code.
+   */
+  public function __construct ($message = null, $code = 0)
+  {
+    $this->setName('sfDoctrineException');
+    parent::__construct($message, $code);
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrinePager.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrinePager.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..041e430fbbfef24b2eb799eea09fee9d5b6a6fb5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrinePager.class.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Maarten den Braber <mdb@twister.cx>
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @author     Ian P. Christian <pookey@pookey.co.uk>
+ * @version    SVN: $Id: sfDoctrinePager.class.php 4401 2007-06-26 05:02:41Z hansbrix $
+ */
+
+class sfDoctrinePager extends sfPager implements Serializable
+{
+  protected
+    $query;
+
+  public function __construct($class, $defaultMaxPerPage = 10)
+  {
+    parent::__construct($class, $defaultMaxPerPage);
+    
+    $this->setQuery(Doctrine_Query::create()->from($class));
+  }
+  
+
+  public function serialize()
+  {
+    $vars = get_object_vars($this);
+    unset($vars['query']);
+    return serialize($vars);
+  }
+
+  public function unserialize($serialized)
+  {
+    $array = unserialize($serialized);
+
+    foreach($array as $name => $values) {
+        $this->$name = $values;
+    }
+  }
+
+  public function init()
+  {
+    
+    $count = $this->getQuery()->offset(0)->limit(0)->count();
+    
+    $this->setNbResults($count);
+    
+    $p = $this->getQuery();
+    $p->offset(0);
+    $p->limit(0);
+    if ($this->getPage() == 0 || $this->getMaxPerPage() == 0)
+    {
+      $this->setLastPage(0);
+    }
+    else
+    {
+      $this->setLastPage(ceil($this->getNbResults() / $this->getMaxPerPage()));
+      
+      $offset = ($this->getPage() - 1) * $this->getMaxPerPage();
+      
+      $p->offset($offset);
+      $p->limit($this->getMaxPerPage());
+    }
+  }
+
+  public function getQuery()
+  {
+    return $this->query;
+  }
+
+  public function setQuery($query)
+  {
+    $this->query = $query;
+  }
+
+  protected function retrieveObject($offset)
+  {
+    $cForRetrieve = clone $this->getQuery();
+    $cForRetrieve->offset($offset - 1);
+    $cForRetrieve->limit(1);
+
+    $results = $cForRetrieve->execute();
+
+    return $results[0];
+  }
+
+  public function getResults($fetchtype = null)
+  {
+    $p = $this->getQuery();
+    
+    if ($fetchtype == 'array')
+      return $p->execute(array(), Doctrine::FETCH_ARRAY);
+    
+    return $p->execute();
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineQueryLogger.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineQueryLogger.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6ddcaf7a4827c56ce581fe8968900c1339d4ef8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineQueryLogger.class.php
@@ -0,0 +1,74 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineQueryLogger.class.php 4728 2007-07-27 10:42:49Z mahono $
+ */
+
+class sfDoctrineQueryLogger extends Doctrine_EventListener
+{
+  protected $connection = null;
+  protected $encoding = 'UTF8';
+
+  public function preExecute(Doctrine_Event $event)
+  {
+    $this->sfLogQuery('{sfDoctrine Execute} executeQuery : ', $event);
+  }
+
+  public function postExecute(Doctrine_Event $event)
+  {
+    $this->sfAddTime();
+  }
+
+  public function postPrepare(Doctrine_Event $event)
+  {
+    $this->sfAddTime();
+  }
+
+  public function preStmtExecute(Doctrine_Event $event)
+  {
+    $this->sfLogQuery('{sfDoctrine Statement} executeQuery : ', $event);
+  }
+
+  public function postStmtExecute(Doctrine_Event $event)
+  {
+    $this->sfAddTime();
+  }
+
+  public function preQuery(Doctrine_Event $event)
+  {
+    $this->sfLogQuery('{sfDoctrine Query} executeQuery : ', $event);
+  }
+
+  public function postQuery(Doctrine_Event $event)
+  {
+    $this->sfAddTime();
+  }
+
+  protected function sfLogQuery($message, $event)
+  {
+    $message .= $event->getQuery();
+
+    if ($params = $event->getParams())
+    {
+      $message .= ' - ('.implode(', ', $params) . ' )';
+    }
+
+    sfContext::getInstance()->getLogger()->log($message);
+    $sqlTimer = sfTimerManager::getTimer('Database (Doctrine)');
+  }
+
+  protected function sfAddTime()
+  {
+    sfTimerManager::getTimer('Database (Doctrine)')->addTime();
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecord.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecord.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1942782d8517320616b74bdbc699b29ee80d99e
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecord.class.php
@@ -0,0 +1,156 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineRecord.class.php 4563 2007-07-09 22:16:05Z Jonathan.Wage $
+ */
+
+class sfDoctrineRecord extends Doctrine_Record
+{
+  public function __toString()
+  {
+    // if the current object doesn't exist we return nothing
+    if (!$this->exists())
+    {
+      return '-';
+    }
+
+    // we try to guess a column which would give a good description of the object
+    foreach (array('name', 'title', 'description', 'id') as $descriptionColumn)
+    {
+      if ($this->getTable()->hasColumn($descriptionColumn))
+      {
+        return $this->get($descriptionColumn);
+      }
+    }
+
+    return sprintf('No description for object of class "%s"', $this->getTable()->getComponentName());
+  }
+  
+  // FIXME: All code should be updated to use the new identifier() method directly
+  public function obtainIdentifier()
+  {
+    return $this->identifier();
+  }
+
+  public function set($name, $value, $load = true)
+  {
+    // ucfirst() is used instead of camelize() to be compatible with older version of Doctrine
+    $filterMethod = 'filterSet'.ucfirst($name);
+
+    if (method_exists($this, $filterMethod))
+    {
+      $value = $this->$filterMethod($value);
+    }
+
+    $setterMethod = 'set'.sfInflector::camelize($name);
+
+    return method_exists($this, $setterMethod) ?  $this->$setterMethod($value) : parent::set($name, $value, $load);
+  }
+
+  public function get($name, $load = true)
+  {
+    $getterMethod = 'get'.sfInflector::camelize($name);
+
+    $value = method_exists($this, $getterMethod) ? $this->$getterMethod() : parent::get($name, $load);
+    
+    // ucfirst() is used instead of camelize() to be compatible with older version of Doctrine
+    $filterMethod = 'filterGet'.ucfirst($name);
+
+    if (method_exists($this, $filterMethod))
+    {
+      $value = $this->$filterMethod($value);
+    }
+
+    return $value;
+  }
+
+  function rawSet($name, $value, $load = true)
+  {
+    return parent::set($name, $value, $load);
+  }
+
+  function rawGet($name)
+  {
+    return parent::rawGet($name);
+  }
+
+  public function __call($m, $a)
+  {
+    $verb = substr($m, 0, 3);
+
+    if ($verb == 'set' || $verb == 'get')
+    {
+      $camelColumn = substr($m, 3);
+
+      if (in_array($camelColumn, array_keys($this->getTable()->getRelations())))
+      {
+        // the column is actually a class name
+        $column = $camelColumn;
+      }
+      else
+      {
+        // the relation was not found
+        $column = sfInflector::underscore($camelColumn);
+      }
+
+      if ($verb == 'get')
+      {
+        return $this->get($column);
+      }
+      else // $verb must be 'set'...
+      {
+        return $this->set($column, $a[0]);
+      }
+    }
+
+    throw new sfDoctrineException(sprintf('Method "%s" is not defined in class "%s"', $m, get_class($this)));
+  }
+
+  // added for compatibility with the _get_options_from_objects helper
+  public function getPrimaryKey()
+  {
+    return $this->obtainIdentifier();
+  }
+
+  // to check for the existence of a record
+  public function has($name)
+  {
+    return $this->get($name)->exists();
+  }
+
+  // Hook to update created_at and updated_at fields on record insert
+  public function preInsert($event)
+  {
+    // Set created_at and update_at to now, if they exist in this record
+    $now = date("Y-m-d H:i:s", time());
+    if ($this->getTable()->hasColumn('created_at'))
+    {
+      $this->rawSet('created_at', $now);
+    }
+    if ($this->getTable()->hasColumn('updated_at'))
+    {
+      $this->rawSet('updated_at', $now);
+    }
+  }
+
+  // Hook to update updated_at field on record update
+  public function preUpdate($event)
+  {
+    // Set update_at to now, if it exists in this record
+    $now = date("Y-m-d H:i:s", time());
+    if ($this->getTable()->hasColumn('updated_at'))
+    {
+      $this->rawSet('updated_at', $now);
+    }
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecordI18n.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecordI18n.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..44aaa74a39c0b5b5bb3e37395893ebae47ca64d5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecordI18n.class.php
@@ -0,0 +1,172 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineRecordI18n.class.php 4498 2007-06-30 20:18:01Z mahono $
+ */
+
+class sfDoctrineRecordI18n extends sfDoctrineRecord
+{
+  protected
+    $cultureName = '',
+    $i18nColumns = null,
+    $i18nTable = '',
+    $culture = null;
+
+  public function setCulture($newCulture)
+  {
+    $this->culture = $newCulture;
+  }
+
+  public function getCulture()
+  {
+    // lazily set the culture to the current user's one
+    if (!$this->culture)
+    {
+      $this->culture = sfContext::getInstance()->getUser()->getCulture();
+    }
+
+    return $this->culture;
+  }
+
+  public function getI18nTable()
+  {
+    return $this->getTable()->getConnection()->getTable($this->i18nTable);
+  }
+
+  public function getCurrentI18nObject($create = false)
+  {
+    return $this->getI18nObjectForCulture($this->getCulture(), $create);
+  }
+
+  public function getI18nObjectForCulture($culture, $create)
+  {
+    if (empty($this->i18nTable))
+    {
+      $this->setUp();
+    }
+
+    $coll = parent::get($this->i18nTable);
+
+    if (isset($coll[$culture]))
+    {
+      return $coll[$culture];
+    }
+
+    // the i18n object does not exist
+    if ($create)
+    {
+      $obj = $this->getI18nTable()->create();
+      $obj->set($this->cultureName, $culture);
+
+      $coll->add($obj);
+      return $obj;
+    }
+
+    return null; // not found and not created
+  }
+
+  protected function hasI18nTable($i18nTableName, $cultureName)
+  {
+    $this->i18nTable = $i18nTableName;
+    $i18nTable = $this->getI18nTable();
+    $i18nTable->setAttribute(Doctrine::ATTR_COLL_KEY, $cultureName);
+
+    $columns = $i18nTable->getColumns();
+
+    $this->cultureName = $cultureName;
+    unset($columns[$cultureName]);
+    $pks = $i18nTable->getPrimaryKeys();
+    foreach($pks as $pk)
+    {
+      unset($columns[$pk]);
+    }
+    $this->i18nColumns = array_keys($columns);
+  }
+
+  // we need this function in order to be sure that setUp has been called
+  protected function getI18nColumns()
+  {
+    if (is_null($this->i18nColumns))
+    {
+      $this->setUp();
+    }
+
+    return $this->i18nColumns;
+  }
+
+  public function get($name, $load = true)
+  {
+    // check if $name is i18n
+    if (in_array($name, $this->getI18nColumns()))
+    {
+      if ($obj = $this->getCurrentI18nObject())
+      {
+        return $obj->get($name, $load);
+      }
+      else
+      {
+        return null;
+      }
+    }
+
+    return parent::get($name, $load);
+  }
+
+  public function set($name, $value, $load = true)
+  {
+    if (in_array($name, $this->getI18nColumns()))
+    {
+      $obj = $this->getCurrentI18nObject(true);
+      $obj->set($name, $value, $load);
+    }
+    else
+    {
+      parent::set($name, $value, $load);
+    }
+  }
+
+  public function contains($name)
+  {
+    $i18n = $this->getCurrentI18nObject();
+
+    return $i18n ? $i18n->contains($name) : parent::contains($name);
+  }
+
+  public function getData()
+  {
+    $i18n = $this->getCurrentI18nObject();
+    $i18nData = $i18n ? $i18n->getData() : array();
+    $data = parent::getData();
+
+    return array_merge($data, $i18nData);
+  }
+
+  /**
+   * @return integer  the number of columns in this record
+   */
+  public function count()
+  {
+    $data = $this->getData();
+
+    return count($data);
+  }
+
+  public function toArray()
+  {
+    $array = parent::toArray();
+    $i18n = $this->getCurrentI18nObject();
+    $i18nArray = $i18n ? $i18n->toArray() : array();
+
+    return array_merge($array, $i18nArray);
+  }
+}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineSchemasConfigHandler.class.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineSchemasConfigHandler.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c6c8ef9c5c824a12b070aedb11faadaabee6215
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineSchemasConfigHandler.class.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ *
+ * sfDoctrineSchemasConfigHandler parses the config/schemas.yml config file
+ *
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Stephen Leavitt <stephen.leavitt@gmail.com>
+ * @version    SVN: $Id$
+ */
+class sfDoctrineSchemasConfigHandler extends sfYamlConfigHandler
+{
+    public function execute( $configFiles )
+    {
+        $this->initialize();
+
+        $mappings = $this->parseYamls( $configFiles );
+
+        $data = array();
+
+        $data[] = '$manager = Doctrine_Manager::getInstance();'."\n";
+
+        foreach ( $mappings as $mapping => $schemas )
+        {
+            foreach ( $schemas as $schema )
+            {
+                $path = sfConfig::get( 'sf_config_dir' ) . '/doctrine/' . $schema . '.yml';
+                $components = array_keys( sfYaml::load( $path ) );
+
+                foreach ( $components as $component )
+                {
+                    $data[] = "\$manager->bindComponent('{$component}', '{$mapping}');";
+                }
+            }
+        }
+
+        // compile data
+        $retval = sprintf("<?php\n".
+                          "// auto-generated by sfDoctrineSchemasConfigHandler\n".
+                          "// date: %s\n%s\n",
+                          date('Y-m-d H:i:s'), implode("\n", $data));
+ 
+        return $retval;
+    }
+}
diff --git a/website/plugins/sfDoctrinePlugin/lib/sfDoctrineUniqueValidator.php b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineUniqueValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..52e94baf833168c1aba0ed53a4f500b23bcb79d5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/lib/sfDoctrineUniqueValidator.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * sfDoctrineUniqueValidator validates that the value does not already exists
+ *
+ * <b>Required parameters:</b>
+ *
+ * # <b>class</b>         - [none]               - Doctrine class name.
+ * # <b>column</b>        - [none]               - Doctrine column name.
+ *
+ * <b>Optional parameters:</b>
+ *
+ * # <b>unique_error</b>  - [Uniqueness error]   - An error message to use when
+ *                                                the value for this column already
+ *                                                exists in the database.
+ *
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     ?
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineUniqueValidator.php 3428 2007-02-09 14:46:36Z chtito $
+ */
+class sfDoctrineUniqueValidator extends sfValidator
+{
+  public function execute (&$value, &$error)
+  {
+
+    $className  = $this->getParameter('class');
+    $columnName = $className.'.'.$this->getParameter('column');
+
+    $primaryKeys =  sfDoctrine::getTable($className)->getPrimaryKeys();
+    foreach($primaryKeys as $primaryKey)
+    {
+        if(is_null($primaryKeyValue = $this->getContext()
+      ->getRequest()
+      ->getParameter($primaryKey)));
+        break;
+    }
+
+
+    $query = new Doctrine_Query();
+    $query->from($className);
+
+    if($primaryKeyValue === null)
+    {
+        $query->where($columnName.' = ?');
+        $res = $query->execute(array($value));
+    }
+    else
+    {
+        $query->where($columnName.' = ? AND '.$primaryKey.' != ?');
+        $res = $query->execute(array($value, $primaryKeyValue));
+
+    }
+
+    if(sizeof($res))
+    {
+      $error = $this->getParameterHolder()->get('unique_error');
+      return false;
+    }
+
+    return true;
+
+
+  }
+
+  /**
+   * Initialize this validator.
+   *
+   * @param sfContext The current application context.
+   * @param array   An associative array of initialization parameters.
+   *
+   * @return bool true, if initialization completes successfully, otherwise false.
+   */
+  public function initialize ($context, $parameters = null)
+  {
+    // initialize parent
+    parent::initialize($context);
+
+    // set defaults
+    $this->setParameter('unique_error', 'Uniqueness error');
+
+    $this->getParameterHolder()->add($parameters);
+
+    // check parameters
+    if (!$this->getParameter('class'))
+    {
+      throw new sfValidatorException('The "class" parameter is mandatory for the sfDoctrineUniqueValidator validator.');
+    }
+
+    if (!$this->getParameter('column'))
+    {
+      throw new sfValidatorException('The "column" parameter is mandatory for the sfDoctrineUniqueValidator validator.');
+    }
+
+    return true;
+  }
+}
diff --git a/website/plugins/sfDoctrinePlugin/package.xml b/website/plugins/sfDoctrinePlugin/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d2946df392dd9eb7c0cd3a7f86d538fa91d59185
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/package.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.4.1" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ <name>sfDoctrinePlugin</name>
+ <channel>pear.symfony-project.com</channel>
+ <summary>This plugin allows symfony users to use doctrine instead of propel.</summary>
+ <description>This plugin fully integrates doctrine into symfony. You can use *all* the features in symfony with propel replaced by doctrine.</description>
+ <lead>
+  <name>Olivier Verdier</name>
+  <user>chtito</user>
+  <email>olivier.verdier@gmail.com</email>
+  <active>yes</active>
+ </lead>
+ <date>2007-05-05</date>
+ <version>
+   <release>0.4.2</release>
+   <api>0.1.0</api>
+ </version>
+ <stability>
+  <release>beta</release>
+  <api>beta</api>
+ </stability>
+ <license uri="http://www.symfony-project.com/license">MIT license</license>
+ <notes>-</notes>
+ <contents>
+ <dir name="addon"><file name="sfDoctrineDatabaseSchema.class.php" role="data"/></dir><dir name="config"><file name="autoload.yml" role="data"/><file name="config_handlers.yml" role="data"/><file name="doctrine.yml" role="data"/></dir><dir name="data"><dir name="sfDoctrineAdmin"><dir name="default"><dir name="skeleton"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="config"><file name="generator.yml" role="data"/></dir><dir name="templates"/><dir name="validate"/></dir><dir name="template"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="templates"><file name="_edit_actions.php" role="data"/><file name="_edit_footer.php" role="data"/><file name="_edit_header.php" role="data"/><file name="_filters.php" role="data"/><file name="_list_actions.php" role="data"/><file name="_list_footer.php" role="data"/><file name="_list_header.php" role="data"/><file name="_list_td_actions.php" role="data"/><file name="_list_td_stacked.php" role="data"/><file name="_list_td_tabular.php" role="data"/><file name="_list_th_stacked.php" role="data"/><file name="_list_th_tabular.php" role="data"/><file name="editSuccess.php" role="data"/><file name="listSuccess.php" role="data"/></dir></dir></dir></dir><dir name="tasks"><file name="sfPakeDoctrine.php" role="data"/></dir></dir><dir name="lib"><file name="sfDoctrine.class.php" role="data"/><file name="sfDoctrineAdminGenerator.class.php" role="data"/><file name="sfDoctrineConfigHandler.class.php" role="data"/><file name="sfDoctrineDatabase.class.php" role="data"/><file name="sfDoctrinePager.class.php" role="data"/><file name="sfDoctrineUniqueValidator.php" role="data"/><file name="sfPropelCompatRecord.class.php" role="data"/></dir><file name="LICENSE" role="data"/><file name="README" role="data"/><dir name="/"><dir name="addon"><file name="sfDoctrineClassSchema.class.php" role="data"/><file name="sfDoctrineColumnSchema.class.php" role="data"/><file name="sfDoctrineDatabaseSchema.class.php" role="data"/><file name="sfDoctrineRelationSchema.class.php" role="data"/><file name="sfDoctrineSchemaDoctrineLoader.class.php" role="data"/><file name="sfDoctrineSchemaPropelLoader.class.php" role="data"/><file name="sfDoctrineTableSchema.class.php" role="data"/></dir><dir name="config"><file name="autoload.yml" role="data"/><file name="config_handlers.yml" role="data"/><file name="doctrine.yml" role="data"/><file name="settings.yml" role="data"/></dir><dir name="data"><dir name="generator"><dir name="sfDoctrineAdmin"><dir name="crud"><dir name="skeleton"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="config"><file name="generator.yml" role="data"/></dir><dir name="lib"/><dir name="templates"/><dir name="validate"/></dir><dir name="template"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="templates"><file name="editSuccess.php" role="data"/><file name="listSuccess.php" role="data"/><file name="showSuccess.php" role="data"/></dir></dir></dir><dir name="default"><dir name="skeleton"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="config"><file name="generator.yml" role="data"/></dir><dir name="templates"/><dir name="validate"/></dir><dir name="template"><dir name="actions"><file name="actions.class.php" role="data"/></dir><dir name="templates"><file name="_edit_actions.php" role="data"/><file name="_edit_footer.php" role="data"/><file name="_edit_form.php" role="data"/><file name="_edit_header.php" role="data"/><file name="_edit_messages.php" role="data"/><file name="_filters.php" role="data"/><file name="_list.php" role="data"/><file name="_list_actions.php" role="data"/><file name="_list_footer.php" role="data"/><file name="_list_header.php" role="data"/><file name="_list_messages.php" role="data"/><file name="_list_td_actions.php" role="data"/><file name="_list_td_stacked.php" role="data"/><file name="_list_td_tabular.php" role="data"/><file name="_list_th_stacked.php" role="data"/><file name="_list_th_tabular.php" role="data"/><file name="editSuccess.php" role="data"/><file name="listSuccess.php" role="data"/></dir></dir></dir></dir></dir><dir name="tasks"><file name="sfPakeDoctrine.php" role="data"/></dir></dir><dir name="lib"><dir name="helper"><file name="ObjectDoctrineAdminHelper.php" role="data"/></dir><file name="sfDoctrine.class.php" role="data"/><file name="sfDoctrineAdminGenerator.class.php" role="data"/><file name="sfDoctrineConfigHandler.class.php" role="data"/><file name="sfDoctrineConnectionListener.class.php" role="data"/><file name="sfDoctrineData.class.php" role="data"/><file name="sfDoctrineDatabase.class.php" role="data"/><file name="sfDoctrineDataRetriever.class.php" role="data"/><file name="sfDoctrineEventListener.class.php" role="data"/><file name="sfDoctrineException.class.php" role="data"/><file name="sfDoctrinePager.class.php" role="data"/><file name="sfDoctrineQueryLogger.class.php" role="data"/><file name="sfDoctrineRecord.class.php" role="data"/><file name="sfDoctrineRecordI18n.class.php" role="data"/><file name="sfDoctrineSchemasConfigHandler.class.php" role="data"/><file name="sfDoctrineUniqueValidator.php" role="data"/></dir><file name="LICENSE" role="data"/><file name="README" role="data"/><dir name="test"><dir name="bootstrap"><file name="config.php" role="data"/><file name="functional.php" role="data"/><file name="unit.php" role="data"/></dir><file name="coverage.php" role="data"/><dir name="functional"/><dir name="other"/><file name="prove.php" role="data"/><file name="tests.php" role="data"/><dir name="unit"><dir name="addon"><dir name="fixtures"><file name="doctrineTestSchema.yml" role="data"/><file name="propelTestSchema.xml" role="data"/><file name="propelTestSchema.yml" role="data"/></dir><file name="sfDoctrineClassTest.php" role="data"/><file name="sfDoctrineColumnTest.php" role="data"/><file name="sfDoctrineRelationTest.php" role="data"/><file name="sfDoctrineSchemaDoctrineLoaderTest.php" role="data"/><file name="sfDoctrineSchemaPropelLoaderTest.php" role="data"/><file name="sfDoctrineTableTest.php" role="data"/></dir><dir name="lib"/></dir></dir><file name="TODO.txt" role="data"/></dir></contents>
+
+ <dependencies>
+  <required>
+   <php>
+    <min>5.1.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.1</min>
+   </pearinstaller>
+   <package>
+    <name>symfony</name>
+    <channel>pear.symfony-project.com</channel>
+    <min>1.0.0</min>
+    <max>1.1.0</max>
+    <exclude>1.1.0</exclude>
+   </package>
+  </required>
+ </dependencies>
+
+ <phprelease>
+ </phprelease>
+
+ <changelog>
+ </changelog>
+</package>
diff --git a/website/plugins/sfDoctrinePlugin/test/bootstrap/config.php b/website/plugins/sfDoctrinePlugin/test/bootstrap/config.php
new file mode 100644
index 0000000000000000000000000000000000000000..88d2d6cd7066eaf6466ef2b7281f75f4fb532da8
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/bootstrap/config.php
@@ -0,0 +1,5 @@
+<?php
+// comment or remove the following message
+die('Please define the path to the symfony library in '.realpath(__FILE__)."\n");
+$sf_symfony_lib_dir  = '';
+$sf_symfony_data_dir = '';
diff --git a/website/plugins/sfDoctrinePlugin/test/bootstrap/unit.php b/website/plugins/sfDoctrinePlugin/test/bootstrap/unit.php
new file mode 100644
index 0000000000000000000000000000000000000000..38adf5e699db82509c6efed472fc6482885a96d4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/bootstrap/unit.php
@@ -0,0 +1,50 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: unit.php 2690 2006-11-15 18:35:07Z chtito $
+ */
+
+$sfDoctrine_dir = realpath(dirname(__FILE__).'/../..');
+define('SF_ROOT_DIR', realpath($sfDoctrine_dir.'/../..'));
+
+// symfony directories
+$project_config = SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php';
+if (file_exists($project_config)) // if we are in a project directory
+  require $project_config;
+else // the plugin is installed globally
+  require 'config.php'; 
+
+
+
+require_once $sf_symfony_lib_dir.'/../test/bootstrap/unit.php';
+
+class sfDoctrineAutoLoader extends testAutoloader
+{
+  public static function sfDoctrineInitialize()
+  {
+    //FIXME: loading all the sfDoctrine directory is probably not needed
+    $files = pakeFinder::type('file')->name('*.php')->ignore_version_control()->in(realpath(dirname(__FILE__).'/../..'));
+    foreach ($files as $file)
+    {
+      preg_match_all('~^\s*(?:abstract\s+|final\s+)?(?:class|interface)\s+(\w+)~mi', file_get_contents($file), $classes);
+      foreach ($classes[1] as $class)
+      {
+        self::$class_paths[$class] = $file;
+      }
+    }
+  }
+}
+
+sfDoctrineAutoLoader::initialize();
+sfDoctrineAutoLoader::sfDoctrineInitialize();
diff --git a/website/plugins/sfDoctrinePlugin/test/coverage.php b/website/plugins/sfDoctrinePlugin/test/coverage.php
new file mode 100755
index 0000000000000000000000000000000000000000..e4d93cd8295689a04087cf958747985f03c7ebe5
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/coverage.php
@@ -0,0 +1,38 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: coverage.php 2690 2006-11-15 18:35:07Z chtito $
+ */
+$testsDir = realpath(dirname(__FILE__));
+define('SF_ROOT_DIR', realpath($testsDir.'/../../../'));
+
+// symfony directories
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+require_once($sf_symfony_lib_dir.'/vendor/lime/lime.php');
+
+$h = new lime_harness(new lime_output_color());
+$h->base_dir = dirname(__FILE__);
+
+// unit tests
+$h->register_glob($h->base_dir.'/unit/*/*Test.php');
+
+// functional tests
+$h->register_glob($h->base_dir.'/functional/*Test.php');
+
+$c = new lime_coverage($h);
+$c->extension = '.class.php';
+$c->verbose = false;
+$c->base_dir = realpath(dirname(__FILE__).'/../lib');
+$c->register_glob($c->base_dir.'/*/*.php');
+$c->run();
diff --git a/website/plugins/sfDoctrinePlugin/test/prove.php b/website/plugins/sfDoctrinePlugin/test/prove.php
new file mode 100755
index 0000000000000000000000000000000000000000..d5fcdc644ee019aa2b7ad6f9016e4d91adc66733
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/prove.php
@@ -0,0 +1,40 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: prove.php 2874 2006-11-29 16:48:01Z chtito $
+ */
+$testsDir = realpath(dirname(__FILE__));
+
+require_once($testsDir.'/bootstrap/unit.php');
+
+$h = new lime_harness(new lime_output_color());
+
+$h->base_dir = $testsDir;
+
+// cache autoload files
+testAutoloader::initialize(true);
+
+// unit tests
+$h->register_glob($h->base_dir.'/unit/*/*Test.php');
+
+// functional tests
+//$h->register_glob($h->base_dir.'/functional/*Test.php');
+//$h->register_glob($h->base_dir.'/functional/*/*Test.php');
+
+// other tests
+//$h->register_glob($h->base_dir.'/other/*Test.php');
+
+$h->run();
+
+testAutoloader::removeCache();
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/doctrineTestSchema.yml b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/doctrineTestSchema.yml
new file mode 100755
index 0000000000000000000000000000000000000000..c5d1c91f76b4efc976236d075e895910d53b6646
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/doctrineTestSchema.yml
@@ -0,0 +1,84 @@
+---
+TestClass:
+  tableName: testTable
+  columns:
+    name: string(64)
+    description: string(8)
+    active: boolean
+User: 
+  tableName: user
+  columns: 
+    name:
+Group:
+  tableName: group
+  columns:
+    name:
+User2Group:
+  tableName: user2group
+  columns:
+    user_id: {foreignClass: User, localName: Groups, counterpart: group_id, cascadeDelete: true}
+    group_id: {foreignClass: Group, localName: Users, counterpart: user_id, cascadeDelete: true}
+Parent:
+  tableName: parent_table
+  columns:
+    dummy:
+ColAggregation:
+  inheritance: {extends: Parent, keyField: class_key, keyValue: 1}
+  columns:
+    last_active: timestamp
+SeparateTable:
+  tableName: separate_table
+  inheritance: {extends: Parent}
+  columns:
+    none:
+Review: 
+  tableName: reviews
+  columns: 
+    author_id: 
+      type: integer
+      size: 11
+      foreignReference: id
+      localName: Reviews
+      foreignName: author
+      foreignClass: User
+      counterpart: book_id
+    book_id: 
+      type: integer
+      size: 11
+      foreignReference: id
+      localName: Reviews
+      foreignClass: Book
+      counterpart: author_id
+Book: 
+  tableName: book
+  i18n: {class: BookI18n, cultureField: culture}
+  columns: 
+    author_id: 
+      localName: Books
+      foreignName: author
+      foreignClass: User
+    publication_date: date
+    lastviewed: timestamp
+    price: double(10)
+    edition: integer(11)
+    type: enum(5)
+    dimensions: 
+      type: array
+      size: 100
+BookI18n: 
+  tableName: book_i18n
+  columns: 
+    title: 
+Yin: 
+  tableName: yin
+  columns:
+    name:
+    yang_id: {foreignClass: Yang, unique: true}
+Yang:
+  tableName: yang
+  columns:
+    name:
+#Tone:
+#  inheritance: {extends: Ttwo}
+#Ttwo:
+#  inheritance: {extends: Tone}
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.xml b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.xml
new file mode 100755
index 0000000000000000000000000000000000000000..63dcef668850ef806204e1da0339d1fbe33d2ee4
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database name="doctrineTestSchema" defaultIdMethod="native">
+	<table name="testTable" phpName="TestTable">
+		<column name="name" type="longvarchar" />
+		<column name="description" type="longvarchar" />
+		<column name="id" type="integer" primaryKey="true" autoIncrement="true" />
+		<foreign-key foreignTable="dummy">
+		  <reference foreign="id" local="dummy_id"/>
+		</foreign-key>
+	</table>
+	<table name="dummy" phpName="DummyPHP">
+	 <column name="foo" type="integer"/>
+  </table>
+</database>
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.yml b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.yml
new file mode 100755
index 0000000000000000000000000000000000000000..8419335be544f030e2153873c8b51b5b843b6a26
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/fixtures/propelTestSchema.yml
@@ -0,0 +1,26 @@
+---
+doctrineTestSchema: 
+  testTable: 
+    _attributes: 
+      idMethod: native
+    id: 
+      type: TINYINT
+      required: true
+      autoIncrement: true
+      primaryKey: true
+    name: 
+      type: VARCHAR
+      size: 64
+      required: true
+      default: 
+    description: 
+      type: VARCHAR
+      size: 8
+      required: true
+      default: 
+    dummy_id:
+      foreignTable: dummy
+      onDelete: cascade
+  dummy:
+    _attributes: {phpName: DummyPHP}
+    foo: integer(10)
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineClassTest.php b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineClassTest.php
new file mode 100755
index 0000000000000000000000000000000000000000..8fa8bd35b92f8015023f2289644dcf53492689f9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineClassTest.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineClassTest.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+//We need bootStrap
+require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
+
+//TODO: add planned tests
+$t = new lime_test(null,new lime_output_color());
+
+$name = 'TestClass';
+$class = new sfDoctrineClassSchema($name);
+
+// ->__construct()
+$t->diag('->__constuct()');
+$t->is($class->getPhpName(), $name, '->__construct() takes first parameter as Class name');
+
+// ->setPhpName()
+$t->diag('->setPhpName()');
+$newName = 'NewTestClass';
+$class->setPhpName($newName);
+$t->is($class->getPhpName(), $newName, '->setPhpName() sets new Class name');
+
+// ->getColumns()
+$t->diag('->getColumns()');
+$t->is($class->getColumns(), array(),'->getColumns() returns array');
+
+// ->isTable()
+$t->diag('->isTable()');
+$t->is($class->hasTable(), false, '->isTable() class is never table');
+
+$t->diag('setting up a foreign relation');
+$colName = 'colName';
+$column = new sfDoctrineColumnSchema($colName, array('foreignClass'=>'otherClass'));
+$class->addColumn($column);
+$rel = $class->getRelation($colName);
+$t->is($rel->get('localName'), $class->getPhpName().'s', 'default local name: plural of class name');
+$t->is($rel->get('foreignName'), 'otherClass', 'default foreignName set to the foreign class name');
+
+$t->diag('setting up options');
+$class = new sfDoctrineClassSchema($name, array('options' => array('foo'=> 'bar')));
+$classPhp = $class->asPhp();
+$t->like($classPhp[0]['source'], '@\$this->option\(\'foo\', \'bar\'\)@', 'right output of the class options');
+
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineColumnTest.php b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineColumnTest.php
new file mode 100755
index 0000000000000000000000000000000000000000..8e3b833df871c42bae121e608c4457f14c4276b9
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineColumnTest.php
@@ -0,0 +1,75 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineColumnTest.php 3438 2007-02-10 15:31:31Z chtito $
+ */
+//We need bootStrap
+require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
+
+//TODO: add planned tests
+$t = new lime_test(null, new lime_output_color());
+
+$colName = 'TestColumn';
+$column = new sfDoctrineColumnSchema($colName);
+
+// ->__construct(), special case without variable parameters
+$t->diag('->__constuct()');
+$t->is($column->getName(), $colName, '->__construct() takes first parameter as Column name');
+$t->isa_ok($column->getColumnInfo(), 'sfParameterHolder', '->__construct() sets column infor to sfParameterHolder');
+//Construct sets default values, nothing passed
+$props = $column->getProperties();
+$t->is($props['type'],'string',"->__construct() default type is 'string'");
+
+$t->is($props['name'],$colName,"->__construct() sets property name to column name");
+
+$column = new sfDoctrineColumnSchema($colName, array('foreignClass'=>'other'));
+$props = $column->getProperties();
+$t->is($props['type'], 'integer', 'default foreign key type is integer');
+
+$t->diag('constraints');
+$column = new sfDoctrineColumnSchema($colName, array('enum'=>true, 'noconstraint'=>true));
+$props = $column->getProperties();
+
+$t->is($props['enum'], true, 'constraints are stored properly');
+$t->ok(!isset($props['notaconstraint']), 'false constraints are not stored');
+
+$t->diag('short syntax');
+$type = 'string';
+$size = 10;
+$shortTypeSize = "$type($size)";
+$column = new sfDoctrineColumnSchema($colName, array('type'=>$shortTypeSize));
+$t->is($column->getProperty('size'), $size, 'short array syntax for size');
+$t->is($column->getProperty('type'), $type, 'short array syntax for type');
+
+$column = new sfDoctrineColumnSchema($colName, $shortTypeSize);
+$t->is($column->getProperty('size'), $size, 'short string syntax for size');
+$t->is($column->getProperty('type'), $type, 'short string syntax for type');
+$column = new sfDoctrineColumnSchema($column, 'boolean');
+$t->is($column->getProperty('type'), 'boolean', 'short string syntax without size');
+
+$t->diag('PHP output');
+$type = 'integer';
+$size = 456;
+$constraint = 'primary';
+$colSetup = array('type'=>$type, 'size'=>$size, 'columnName' => 'test_column', $constraint=>true);
+$column = new sfDoctrineColumnSchema($colName, $colSetup);
+
+$t->is($column->asPhp(), "\$this->hasColumn('test_column as $colName', '$type', $size, array (  '$constraint' => true,));", 'php output');
+
+$t->diag('Doctrine YML output');
+$t->is_deeply($column->asDoctrineYml(), $colSetup, 'Doctrine array output');
+
+$colEnum = new sfDoctrineColumnSchema($colName, array('type'=>array('a a', 'b')));
+#$t->like($colEnum->asPhp(), "|this->setEnumValues\('TestColumn', .*0=>'a',.*1=>'b'.*\);|", 'enum types are declared');
+
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaDoctrineLoaderTest.php b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaDoctrineLoaderTest.php
new file mode 100755
index 0000000000000000000000000000000000000000..ab6ee2b44db70148025d36c757b3660ac0a6858a
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaDoctrineLoaderTest.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineSchemaDoctrineLoaderTest.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+//We need bootStrap
+require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
+
+$t = new lime_test(null,new lime_output_color());
+
+class sfDoctrineSchemaDoctrineLoaderTestProxy extends sfDoctrineSchemaDoctrineLoader {
+  
+  /**
+   * Lime test object
+   *
+   * @var lime_test
+   */
+  private $t = null;
+  
+  /**
+   * Constructor
+   *
+   * @param lime_test $testObject
+   */
+  function __construct($testObject) {
+    $this->t = $testObject;
+  }
+
+  /**
+   * Test launcher
+   *
+   * @param string $schema Path to schema file
+   */
+  function launchTests($schema) {
+    $this->t->diag('->load()');
+    $this->load($schema);
+    $this->process();
+
+    $yml = $this->asDoctrineYml();
+    
+    $this->t->diag('->getClasses()');
+    $classes = $this->getClasses();
+    $nbClasses = 12;
+    $this->t->is(count($classes), $nbClasses,"->getClasses() should return $nbClasses classes from fixture.");
+    
+    $this->t->diag('->getClass()');
+    $class = $this->getClass('TestClass');
+    #$this->t->ok($class->isTable(),"->getClass() should return return class instance.");
+    
+    $this->t->diag('->parentTable()');
+    $table = $this->parentTable($class);
+    $this->t->is(get_class($table), 'sfDoctrineTableSchema', "->parentTable() should return table instance.");
+    $this->t->is($this->getClass('ColAggregation')->getTableName(), 'parent_table', 'inheritance gets the right parent table');
+    #$this->t->ok($this->getClass('SeparateTable')->isTable(), '"SeparateTable" is a table-class');
+
+    $this->t->is($this->getClass('BookI18n')->getColumn('culture')->getProperty('type'), 'string', 'culture field is defined (as a string)');
+    $rel = $this->getClass('BookI18n')->getRelation('id');
+    $this->t->is($rel->get('localName'), 'BookI18n', 'i18n relation name is not a plural');
+
+    $this->t->is($this->getClass('ColAggregation')->getTable()->getColumn('class_key')->getProperty('type'), 'integer', 'inheritance field is defined (as an integer)');
+
+    $c = $this->getClass('SeparateTable');
+    $SeparateTablePhp = $c->asPhp();
+    $SeparateTableSource = $SeparateTablePhp[0]['source'];
+    $this->t->like($SeparateTableSource, '/extends Parent/', 'The class "SeparateTable" extends Parent without having any class key field');
+
+    $this->t->like($SeparateTableSource, '@setTableName\(\'separate_table\'\)@', 'class "SeparateTable" has both a table and inheritance');
+
+    $this->t->like($SeparateTableSource, '@parent::setTableDefinition\(\);@', 'class "SeparateTable" calls parent::setTableDefinition');
+
+    $colAggregationPhp = $this->getClass('ColAggregation')->asPhp();
+
+    $this->t->like($colAggregationPhp[0]['source'], "@setInheritanceMap\(array\('class_key'=>1\)\)@", 'setInheritanceMap is properly set');
+
+  $this->t->diag('relationships');
+  $yangPhp = $this->getClass('Yin')->asPhp();
+  $this->t->like($yangPhp[0]['source'], "#hasOne\('Yang as Yang', 'Yin.yang_id', 'id'\)#", 'one to one relationships is properly declared');
+
+  $userPhp = $this->getClass('User')->asPhp();
+  $this->t->like($userPhp[0]['source'], "#hasMany\('Book as Books', 'Book.author_id'\)#", 'hasMany is properly declared');
+
+  $this->t->like($userPhp[0]['source'], "#hasMany\('Group as Groups', 'User2Group.group_id'\)#", 'has many to many properly declared');
+
+  $userGroupPhp = $this->getClass('User2Group')->asPhp();
+  $this->t->like($userGroupPhp[0]['source'], "#ownsOne\('User as User', 'User2Group.group_id', 'id'\)#", 'has many to many with cascade properly defined');
+  }
+
+}
+
+//Load doctrine schema from fixtures and run tests
+$schemaFixture = dirname(__FILE__)."/fixtures/doctrineTestSchema.yml";
+$schema = new sfDoctrineSchemaDoctrineLoaderTestProxy($t);
+$schema->launchTests($schemaFixture);
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaPropelLoaderTest.php b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaPropelLoaderTest.php
new file mode 100755
index 0000000000000000000000000000000000000000..0f8b640f20bb03b028fd43f2095e2134965e39ad
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaPropelLoaderTest.php
@@ -0,0 +1,81 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineSchemaPropelLoaderTest.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+//We need bootStrap
+require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
+
+$t = new lime_test(null, new lime_output_color());
+
+class sfDoctrineSchemaPropelLoaderTestProxy extends sfDoctrineSchemaPropelLoader {
+  
+  /**
+   * Lime test object
+   *
+   * @var lime_test
+   */
+  private $t = null;
+  
+  /**
+   * Constructor
+   *
+   * @param lime_test $testObject
+   */
+  function __construct($testObject) {
+    $this->t = $testObject;
+  }
+
+  /**
+   * Test launcher
+   *
+   * @param string $schema Path to schema file
+   */
+  function launchTests($schema) {
+    $this->t->diag('->load()');
+    $this->load($schema);
+    
+    $this->t->diag('->getTables()');
+    $tables = $this->tables;
+    $this->t->is(count($tables),2,"->getTables() should return 2 table from fixture.");
+    $this->t->ok(in_array('testTable', array_keys($tables)), "->getTables() should return 'testTable' from fixture.");
+    
+    $this->t->diag('->classes');
+    $this->t->is(count($this->classes),2,"->classes should have 2 class from fixture");
+    $this->t->ok($this->getClass('TestTable'),"->classes should have 'TestTable' from fixture.");
+    
+    $this->t->ok($this->getClass('TestTable')->getColumn('dummy_id')->hasRelation(), 'foreign relation is properly imported');
+
+    
+    #$this->t->diag('->asDoctrineYml()');
+    #$yml = $this->asDoctrineYml();
+    #$this->t->cmp_ok(strlen($yml['source']), '>', 0, "->asDoctrineYml() doctrine YAML shoudl not be empty.");
+    
+    $this->t->diag('->findClassByTableName()');
+    $this->t->is($this->findClassByTableName('testTable')->getPhpName(),'TestTable', "->findClassByTableName() returns 'TestTable' class for 'testTable' table.");
+    
+    $yml = $this->asDoctrineYml();
+    $yml = $yml['source'];
+    $this->t->like($yml, '@cascadeDelete: 1@', 'onDelete is generated');
+  }
+}
+
+//Load Propel schema from fixtures and run tests
+$schemaFixture = dirname(__FILE__)."/fixtures/propelTestSchema.xml";
+$schema = new sfDoctrineSchemaPropelLoaderTestProxy($t);
+$schema->launchTests($schemaFixture);
+
+$schemaFixture = dirname(__FILE__)."/fixtures/propelTestSchema.yml";
+$schema = new sfDoctrineSchemaPropelLoaderTestProxy($t);
+$schema->launchTests($schemaFixture);
\ No newline at end of file
diff --git a/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineTableTest.php b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineTableTest.php
new file mode 100755
index 0000000000000000000000000000000000000000..b65a085c0ade5d62984497239192323adbd33c32
--- /dev/null
+++ b/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineTableTest.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * This file is part of the sfDoctrine package.
+ * (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @package    symfony.plugins
+ * @subpackage sfDoctrine
+ * @author     Pavel Kunc
+ * @author     Olivier Verdier <Olivier.Verdier@gmail.com>
+ * @version    SVN: $Id: sfDoctrineTableTest.php 3455 2007-02-14 16:17:48Z chtito $
+ */
+//We need bootStrap
+require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
+
+//TODO: add planned tests
+$t = new lime_test(null,new lime_output_color());
+
+$tableName = 'test';
+$package = 'package';
+$table = new sfDoctrineTableSchema($tableName,$package);
+
+// ->__construct()
+$t->diag('->construct()');
+$t->is($table->getName(), $tableName, '->__construct() takes first parameter as Table name');
+$t->is($table->getPackage(), $package, '->__construct() takes second parameter as package name');
+
+// ->setName()
+$t->diag('->setName()');
+$tableName = 'myTest';
+$table->setName($tableName);
+$t->is($table->getName(), $tableName, '->setName() sets new table name');
+
+// ->addClass()
+//TODO: need test
+
+// ->addPropelXmlClasses()
+//TODO: need test
diff --git a/website/symfony b/website/symfony
new file mode 100755
index 0000000000000000000000000000000000000000..b540da2cc3b373fff24d0366e185a9f09bb3a6b9
--- /dev/null
+++ b/website/symfony
@@ -0,0 +1,14 @@
+#!/usr/bin/env php
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * 
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+chdir(dirname(__FILE__));
+include('config/config.php');
+include($sf_symfony_data_dir.'/bin/symfony.php');
diff --git a/website/test/bootstrap/functional.php b/website/test/bootstrap/functional.php
new file mode 100644
index 0000000000000000000000000000000000000000..05ea38cb0e7875c96e0e4126366f360968dd74c6
--- /dev/null
+++ b/website/test/bootstrap/functional.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * 
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+// guess current application
+if (!isset($app))
+{
+  $traces = debug_backtrace();
+  $caller = $traces[0];
+  $app = array_pop(explode(DIRECTORY_SEPARATOR, dirname($caller['file'])));
+}
+
+// define symfony constant
+define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/../..'));
+define('SF_APP',         $app);
+define('SF_ENVIRONMENT', 'test');
+define('SF_DEBUG',       true);
+
+// initialize symfony
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+// remove all cache
+sfToolkit::clearDirectory(sfConfig::get('sf_cache_dir'));
diff --git a/website/test/bootstrap/unit.php b/website/test/bootstrap/unit.php
new file mode 100644
index 0000000000000000000000000000000000000000..fccb9eb4255e78b4135253cfeabd76eea4bb4d6d
--- /dev/null
+++ b/website/test/bootstrap/unit.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ * 
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+$_test_dir = realpath(dirname(__FILE__).'/..');
+define('SF_ROOT_DIR', realpath($_test_dir.'/..'));
+
+// symfony directories
+include(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+require_once($sf_symfony_lib_dir.'/vendor/lime/lime.php');
diff --git a/website/test/functional/frontend/api_documentationActionsTest.php b/website/test/functional/frontend/api_documentationActionsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e648ad3d1f1c2d6ee8eb8c6740fd4efa236616f
--- /dev/null
+++ b/website/test/functional/frontend/api_documentationActionsTest.php
@@ -0,0 +1,15 @@
+<?php
+
+include(dirname(__FILE__).'/../../bootstrap/functional.php');
+
+// create a new test browser
+$browser = new sfTestBrowser();
+$browser->initialize();
+
+$browser->
+  get('/api_documentation/index')->
+  isStatusCode(200)->
+  isRequestParameter('module', 'api_documentation')->
+  isRequestParameter('action', 'index')->
+  checkResponseElement('body', '!/This is a temporary page/')
+;
diff --git a/website/test/functional/frontend/mainActionsTest.php b/website/test/functional/frontend/mainActionsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..4010f667db5e5e3bb3840ca91e4dfa40f9a013af
--- /dev/null
+++ b/website/test/functional/frontend/mainActionsTest.php
@@ -0,0 +1,15 @@
+<?php
+
+include(dirname(__FILE__).'/../../bootstrap/functional.php');
+
+// create a new test browser
+$browser = new sfTestBrowser();
+$browser->initialize();
+
+$browser->
+  get('/main/index')->
+  isStatusCode(200)->
+  isRequestParameter('module', 'main')->
+  isRequestParameter('action', 'index')->
+  checkResponseElement('body', '!/This is a temporary page/')
+;
diff --git a/website/test/functional/frontend/manualActionsTest.php b/website/test/functional/frontend/manualActionsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..43bf640f82bbcd66984a067165f74cc356899deb
--- /dev/null
+++ b/website/test/functional/frontend/manualActionsTest.php
@@ -0,0 +1,15 @@
+<?php
+
+include(dirname(__FILE__).'/../../bootstrap/functional.php');
+
+// create a new test browser
+$browser = new sfTestBrowser();
+$browser->initialize();
+
+$browser->
+  get('/manual/index')->
+  isStatusCode(200)->
+  isRequestParameter('module', 'manual')->
+  isRequestParameter('action', 'index')->
+  checkResponseElement('body', '!/This is a temporary page/')
+;
diff --git a/website/web/.htaccess b/website/web/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..2c0a59f85085869ed7ca930e531c6a143dee82e9
--- /dev/null
+++ b/website/web/.htaccess
@@ -0,0 +1,25 @@
+Options +FollowSymLinks +ExecCGI
+
+<IfModule mod_rewrite.c>
+  RewriteEngine On
+
+  # uncomment the following line, if you are having trouble
+  # getting no_script_name to work
+  #RewriteBase /
+
+  # we skip all files with .something
+  RewriteCond %{REQUEST_URI} \..+$
+  RewriteCond %{REQUEST_URI} !\.html$
+  RewriteRule .* - [L]
+
+  # we check if the .html version is here (caching)
+  RewriteRule ^$ index.html [QSA]
+  RewriteRule ^([^.]+)$ $1.html [QSA]
+  RewriteCond %{REQUEST_FILENAME} !-f
+
+  # no, so we redirect to our front web controller
+  RewriteRule ^(.*)$ index.php [QSA,L]
+</IfModule>
+
+# big crash from our front web controller
+ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"
diff --git a/website/web/backend.php b/website/web/backend.php
new file mode 100644
index 0000000000000000000000000000000000000000..1526292cea8046c408158ee101c7565d44179d30
--- /dev/null
+++ b/website/web/backend.php
@@ -0,0 +1,10 @@
+<?php
+
+define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
+define('SF_APP',         'backend');
+define('SF_ENVIRONMENT', 'prod');
+define('SF_DEBUG',       false);
+
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+sfContext::getInstance()->getController()->dispatch();
diff --git a/website/web/backend_dev.php b/website/web/backend_dev.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef1c27af0cd721f57d7228f40246e53b1f353477
--- /dev/null
+++ b/website/web/backend_dev.php
@@ -0,0 +1,10 @@
+<?php
+
+define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
+define('SF_APP',         'backend');
+define('SF_ENVIRONMENT', 'dev');
+define('SF_DEBUG',       true);
+
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+sfContext::getInstance()->getController()->dispatch();
diff --git a/website/web/css/api_documentation.css b/website/web/css/api_documentation.css
new file mode 100644
index 0000000000000000000000000000000000000000..774776f1840073d8e7abfbe0eddc72b318284840
--- /dev/null
+++ b/website/web/css/api_documentation.css
@@ -0,0 +1,129 @@
+a.menu{ background-color: transparent; color: #333333; }
+dd { margin-left: 0px; padding-left: 1em; }
+div.credit{ font-size: 8pt; text-align: center; }
+div.description,div.tags,div.function{ padding-left: 15px; }
+div.header-top-right-subpackage{ background-color: #F5F5F5; color: #333333; font-size: 12pt; font-weight: bold; padding: 10px; text-align: right; }
+div.package{ padding-left: 5px; }
+div.warning{ background-color: transparent; color: #ff0000; }
+hr{ border-color: #483737; border-style: solid; height: 1px; margin-bottom: 10px; margin-top: 10px; }
+td{ font-size: 10pt; vertical-align: top; }
+td.class-overview{ padding: 2px; padding-left: 1em; }
+td.code{ background-color: #483737; color: #FFFFFF; padding-left: 3em; padding-right: 1em; text-indent: -2em; }
+td.code-border{ background-color: #333333; color: #000000; }
+td.header-line{ background-color: #333333; color: #ffffff; }
+td.header-menu{ background-color: #483737; color: #333333; font-size: 8pt; padding: 2px; padding-right: 5px; text-align: right; }
+td.header-top-left{ background-color: #F5F5F5; color: #333333; font-size: 16pt; font-weight: bold; padding: 10px; text-align: left; }
+td.header-top-right{ background-color: #F5F5F5; color: #333333; font-size: 16pt; font-weight: bold; padding: 10px; text-align: right; }
+td.indent { padding-left: 1em; }
+td.menu{ padding: 10px; border-right: 1px solid #CCCCCC; border-top: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC; }
+td.type,.folder-title,.method-result,.include-type{ font-style: italic; }
+.class-name { color: #000000; font-weight: bold; }
+.class-table { width: 100%; }
+.class-table-header { border-bottom: 1px dotted #666666; text-align: left; }
+.const-title { }
+.description{ color: #000000; }
+.detail,div.top,span.smalllinenumber{ font-size: 8pt; }
+.disabled{ color: #483737; font-style: italic; }
+.evenrow{ border: 1px solid #483737; color: #000000; margin-bottom: 1em; padding: .5em; }
+.include-title{ }
+.index-item-body { margin-bottom: .5em; margin-top: .5em; }
+.index-item-description { margin-top: .25em; }
+.index-item-details { font-size: 8pt; font-style: italic; font-weight: normal; }
+.index-letter { font-size: 12pt; }
+.index-letter-menu { margin: 1em; text-align: center; }
+.index-letter-section { background-color: #483737; border: 1px dotted #333333; margin-bottom: 1em; padding: .5em; }
+.index-letter-title { font-size: 12pt; font-weight: bold; }
+.info-box{ }
+.info-box-body{ border: 1px solid #483737; padding: .5em; }
+.info-box-title{ background-color: #483737; border: 1px solid #333333; color: #FFFFFF; font-size: 14pt; font-weight: normal; margin: 1em 0em 0em 0em; padding: .25em; }
+.line-number, .var-name-summary { font-size: 8pt; font-weight: bold; }
+.method-definition { font-size: 8pt; margin-bottom: .3em; padding-left: 1em; }
+.method-definition{ font-size: 8pt; margin-bottom: .3em; }
+.method-header{ }
+.method-result { color: #333333; font-size: 8pt; font-style: italic; }
+.method-signature{ color: #483737; font-size: 85%; margin: .5em 0em; }
+.nav-bar{ margin: 0em 0em 1em 0em; padding: .2em; text-align: right; white-space: nowrap; }
+.nav-button:active,
+.nav-button:focus,
+.nav-button:hover{ background-color: #dddddd; outline: 1px solid #999999; text-decoration: none; }
+.nav-button-disabled{ color: #999999; }
+.notes{ font-size: 8pt; font-style: italic; }
+.oddrow{ background-color: #F5F5F5; border: 1px solid #483737; color: #000000; margin-bottom: 1em; padding: .5em; }
+.package{ padding-left : 2em; }
+.package-details{ font-size: 85%; }
+.package-title{ border-bottom: 1px solid #000000; font-size: 14pt; font-weight: bold; }
+.page-body{ margin: auto; max-width: 800px; }
+.parameters{ list-style-type: square; margin-bottom: 0em; margin-left: 3em; margin-right: 1em; margin-top: 0em; padding-left: 0em; vertical-align: top; }
+.redefinitions{ font-size: 8pt; margin-left: 2em; padding-left: 0em; }
+.separator{ background-color: #483737; height: 1px; }
+.short-description{ color: #333333; font-weight: bold; }
+.src-code li, .php-src li, .php li, .listing li { list-style-type: decimal }
+/* This will not be executed by IE, so now we have a fix! */
+.php-src { font-family: 'Courier New', Courier, monospace; font-weight: normal; }
+.sub-package{ font-size: 120%; font-weight: bold; }
+.tags{ color: #333333; list-style-type: square; margin-bottom: 0em; margin-left: 3em; margin-right: 1em; margin-top: 0em; padding-left: 0em; vertical-align: top; }
+.tree dl { margin: 0px; }
+.tutorial{ border-color: #0066ff; border-width: thin; }
+.tutorial-nav-box{ background-color: #F5F5F5; border: 1px solid #999999; width: 100%; }
+.var-default{ }
+.var-summary-description { font-size: 8pt; font-weight: normal; color: #000000; }
+.var-description{ color: #000000; font-weight: normal; }
+.var-header{ }
+.var-name, .const-name, .method-title,.method-name,.include-name,.var-name,.field { font-weight: bold; }
+.var-summary,.method-summary{ font-size: 8pt;}
+.var-title{ margin-bottom: .3em; }
+.var-type{ color: #333333; font-style: italic; }
+.var-type-summary{ color: #333333; font-size: 8pt; font-style: italic; padding-left: 1em; }
+.warning{ color: #ff6600; }
+
+/* Syntax highlighting */
+
+.src-code { background-color: #f5f5f5; border: 1px solid #483737; padding: 1em; margin : 0px;
+            font-family: 'Courier New', Courier, monospace; font-weight: normal; }
+.src-line {  font-family: 'Courier New', Courier, monospace; font-weight: normal; }
+
+.src-comm { color: green; }
+.src-id {  }
+.src-inc { color: #0000FF; }
+.src-key { color: #0000FF; }
+.src-num { color: #CC0000; }
+.src-str { color: #66cccc; }
+.src-sym { font-weight: bold; }
+.src-var { }
+
+.src-php { font-weight: bold; }
+
+.src-doc { color: #009999 }
+.src-doc-close-template { color: #0000FF }
+.src-doc-coretag { color: #0099FF; font-weight: bold }
+.src-doc-inlinetag { color: #0099FF }
+.src-doc-internal { color: #6699cc }
+.src-doc-tag { color: #0080CC }
+.src-doc-template { color: #0000FF }
+.src-doc-type { font-style: italic }
+.src-doc-var { font-style: italic }
+
+.tute-tag { color: #009999 }
+.tute-attribute-name { color: #0000FF }
+.tute-attribute-value { color: #0099FF }
+.tute-entity { font-weight: bold; }
+.tute-comment { font-style: italic }
+.tute-inline-tag { color: #636311; font-weight: bold }
+
+/* tutorial */
+
+.authors {  }
+.author { font-style: italic; font-weight: bold }
+.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal }
+.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; }
+.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; }
+.release-info { font-size: 85%; font-style: italic; margin: 1em 0em }
+.ref-title-box {  }
+.ref-title {  }
+.ref-purpose { font-style: italic; color: #666666 }
+.ref-synopsis {  }
+.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #F5F5F5;
+	 color: #333333; }
+.cmd-synopsis { margin: 1em 0em }
+.cmd-title { font-weight: bold }
+.toc { margin-left: 2em; padding-left: 0em }
\ No newline at end of file
diff --git a/website/web/css/layout.css b/website/web/css/layout.css
new file mode 100644
index 0000000000000000000000000000000000000000..55b93a2a63609d6db6003bddddf3a67b418b7679
--- /dev/null
+++ b/website/web/css/layout.css
@@ -0,0 +1,131 @@
+body
+{
+  position: absolute;
+  height: 100%;
+}
+
+#wrapper
+{
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+
+#wrapper #header
+{
+  height: 75px;
+  background: #483737 url(../images/header_bg.png) repeat-x top left;
+  border-bottom: 1px solid #333333;
+}
+
+#wrapper #header h1
+{
+  color: #FFFFFF;
+  font-size: 26px;
+  font-weight: bold;
+  margin-left: 25px;
+  padding-top: 10px;
+}
+
+#wrapper #header h1 a
+{
+  color: white;
+}
+
+#wrapper #header h2
+{
+  color: #908A8A;
+  margin-left: 25px;
+  font-size: 14px;
+}
+
+#wrapper #menu
+{
+  position: absolute;
+  top: 50px;
+  right: 5px;
+}
+
+#wrapper #menu ul
+{
+  list-style: none;
+}
+
+#wrapper #menu ul li
+{
+  font-size: 14px;
+  font-weight: bold;
+  float: left;
+  border-right: 2px solid #D75C0C;
+  padding-right: 6px;
+  padding-left: 6px;
+}
+
+#wrapper #menu ul li#last
+{
+  border: 0px;
+}
+
+#wrapper #menu ul li a
+{
+  color: white;
+}
+
+#wrapper #left
+{
+  float: left;
+  width: 10px;
+  height: 100%;
+  background: #AA0000;
+  background: #AA0000 url(../images/right_bg.png) repeat-x top left;
+  border-right: 1px solid #333333;
+}
+
+#wrapper #right
+{
+  padding: 15px;
+  float: right;
+  width: 225px;
+  min-height: 300px;
+  background: #AA0000 url(../images/right_bg.png) repeat-x top left;
+  color: #FFFFFF;
+  border-left: 1px solid #333333;
+  border-bottom: 1px solid #333333;
+  margin-left: 20px;
+  font-size: 12px;
+}
+
+#wrapper #right a
+{
+  color: #FFFFFF;
+}
+
+#wrapper #right ul
+{
+  list-style: square;
+  margin-left: 5px;
+}
+
+#wrapper #content
+{
+  background: #FFFFFF url(../images/content_bg.png) repeat-x top left;
+  min-height: 300px;
+  margin-left: 10px;
+  padding: 15px;
+}
+
+#wrapper #footer
+{
+  background: #483737;
+  height: 30px;
+  clear: both;
+}
+
+#wrapper #footer h1
+{
+  color: white;
+  font-size: 12px;
+  font-weight: bold;
+  text-align: center;
+  padding-top: 8px;
+}
\ No newline at end of file
diff --git a/website/web/css/main.css b/website/web/css/main.css
new file mode 100644
index 0000000000000000000000000000000000000000..c198e11887694e31c64f6b123cd98336b08cfc1d
--- /dev/null
+++ b/website/web/css/main.css
@@ -0,0 +1,22 @@
+ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input
+{ margin: 0; padding: 0; }
+a img,:link img,:visited img { border: none; }
+
+a
+{
+  text-decoration: none;
+}
+
+a:hover
+{
+  text-decoration: underline;
+}
+
+body, td
+{
+  margin: 0;
+  padding: 0;
+  font-family: Arial, Verdana, sans-serif;
+  font-size: 11px;
+  background-color: #fff;
+}
\ No newline at end of file
diff --git a/website/web/css/manual.css b/website/web/css/manual.css
new file mode 100644
index 0000000000000000000000000000000000000000..ae4990e6a2a3cc05fc704ead77731a70a06d2a32
--- /dev/null
+++ b/website/web/css/manual.css
@@ -0,0 +1,202 @@
+#manual h1, #manual h2, #manual h3, #manual h4, #manual h5, #manual h6 {
+    font-family: "Nimbus Sans L", "Arial", sans-serif;
+    border-bottom: 1px solid #aaaaaa;
+    line-height: 1.5em;
+    padding-bottom: 0.1em;
+}
+
+#manual h1 {
+    font-size: 2em;
+    margin-bottom: 1em;
+    margin-top: 0;
+}
+
+#manual h2 {
+    font-size: 1.5em;
+    text-align: left;
+    margin: 0.67em 0;
+}
+
+#manual h3 {
+    font-size: 1.17em;
+    margin: 1em 0;
+}
+
+#manual h4 {
+    font-size: 1em;
+    margin: 1.33em 0;
+}
+
+#manual .chapter + #manual .chapter {
+    margin-top: 3em;
+}
+
+#manual p, #manual ul, #manual ol, #manual dl {
+    line-height: 1.5em;
+    text-align: justify;
+    font-size: small;
+}
+
+#manual dd {
+    margin-bottom: 0.5em;
+}
+
+#manual table {
+    border: 1px solid #aaaaaa;
+    border-collapse: collapse;
+    margin: 0.5em 0;
+    color: black;
+    background-color: #f9f9f9;
+    line-height: 1.5em;
+    font-size: small;
+}
+
+#manual td, #manual th {
+    padding: 0.2em;
+    border: 1px solid #aaaaaa;
+}
+
+#manual th {
+    color: black;
+    background-color: #f2f2f2;
+}
+
+/*** Code blocks and highlighting**********************************************/
+
+#manual pre, #manual code, #manual tt {
+    font-family: "Bitstream Vera Sans Mono", "Courier New" monospace;
+    font-size: small;
+}
+
+#manual pre {
+    font-weight: bold;
+    padding: 1em;
+    margin: 1em 0;
+    line-height: 1.2em;
+    color: black;
+    background-color: #f7f7f7;
+    border: 1px solid #d7d7d7;
+    
+    /* Pup's Box Flow Hack, Rev 2 */
+    overflow/**/: auto;
+    \height: 1%;
+}
+
+/* This rule applies only to Firefox */
+#manual pre, x:-moz-any-link {
+    /* overflow: auto causes artefacts */
+    overflow: hidden;
+    
+    /* prevents text to be hidden by wrapping it */
+    white-space: -moz-pre-wrap !important;  
+}
+
+#manual pre .default {
+    color: #000000;
+    font-weight: bold;
+    background-color: inherit;
+}
+
+#manual pre .keyword {
+    color: #778899;
+    font-weight: bold;
+    background-color: inherit;
+}
+
+#manual pre .string {
+    color: #bb8844;
+    font-weight: normal;
+    background-color: inherit;
+}
+
+#manual pre .comment {
+    color: #999988;
+    font-style: italic;
+    font-weight: bold;
+    background-color: inherit;
+}
+
+/** Tree specific styles ******************************************************/
+
+ul.tree, ul.tree ul {
+    list-style-type: none;
+    padding-left: 1em;
+    text-align: left;
+    margin: 0;
+    font-size: 1em;
+}
+
+ul.tree {
+    margin-top: 1em;
+}
+
+.tree a {
+    text-decoration: none;
+    margin: 0;
+    padding: 0;
+}
+
+.tree .expander {
+    color: black;
+    background-color: inherit;
+    display: block;
+    float: left;
+    margin: 0;
+    border: none;
+    margin-left: -1.5em;
+    padding: 0;
+    text-align: center;
+    width: 1em;
+}
+
+.tree .expander:link,
+.tree .expander:visited,
+.tree .expander:active,
+.tree .expander:hover {
+    color: black;
+    background-color: inherit;
+    text-decoration: none;
+}
+
+.tree ul.closed {
+    display: none;
+}
+
+/** Table of Contents *********************************************************/
+
+#table-of-contents {
+    border: 1px solid #d9d9d3;
+    color: black;
+    background-color: #F7F7F0;
+    padding: 1em;
+    margin: 0;
+}
+
+#table-of-contents p,
+#table-of-contents ul.tree {
+    font-size: small;
+}
+
+#table-of-contents p {
+    margin-bottom: 0;
+}
+
+#table-of-contents h1 {
+    display: block;
+    font-size: 1.5em;
+    margin-right: 0.5em;
+    margin-bottom: 0;
+    text-align: left;
+    border: none;
+}
+
+#toc-toggles {
+    margin: 0;
+    padding: 0;
+    text-align: right;
+    font-size: small;
+}
+
+#toc-toggles a {
+    margin-left: 0.5em;
+}
\ No newline at end of file
diff --git a/website/web/css/manual_iefix.css b/website/web/css/manual_iefix.css
new file mode 100644
index 0000000000000000000000000000000000000000..c6ee16318ebcf939a8e3325923b2f0ee41be917f
--- /dev/null
+++ b/website/web/css/manual_iefix.css
@@ -0,0 +1,15 @@
+.tree .expander {
+    margin-left: -0.60em;
+}
+
+pre {
+	word-wrap: break-word;
+}
+
+
+div#wrap.sticky-toc #sidebar {
+    /* IE5.5+/Win - this is more specific than the IE 5.0 version */
+    top: expression(eval(document.documentElement.scrollTop));
+    height: expression(eval(document.documentElement.clientHeight - 32));
+}
+
diff --git a/website/web/css/manual_print.css b/website/web/css/manual_print.css
new file mode 100644
index 0000000000000000000000000000000000000000..4394ded9606e2c9bba9e4d306ea48feb9f9a1127
--- /dev/null
+++ b/website/web/css/manual_print.css
@@ -0,0 +1,129 @@
+@page {
+  size: a4 portrait;
+  margin: 20mm;
+  padding: 5mm 0;
+  border-top: thin solid black;
+  border-bottom: thin solid black;
+  @top-left {
+    font-size: 10pt;
+    vertical-align: bottom;
+    margin: 2mm
+  }
+  @top-right {
+    font-size: 10pt;
+    vertical-align: bottom;
+    margin: 2mm
+  }
+  @bottom {
+    font-size: 10pt;
+    content: counter(page);
+    vertical-align: top;
+    text-align: outside;
+    margin: 2mm
+  }
+}
+
+@page :left {
+  @top-left {
+    content: "Doctrine Manual";
+  }
+  @top-right {
+    content: "";
+  }
+}
+
+@page :right {
+  @top-right {
+    content: "Doctrine Manual";
+  }
+  @top-left {
+    content: "";
+  }
+}
+
+* { 
+    text-decoration: none;
+}
+
+html, body {
+	font-family: "Helvetica", "Arial", sans-serif;
+	font-size: 11pt;
+	padding: 0;
+	margin: 0;
+}
+
+.chapter, #table-of-contents {
+	page-break-after: always;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    page-break-after: avoid;
+}
+
+h1 {
+	text-align: center;
+}
+
+p, ul, ol, dl {
+	text-align: justify;
+	line-height: 1.2em;
+	hyphens: auto;
+}
+
+ul {
+	list-style-type: square;
+}
+
+tt {
+	font-family: "Bitstream Vera Sans Mono", monospace;
+	font-size: 10pt;
+}
+
+pre {
+	background-color: #eeeeee;
+}
+
+table {
+	border: thin solid black;
+	border-collapse: collapse;
+}
+
+td, th {
+	border: thin solid black;
+	padding: 0.5em;
+}
+
+.expander {
+	display: none;
+}
+
+a {
+	text-decoration: none;
+	font: inherit;
+	color: inherit;
+}
+
+#toc-toggles {
+    display: none;
+}
+
+#table-of-contents ul {
+	list-style-type: none;
+    font-weight: bold;
+}
+
+#table-of-contents ul, #table-of-contents li  {
+    margin-left: 0;
+}
+
+#table-of-contents ul ul {
+    margin-left: 1em;
+    font-weight: normal;
+}
+
+/* add page numbers to TOC */
+
+#table-of-contents ul a::after {
+    content: leader('.') target-counter(attr(href), page);
+}
+
diff --git a/website/web/frontend_dev.php b/website/web/frontend_dev.php
new file mode 100644
index 0000000000000000000000000000000000000000..27b5b5842dc97da82432e2919c6b00e7b3e802f5
--- /dev/null
+++ b/website/web/frontend_dev.php
@@ -0,0 +1,10 @@
+<?php
+
+define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
+define('SF_APP',         'frontend');
+define('SF_ENVIRONMENT', 'dev');
+define('SF_DEBUG',       true);
+
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+sfContext::getInstance()->getController()->dispatch();
diff --git a/website/web/images/content_bg.png b/website/web/images/content_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e7cbdb362d48eb592954828dcecad757601facb
Binary files /dev/null and b/website/web/images/content_bg.png differ
diff --git a/website/web/images/header_bg.png b/website/web/images/header_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e70a650e9ad7d1410dbbae8f691c0a4d5a174f8
Binary files /dev/null and b/website/web/images/header_bg.png differ
diff --git a/website/web/images/right_bg.png b/website/web/images/right_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..c83f25c052749bb3b13f0c4319525ed6ab7e4635
Binary files /dev/null and b/website/web/images/right_bg.png differ
diff --git a/website/web/index.php b/website/web/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..a72e6f1c2eae475ac09801e472015765e01c61c3
--- /dev/null
+++ b/website/web/index.php
@@ -0,0 +1,10 @@
+<?php
+
+define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
+define('SF_APP',         'frontend');
+define('SF_ENVIRONMENT', 'prod');
+define('SF_DEBUG',       false);
+
+require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
+
+sfContext::getInstance()->getController()->dispatch();
diff --git a/website/web/js/manual_toc.js b/website/web/js/manual_toc.js
new file mode 100644
index 0000000000000000000000000000000000000000..98fef94a761c26721e174f8a84c1aaab6ef457c2
--- /dev/null
+++ b/website/web/js/manual_toc.js
@@ -0,0 +1,76 @@
+function initializeTocToggles()
+{
+    var container = new Element('div', {
+        'id': 'toc-toggles'
+    });
+
+    container.injectTop($('table-of-contents'));
+    $('table-of-contents').setStyle('padding-top', '0');
+    
+    var hideToggle = new Element('a', {
+        'href': 'javascript:void(0);',
+        'events': {
+            'click': function() {
+                var toc = $E('ul', 'table-of-contents');
+
+                if (toc.getStyle('display') == 'none') {
+                    this.setHTML(tocHideText);
+                    toc.setStyle('display', 'block');
+                    stickyToggle.setStyle('display', 'inline');
+                    Cookie.set('hidetoc', 0, {duration: 1000});
+                } else {
+                    this.setHTML(tocShowText);
+                    toc.setStyle('display', 'none');
+                    stickyToggle.setStyle('display', 'none');
+                    Cookie.set('hidetoc', 1, {duration: 1000});
+                }
+            }
+        }
+    });
+    
+    var stickyToggle = new Element('a', {
+        'href': 'javascript:void(0);',
+        'events': {
+            'click': function() {
+                var wrap = $('wrap');
+                
+                if ( ! wrap.hasClass('sticky-toc')) {
+                    this.setHTML(tocUnstickyText);
+                    wrap.addClass('sticky-toc');
+                    hideToggle.setStyle('display', 'none');
+                    Cookie.set('stickytoc', 1, {duration: 1000});
+                } else {
+                    this.setHTML(tocStickyText);
+                    wrap.removeClass('sticky-toc');
+                    hideToggle.setStyle('display', 'inline');
+                    Cookie.set('stickytoc', 0, {duration: 1000});
+                }
+            }
+        }
+    });
+    
+    hideToggle.setHTML(tocHideText);
+    hideToggle.injectInside(container);
+    
+    stickyToggle.setHTML(tocStickyText);
+    stickyToggle.injectInside(container);
+    
+    if (Cookie.get('hidetoc') == 1) {
+        hideToggle.fireEvent('click');
+        stickyToggle.setStyle('display', 'none');
+    }
+    
+    if (Cookie.get('stickytoc') == 1) {
+        stickyToggle.fireEvent('click');
+        hideToggle.setStyle('display', 'none');
+    }
+}
+
+window.addEvent('domready', function() {
+    initializeTocToggles();
+});
+
+window.addEvent('domready', function() {
+    new SmoothScroll();
+});
+
diff --git a/website/web/js/manual_tree.js b/website/web/js/manual_tree.js
new file mode 100644
index 0000000000000000000000000000000000000000..a98fd6e6b24e8b53db0575b5fa267492484a9aa8
--- /dev/null
+++ b/website/web/js/manual_tree.js
@@ -0,0 +1,33 @@
+function initializeTrees(symbolClosed, symbolOpen)
+{
+    $$('ul.tree li').each(function(listItem) {
+    
+        var subTree = listItem.getChildren().filterByTag('ul')[0];
+        
+        if (subTree) {
+        
+            var expander = new Element('a', {
+                'class': 'expander',
+                'href': 'javascript:void(0);',
+                'events': {
+                    'click': function() {
+                        if (subTree.hasClass('closed')) {
+                            subTree.removeClass('closed');
+                            this.setHTML(symbolOpen);
+                        } else {
+                            subTree.addClass('closed');
+                            this.setHTML(symbolClosed);
+                        }
+                    }
+                }
+            });
+            
+            expander.setHTML(subTree.hasClass('closed') ? symbolClosed : symbolOpen);
+            expander.injectTop(listItem);
+        }
+    });
+}
+
+window.addEvent('domready', function() {
+    initializeTrees('+', '-');
+});
diff --git a/website/web/js/mootools.v1.11.js b/website/web/js/mootools.v1.11.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e4510db77769d649a2e40f759c0f0c090408869
--- /dev/null
+++ b/website/web/js/mootools.v1.11.js
@@ -0,0 +1,3 @@
+//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
+
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('m 7X={7Y:\'1.11\'};h $3q(R){c(R!=6N)};h $q(R){k(!$3q(R))c P;k(R.2R)c\'W\';m q=3Q R;k(q==\'2a\'&&R.7W){1C(R.4Z){Q 1:c\'W\';Q 3:c(/\\S/).2e(R.6u)?\'7V\':\'7T\'}}k(q==\'2a\'||q==\'h\'){1C(R.5u){Q 1r:c\'15\';Q 4F:c\'53\';Q 1f:c\'4o\'}k(3Q R.H==\'3U\'){k(R.1V)c\'7U\';k(R.6o)c\'M\'}}c q};h $21(){m 3h={};G(m i=0;i<M.H;i++){G(m t 1g M[i]){m ap=M[i][t];m 3j=3h[t];k(3j&&$q(ap)==\'2a\'&&$q(3j)==\'2a\')3h[t]=$21(3j,ap);T 3h[t]=ap}}c 3h};m $N=h(){m U=M;k(!U[1])U=[7,U[0]];G(m t 1g U[1])U[0][t]=U[1][t];c U[0]};m $2P=h(){G(m i=0,l=M.H;i<l;i++){M[i].N=h(1e){G(m 1j 1g 1e){k(!7.1c[1j])7.1c[1j]=1e[1j];k(!7[1j])7[1j]=$2P.3w(1j)}}}};$2P.3w=h(1j){c h(J){c 7.1c[1j].2O(J,1r.1c.6B.1H(M,1))}};$2P(4q,1r,4L,7c);h $33(R){c!!(R||R===0)};h $49(R,5t){c $3q(R)?R:5t};h $4w(2y,1L){c 1z.7Z(1z.4w()*(1L-2y+1)+2y)};h $28(){c V 5P().5H()};h $4C(1K){80(1K);85(1K);c 1d};m 2s=h(R){R=R||{};R.N=$N;c R};m 86=V 2s(C);m 84=V 2s(F);F.74=F.2n(\'74\')[0];C.2h=!!(F.6l);k(C.83)C.1I=C[C.81?\'82\':\'6F\']=12;T k(F.5U&&!F.7S&&!7R.7H)C.2C=C[C.2h?\'7I\':\'3S\']=12;T k(F.7G!=1d)C.52=12;C.7F=C.2C;7C.N=$N;k(3Q 3g==\'6N\'){m 3g=h(){};k(C.2C)F.7a("7D");3g.1c=(C.2C)?C["[[7E.1c]]"]:{}}3g.1c.2R=h(){};k(C.6F)4U{F.7J("7K",P,12)}4T(e){};m 1f=h(1S){m 3a=h(){c(M[0]!==1d&&7.1O&&$q(7.1O)==\'h\')?7.1O.2O(7,M):7};$N(3a,7);3a.1c=1S;3a.5u=1f;c 3a};1f.2j=h(){};1f.1c={N:h(1S){m 3i=V 7(1d);G(m t 1g 1S){m 6d=3i[t];3i[t]=1f.64(6d,1S[t])}c V 1f(3i)},6r:h(){G(m i=0,l=M.H;i<l;i++)$N(7.1c,M[i])}};1f.64=h(2o,1l){k(2o&&2o!=1l){m q=$q(1l);k(q!=$q(2o))c 1l;1C(q){Q\'h\':m 4n=h(){7.1B=M.6o.1B;c 1l.2O(7,M)};4n.1B=2o;c 4n;Q\'2a\':c $21(2o,1l)}}c 1l};m 6p=V 1f({7P:h(B){7.2t=7.2t||[];7.2t.14(B);c 7},7n:h(){k(7.2t&&7.2t.H)7.2t.6g().1v(10,7)},7Q:h(){7.2t=[]}});m 1T=V 1f({1G:h(q,B){k(B!=1f.2j){7.$K=7.$K||{};7.$K[q]=7.$K[q]||[];7.$K[q].4r(B)}c 7},26:h(q,U,1v){k(7.$K&&7.$K[q]){7.$K[q].1t(h(B){B.1M({\'J\':7,\'1v\':1v,\'M\':U})()},7)}c 7},3V:h(q,B){k(7.$K&&7.$K[q])7.$K[q].2F(B);c 7}});m 6n=V 1f({7h:h(){7.u=$21.2O(1d,[7.u].N(M));k(7.1G){G(m 3c 1g 7.u){k($q(7.u[3c]==\'h\')&&(/^4E[A-Z]/).2e(3c))7.1G(3c,7.u[3c])}}c 7}});1r.N({3H:h(B,J){G(m i=0,j=7.H;i<j;i++)B.1H(J,7[i],i,7)},1X:h(B,J){m 2I=[];G(m i=0,j=7.H;i<j;i++){k(B.1H(J,7[i],i,7))2I.14(7[i])}c 2I},2c:h(B,J){m 2I=[];G(m i=0,j=7.H;i<j;i++)2I[i]=B.1H(J,7[i],i,7);c 2I},3x:h(B,J){G(m i=0,j=7.H;i<j;i++){k(!B.1H(J,7[i],i,7))c P}c 12},7N:h(B,J){G(m i=0,j=7.H;i<j;i++){k(B.1H(J,7[i],i,7))c 12}c P},2B:h(1V,19){m 2J=7.H;G(m i=(19<0)?1z.1L(0,2J+19):19||0;i<2J;i++){k(7[i]===1V)c i}c-1},6R:h(1u,H){1u=1u||0;k(1u<0)1u=7.H+1u;H=H||(7.H-1u);m 4v=[];G(m i=0;i<H;i++)4v[i]=7[1u++];c 4v},2F:h(1V){m i=0;m 2J=7.H;5h(i<2J){k(7[i]===1V){7.3K(i,1);2J--}T{i++}}c 7},Y:h(1V,19){c 7.2B(1V,19)!=-1},7L:h(1k){m R={},H=1z.2y(7.H,1k.H);G(m i=0;i<H;i++)R[1k[i]]=7[i];c R},N:h(15){G(m i=0,j=15.H;i<j;i++)7.14(15[i]);c 7},21:h(15){G(m i=0,l=15.H;i<l;i++)7.4r(15[i]);c 7},4r:h(1V){k(!7.Y(1V))7.14(1V);c 7},7M:h(){c 7[$4w(0,7.H-1)]||1d},62:h(){c 7[7.H-1]||1d}});1r.1c.1t=1r.1c.3H;1r.1t=1r.3H;h $A(15){c 1r.6R(15)};h $1t(2f,B,J){k(2f&&3Q 2f.H==\'3U\'&&$q(2f)!=\'2a\'){1r.3H(2f,B,J)}T{G(m 1q 1g 2f)B.1H(J||2f,2f[1q],1q)}};1r.1c.2e=1r.1c.Y;4L.N({2e:h(3E,6J){c(($q(3E)==\'23\')?V 4F(3E,6J):3E).2e(7)},3p:h(){c 36(7,10)},72:h(){c 4G(7)},4p:h(){c 7.2q(/-\\D/g,h(1D){c 1D.4g(1).6y()})},6E:h(){c 7.2q(/\\w[A-Z]/g,h(1D){c(1D.4g(0)+\'-\'+1D.4g(1).3L())})},71:h(){c 7.2q(/\\b[a-z]/g,h(1D){c 1D.6y()})},57:h(){c 7.2q(/^\\s+|\\s+$/g,\'\')},4K:h(){c 7.2q(/\\s{2,}/g,\' \').57()},3A:h(15){m 1Q=7.1D(/\\d{1,3}/g);c(1Q)?1Q.3A(15):P},4b:h(15){m 2G=7.1D(/^#?(\\w{1,2})(\\w{1,2})(\\w{1,2})$/);c(2G)?2G.6B(1).4b(15):P},Y:h(23,s){c(s)?(s+7+s).2B(s+23+s)>-1:7.2B(23)>-1},7m:h(){c 7.2q(/([.*+?^${}()|[\\]\\/\\\\])/g,\'\\\\$1\')}});1r.N({3A:h(15){k(7.H<3)c P;k(7.H==4&&7[3]==0&&!15)c\'88\';m 2G=[];G(m i=0;i<3;i++){m 2W=(7[i]-0).8u(16);2G.14((2W.H==1)?\'0\'+2W:2W)}c 15?2G:\'#\'+2G.1W(\'\')},4b:h(15){k(7.H!=3)c P;m 1Q=[];G(m i=0;i<3;i++){1Q.14(36((7[i].H==1)?7[i]+7[i]:7[i],16))}c 15?1Q:\'1Q(\'+1Q.1W(\',\')+\')\'}});4q.N({1M:h(u){m B=7;u=$21({\'J\':B,\'r\':P,\'M\':1d,\'1v\':P,\'2x\':P,\'3s\':P},u);k($33(u.M)&&$q(u.M)!=\'15\')u.M=[u.M];c h(r){m U;k(u.r){r=r||C.r;U=[(u.r===12)?r:V u.r(r)];k(u.M)U.N(u.M)}T U=u.M||M;m 25=h(){c B.2O($49(u.J,B),U)};k(u.1v)c 8t(25,u.1v);k(u.2x)c 8s(25,u.2x);k(u.3s)4U{c 25()}4T(8q){c P};c 25()}},8r:h(U,J){c 7.1M({\'M\':U,\'J\':J})},3s:h(U,J){c 7.1M({\'M\':U,\'J\':J,\'3s\':12})()},J:h(J,U){c 7.1M({\'J\':J,\'M\':U})},8w:h(J,U){c 7.1M({\'J\':J,\'r\':12,\'M\':U})},1v:h(1v,J,U){c 7.1M({\'1v\':1v,\'J\':J,\'M\':U})()},2x:h(7l,J,U){c 7.1M({\'2x\':7l,\'J\':J,\'M\':U})()}});7c.N({3p:h(){c 36(7)},72:h(){c 4G(7)},6Q:h(2y,1L){c 1z.2y(1L,1z.1L(2y,7))},4W:h(3e){3e=1z.8x(10,3e||0);c 1z.4W(7*3e)/3e},8D:h(B){G(m i=0;i<7;i++)B(i)}});m v=V 1f({1O:h(o,1e){k($q(o)==\'23\'){k(C.1I&&1e&&(1e.1q||1e.q)){m 1q=(1e.1q)?\' 1q="\'+1e.1q+\'"\':\'\';m q=(1e.q)?\' q="\'+1e.q+\'"\':\'\';4S 1e.1q;4S 1e.q;o=\'<\'+o+1q+q+\'>\'}o=F.7a(o)}o=$(o);c(!1e||!o)?o:o.2r(1e)}});m 1m=V 1f({1O:h(I){c(I)?$N(I,7):7}});1m.N=h(1e){G(m 1j 1g 1e){7.1c[1j]=1e[1j];7[1j]=$2P.3w(1j)}};h $(o){k(!o)c 1d;k(o.2R)c 1s.2U(o);k([C,F].Y(o))c o;m q=$q(o);k(q==\'23\'){o=F.3m(o);q=(o)?\'W\':P}k(q!=\'W\')c 1d;k(o.2R)c 1s.2U(o);k([\'2a\',\'8B\'].Y(o.3l.3L()))c o;$N(o,v.1c);o.2R=h(){};c 1s.2U(o)};F.3k=F.2n;h $$(){m I=[];G(m i=0,j=M.H;i<j;i++){m 1b=M[i];1C($q(1b)){Q\'W\':I.14(1b);Q\'7B\':1i;Q P:1i;Q\'23\':1b=F.3k(1b,12);4D:I.N(1b)}}c $$.3b(I)};$$.3b=h(15){m I=[];G(m i=0,l=15.H;i<l;i++){k(15[i].$3r)6m;m W=$(15[i]);k(W&&!W.$3r){W.$3r=12;I.14(W)}}G(m n=0,d=I.H;n<d;n++)I[n].$3r=1d;c V 1m(I)};1m.5K=h(t){c h(){m U=M;m X=[];m I=12;G(m i=0,j=7.H,25;i<j;i++){25=7[i][t].2O(7[i],U);k($q(25)!=\'W\')I=P;X.14(25)};c(I)?$$.3b(X):X}};v.N=h(1S){G(m t 1g 1S){3g.1c[t]=1S[t];v.1c[t]=1S[t];v[t]=$2P.3w(t);m 5L=(1r.1c[t])?t+\'1m\':t;1m.1c[5L]=1m.5K(t)}};v.N({2r:h(1e){G(m 1j 1g 1e){m 35=1e[1j];1C(1j){Q\'8p\':7.67(35);1i;Q\'K\':k(7.51)7.51(35);1i;Q\'1S\':7.6K(35);1i;4D:7.3v(1j,35)}}c 7},2V:h(o,5G){o=$(o);1C(5G){Q\'5y\':o.1Y.4V(7,o);1i;Q\'5E\':m 30=o.6b();k(!30)o.1Y.4A(7);T o.1Y.4V(7,30);1i;Q\'2d\':m 4M=o.5q;k(4M){o.4V(7,4M);1i}4D:o.4A(7)}c 7},8e:h(o){c 7.2V(o,\'5y\')},8f:h(o){c 7.2V(o,\'5E\')},8d:h(o){c 7.2V(o,\'5j\')},8c:h(o){c 7.2V(o,\'2d\')},89:h(){m I=[];$1t(M,h(5V){I=I.5c(5V)});$$(I).2V(7);c 7},2F:h(){c 7.1Y.7g(7)},8a:h(6h){m o=$(7.8b(6h!==P));k(!o.$K)c o;o.$K={};G(m q 1g 7.$K)o.$K[q]={\'1k\':$A(7.$K[q].1k),\'1o\':$A(7.$K[q].1o)};c o.3F()},8g:h(o){o=$(o);7.1Y.8h(o,7);c o},5z:h(22){7.4A(F.8m(22));c 7},4I:h(17){c 7.17.Y(17,\' \')},6a:h(17){k(!7.4I(17))7.17=(7.17+\' \'+17).4K();c 7},65:h(17){7.17=7.17.2q(V 4F(\'(^|\\\\s)\'+17+\'(?:\\\\s|$)\'),\'$1\').4K();c 7},8n:h(17){c 7.4I(17)?7.65(17):7.6a(17)},6z:h(t,O){1C(t){Q\'1J\':c 7.66(4G(O));Q\'8l\':t=(C.1I)?\'8k\':\'8i\'}t=t.4p();1C($q(O)){Q\'3U\':k(![\'8j\',\'6j\'].Y(t))O+=\'4t\';1i;Q\'15\':O=\'1Q(\'+O.1W(\',\')+\')\'}7.1a[t]=O;c 7},67:h(2g){1C($q(2g)){Q\'2a\':v.3J(7,\'6z\',2g);1i;Q\'23\':7.1a.4j=2g}c 7},66:h(1J){k(1J==0){k(7.1a.3y!="68")7.1a.3y="68"}T{k(7.1a.3y!="6f")7.1a.3y="6f"}k(!7.3z||!7.3z.7u)7.1a.6j=1;k(C.1I)7.1a.1X=(1J==1)?\'\':"7s(1J="+1J*7t+")";7.1a.1J=7.$2i.1J=1J;c 7},2D:h(t){t=t.4p();m 18=7.1a[t];k(!$33(18)){k(t==\'1J\')c 7.$2i.1J;18=[];G(m 1a 1g v.2N){k(t==1a){v.2N[1a].1t(h(s){m 1a=7.2D(s);18.14(36(1a)?1a:\'79\')},7);k(t==\'2p\'){m 3x=18.3x(h(2W){c(2W==18[0])});c(3x)?18[0]:P}c 18.1W(\' \')}}k(t.Y(\'2p\')){k(v.2N.2p.Y(t)){c[\'75\',\'7p\',\'7y\'].2c(h(p){c 7.2D(t+p)},7).1W(\' \')}T k(v.5W.Y(t)){c[\'5I\',\'5O\',\'5w\',\'5D\'].2c(h(p){c 7.2D(\'2p\'+p+t.2q(\'2p\',\'\'))},7).1W(\' \')}}k(F.6I)18=F.6I.7x(7,1d).7v(t.6E());T k(7.3z)18=7.3z[t]}k(C.1I)18=v.7e(t,18,7);k(18&&t.2e(/5d/i)&&18.Y(\'1Q\')){c 18.56(\'1Q\').3K(1,4).2c(h(5d){c 5d.3A()}).1W(\' \')}c 18},7A:h(){c v.4y(7,\'2D\',M)},2Z:h(3B,1u){3B+=\'7r\';m o=(1u)?7[1u]:7[3B];5h(o&&$q(o)!=\'W\')o=o[3B];c $(o)},8J:h(){c 7.2Z(\'2o\')},6b:h(){c 7.2Z(\'30\')},af:h(){c 7.2Z(\'30\',\'5q\')},62:h(){c 7.2Z(\'2o\',\'9F\')},9H:h(){c $(7.1Y)},9K:h(){c $$(7.5U)},4i:h(o){c!!$A(7.2n(\'*\')).Y(o)},3I:h(t){m 29=v.3u[t];k(29)c 7[29];m 5b=v.63[t]||0;k(!C.1I||5b)c 7.a6(t,5b);m 59=7.9U[t];c(59)?59.6u:1d},aB:h(t){m 29=v.3u[t];k(29)7[29]=\'\';T 7.9Y(t);c 7},9X:h(){c v.4y(7,\'3I\',M)},3v:h(t,O){m 29=v.3u[t];k(29)7[29]=O;T 7.9W(t,O);c 7},6K:h(2g){c v.3J(7,\'3v\',2g)},6Z:h(){7.6U=$A(M).1W(\'\');c 7},9V:h(22){m 1R=7.2Y();k([\'1a\',\'2Q\'].Y(1R)){k(C.1I){k(1R==\'1a\')7.5M.4j=22;T k(1R==\'2Q\')7.3v(\'22\',22);c 7}T{7.7g(7.5q);c 7.5z(22)}}7[$3q(7.4c)?\'4c\':\'6Y\']=22;c 7},a0:h(){m 1R=7.2Y();k([\'1a\',\'2Q\'].Y(1R)){k(C.1I){k(1R==\'1a\')c 7.5M.4j;T k(1R==\'2Q\')c 7.3I(\'22\')}T{c 7.6U}}c($49(7.4c,7.6Y))},2Y:h(){c 7.3l.3L()},2j:h(){1s.3C(7.2n(\'*\'));c 7.6Z(\'\')}});v.7e=h(t,18,W){k($33(36(18)))c 18;k([\'5m\',\'34\'].Y(t)){m 1o=(t==\'34\')?[\'2l\',\'5i\']:[\'2d\',\'5j\'];m 2A=0;1o.1t(h(O){2A+=W.2D(\'2p-\'+O+\'-34\').3p()+W.2D(\'4O-\'+O).3p()});c W[\'5g\'+t.71()]-2A+\'4t\'}T k(t.2e(/2p(.+)75|7b|4O/)){c\'79\'}c 18};v.2N={\'2p\':[],\'4O\':[],\'7b\':[]};[\'5I\',\'5O\',\'5w\',\'5D\'].1t(h(5A){G(m 1a 1g v.2N)v.2N[1a].14(1a+5A)});v.5W=[\'a5\',\'a4\',\'a2\'];v.4y=h(o,2w,1k){m 18={};$1t(1k,h(1h){18[1h]=o[2w](1h)});c 18};v.3J=h(o,2w,4H){G(m 1h 1g 4H)o[2w](1h,4H[1h]);c o};v.3u=V 2s({\'4o\':\'17\',\'G\':\'a3\',\'9T\':\'8F\',\'9J\':\'9I\',\'9G\':\'9L\',\'9R\':\'9P\',\'9N\':\'9O\',\'a7\':\'a8\',\'at\':\'as\',\'O\':\'O\',\'5Y\':\'5Y\',\'5X\':\'5X\',\'5Z\':\'5Z\',\'61\':\'61\'});v.63={\'41\':2,\'3Y\':2};v.1P={3t:{2E:h(q,B){k(7.4R)7.4R(q,B,P);T 7.ar(\'4E\'+q,B);c 7},6X:h(q,B){k(7.6c)7.6c(q,B,P);T 7.ao(\'4E\'+q,B);c 7}}};C.N(v.1P.3t);F.N(v.1P.3t);v.N(v.1P.3t);m 1s={I:[],2U:h(o){k(!o.$2i){1s.I.14(o);o.$2i={\'1J\':1}}c o},3C:h(I){G(m i=0,j=I.H,o;i<j;i++){k(!(o=I[i])||!o.$2i)6m;k(o.$K)o.26(\'3C\').3F();G(m p 1g o.$2i)o.$2i[p]=1d;G(m d 1g v.1c)o[d]=1d;1s.I[1s.I.2B(o)]=1d;o.2R=o.$2i=o=1d}1s.I.2F(1d)},2j:h(){1s.2U(C);1s.2U(F);1s.3C(1s.I)}};C.2E(\'6L\',h(){C.2E(\'4f\',1s.2j);k(C.1I)C.2E(\'4f\',av)});m 1E=V 1f({1O:h(r){k(r&&r.$6e)c r;7.$6e=12;r=r||C.r;7.r=r;7.q=r.q;7.1Z=r.1Z||r.aA;k(7.1Z.4Z==3)7.1Z=7.1Z.1Y;7.6g=r.az;7.ay=r.aw;7.ax=r.an;7.am=r.ae;k([\'4e\',\'2S\'].Y(7.q)){7.ac=(r.5C)?r.5C/ab:-(r.a9||0)/3}T k(7.q.Y(\'1h\')){7.3M=r.5N||r.aa;G(m 1q 1g 1E.1k){k(1E.1k[1q]==7.3M){7.1h=1q;1i}}k(7.q==\'6V\'){m 3D=7.3M-ag;k(3D>0&&3D<13)7.1h=\'f\'+3D}7.1h=7.1h||4L.ak(7.3M).3L()}T k(7.q.2e(/(5p|aj|ah)/)){7.ai={\'x\':r.4X||r.5S+F.1F.3d,\'y\':r.4Y||r.5T+F.1F.3f};7.9Q={\'x\':r.4X?r.4X-C.5F:r.5S,\'y\':r.4Y?r.4Y-C.6i:r.5T};7.9D=(r.5N==3)||(r.90==2);1C(7.q){Q\'4d\':7.1n=r.1n||r.9E;1i;Q\'4a\':7.1n=r.1n||r.5k}7.73()}c 7},1U:h(){c 7.3N().3O()},3N:h(){k(7.r.3N)7.r.3N();T 7.r.8Z=12;c 7},3O:h(){k(7.r.3O)7.r.3O();T 7.r.8Y=P;c 7}});1E.3o={1n:h(){k(7.1n&&7.1n.4Z==3)7.1n=7.1n.1Y},70:h(){4U{1E.3o.1n.1H(7)}4T(e){7.1n=7.1Z}}};1E.1c.73=(C.52)?1E.3o.70:1E.3o.1n;1E.1k=V 2s({\'93\':13,\'97\':38,\'95\':40,\'2l\':37,\'5i\':39,\'8L\':27,\'8G\':32,\'8M\':8,\'8S\':9,\'4S\':46});v.1P.1T={1G:h(q,B){7.$K=7.$K||{};7.$K[q]=7.$K[q]||{\'1k\':[],\'1o\':[]};k(7.$K[q].1k.Y(B))c 7;7.$K[q].1k.14(B);m 3P=q;m 1p=v.1T[q];k(1p){k(1p.5l)1p.5l.1H(7,B);k(1p.2c)B=1p.2c;k(1p.q)3P=1p.q}k(!7.4R)B=B.1M({\'J\':7,\'r\':12});7.$K[q].1o.14(B);c(v.4h.Y(3P))?7.2E(3P,B):7},3V:h(q,B){k(!7.$K||!7.$K[q])c 7;m 3R=7.$K[q].1k.2B(B);k(3R==-1)c 7;m 1h=7.$K[q].1k.3K(3R,1)[0];m O=7.$K[q].1o.3K(3R,1)[0];m 1p=v.1T[q];k(1p){k(1p.2F)1p.2F.1H(7,B);k(1p.q)q=1p.q}c(v.4h.Y(q))?7.6X(q,O):7},51:h(2g){c v.3J(7,\'1G\',2g)},3F:h(q){k(!7.$K)c 7;k(!q){G(m 3G 1g 7.$K)7.3F(3G);7.$K=1d}T k(7.$K[q]){7.$K[q].1k.1t(h(B){7.3V(q,B)},7);7.$K[q]=1d}c 7},26:h(q,U,1v){k(7.$K&&7.$K[q]){7.$K[q].1k.1t(h(B){B.1M({\'J\':7,\'1v\':1v,\'M\':U})()},7)}c 7},6H:h(19,q){k(!19.$K)c 7;k(!q){G(m 3G 1g 19.$K)7.6H(19,3G)}T k(19.$K[q]){19.$K[q].1k.1t(h(B){7.1G(q,B)},7)}c 7}};C.N(v.1P.1T);F.N(v.1P.1T);v.N(v.1P.1T);v.1T=V 2s({\'6v\':{q:\'4d\',2c:h(r){r=V 1E(r);k(r.1n!=7&&!7.4i(r.1n))7.26(\'6v\',r)}},\'6x\':{q:\'4a\',2c:h(r){r=V 1E(r);k(r.1n!=7&&!7.4i(r.1n))7.26(\'6x\',r)}},\'2S\':{q:(C.52)?\'4e\':\'2S\'}});v.4h=[\'5p\',\'9v\',\'9t\',\'9r\',\'2S\',\'4e\',\'4d\',\'4a\',\'9w\',\'6V\',\'9x\',\'9B\',\'6D\',\'4f\',\'6L\',\'9A\',\'9y\',\'9z\',\'9p\',\'5J\',\'9o\',\'9f\',\'9g\',\'9e\',\'9d\',\'9b\',\'2M\'];4q.N({6s:h(J,U){c 7.1M({\'J\':J,\'M\':U,\'r\':1E})}});1m.N({9c:h(1R){c V 1m(7.1X(h(o){c(v.2Y(o)==1R)}))},6P:h(17,1w){m I=7.1X(h(o){c(o.17&&o.17.Y(17,\' \'))});c(1w)?I:V 1m(I)},6O:h(2u,1w){m I=7.1X(h(o){c(o.2u==2u)});c(1w)?I:V 1m(I)},6M:h(1q,4l,O,1w){m I=7.1X(h(o){m 1l=v.3I(o,1q);k(!1l)c P;k(!4l)c 12;1C(4l){Q\'=\':c(1l==O);Q\'*=\':c(1l.Y(O));Q\'^=\':c(1l.4u(0,O.H)==O);Q\'$=\':c(1l.4u(1l.H-O.H)==O);Q\'!=\':c(1l!=O);Q\'~=\':c 1l.Y(O,\' \')}c P});c(1w)?I:V 1m(I)}});h $E(1b,1X){c($(1X)||F).5R(1b)};h $9i(1b,1X){c($(1X)||F).3k(1b)};$$.20={\'53\':/^(\\w*|\\*)(?:#([\\w-]+)|\\.([\\w-]+))?(?:\\[(\\w+)(?:([!*^$]?=)["\']?([^"\'\\]]*)["\']?)?])?$/,\'2h\':{5o:h(X,1N,L,i){m 1y=[1N.9m?\'5a:\':\'\',L[1]];k(L[2])1y.14(\'[@2u="\',L[2],\'"]\');k(L[3])1y.14(\'[Y(5c(" ", @4o, " "), " \',L[3],\' ")]\');k(L[4]){k(L[5]&&L[6]){1C(L[5]){Q\'*=\':1y.14(\'[Y(@\',L[4],\', "\',L[6],\'")]\');1i;Q\'^=\':1y.14(\'[9l-9j(@\',L[4],\', "\',L[6],\'")]\');1i;Q\'$=\':1y.14(\'[9k(@\',L[4],\', 23-H(@\',L[4],\') - \',L[6].H,\' + 1) = "\',L[6],\'"]\');1i;Q\'=\':1y.14(\'[@\',L[4],\'="\',L[6],\'"]\');1i;Q\'!=\':1y.14(\'[@\',L[4],\'!="\',L[6],\'"]\')}}T{1y.14(\'[@\',L[4],\']\')}}X.14(1y.1W(\'\'));c X},55:h(X,1N,1w){m I=[];m 2h=F.6l(\'.//\'+X.1W(\'//\'),1N,$$.20.6S,91.9n,1d);G(m i=0,j=2h.9h;i<j;i++)I.14(2h.9q(i));c(1w)?I:V 1m(I.2c($))}},\'7o\':{5o:h(X,1N,L,i){k(i==0){k(L[2]){m o=1N.3m(L[2]);k(!o||((L[1]!=\'*\')&&(v.2Y(o)!=L[1])))c P;X=[o]}T{X=$A(1N.2n(L[1]))}}T{X=$$.20.2n(X,L[1]);k(L[2])X=1m.6O(X,L[2],12)}k(L[3])X=1m.6P(X,L[3],12);k(L[4])X=1m.6M(X,L[4],L[5],L[6],12);c X},55:h(X,1N,1w){c(1w)?X:$$.3b(X)}},6S:h(6T){c(6T==\'5a\')?\'8O://8Q.8R.8T/8N/5a\':P},2n:h(1N,3l){m 58=[];G(m i=0,j=1N.H;i<j;i++)58.N(1N[i].2n(3l));c 58}};$$.20.2w=(C.2h)?\'2h\':\'7o\';v.1P.5f={3n:h(1b,1w){m X=[];1b=1b.57().56(\' \');G(m i=0,j=1b.H;i<j;i++){m 78=1b[i];m L=78.1D($$.20.53);k(!L)1i;L[1]=L[1]||\'*\';m 1y=$$.20[$$.20.2w].5o(X,7,L,i);k(!1y)1i;X=1y}c $$.20[$$.20.2w].55(X,7,1w)},5R:h(1b){c $(7.3n(1b,12)[0]||P)},3k:h(1b,1w){m I=[];1b=1b.56(\',\');G(m i=0,j=1b.H;i<j;i++)I=I.5c(7.3n(1b[i],12));c(1w)?I:$$.3b(I)}};v.N({3m:h(2u){m o=F.3m(2u);k(!o)c P;G(m 1B=o.1Y;1B!=7;1B=1B.1Y){k(!1B)c P}c o},8X:h(17){c 7.3n(\'.\'+17)}});F.N(v.1P.5f);v.N(v.1P.5f);v.N({2k:h(x,y){7.3d=x;7.3f=y},4s:h(){c{\'2M\':{\'x\':7.3d,\'y\':7.3f},\'2A\':{\'x\':7.5s,\'y\':7.4m},\'4k\':{\'x\':7.47,\'y\':7.48}}},2z:h(1x){1x=1x||[];m o=7,2l=0,2d=0;8W{2l+=o.al||0;2d+=o.aq||0;o=o.a1}5h(o);1x.1t(h(W){2l-=W.3d||0;2d-=W.3f||0});c{\'x\':2l,\'y\':2d}},9Z:h(1x){c 7.2z(1x).y},9M:h(1x){c 7.2z(1x).x},9S:h(1x){m 5e=7.2z(1x);m R={\'34\':7.5s,\'5m\':7.4m,\'2l\':5e.x,\'2d\':5e.y};R.5i=R.2l+R.34;R.5j=R.2d+R.5m;c R}});v.1T.5n={5l:h(B){k(C.3T){B.1H(7);c}m 31=h(){k(C.3T)c;C.3T=12;C.1K=$4C(C.1K);7.26(\'5n\')}.J(7);k(F.3W&&C.2C){C.1K=h(){k([\'3T\',\'7j\'].Y(F.3W))31()}.2x(50)}T k(F.3W&&C.1I){k(!$(\'54\')){m 3Y=(C.2K.92==\'98:\')?\'://0\':\'96:94(0)\';F.8V(\'<2Q 2u="54" 8U 3Y="\'+3Y+\'"><\\/2Q>\');$(\'54\').8K=h(){k(7.3W==\'7j\')31()}}}T{C.2E("6D",31);F.2E("8I",31)}}};C.8H=h(B){c 7.1G(\'5n\',B)};C.N({76:h(){k(7.3S)c 7.9s;k(7.5B)c F.45.6G;c F.1F.6G},7k:h(){k(7.3S)c 7.9C;k(7.5B)c F.45.6q;c F.1F.6q},7d:h(){k(7.1I)c 1z.1L(F.1F.5s,F.1F.47);k(7.2C)c F.45.47;c F.1F.47},6C:h(){k(7.1I)c 1z.1L(F.1F.4m,F.1F.48);k(7.2C)c F.45.48;c F.1F.48},6w:h(){c 7.5F||F.1F.3d},6A:h(){c 7.6i||F.1F.3f},4s:h(){c{\'2A\':{\'x\':7.76(),\'y\':7.7k()},\'4k\':{\'x\':7.7d(),\'y\':7.6C()},\'2M\':{\'x\':7.6w(),\'y\':7.6A()}}},2z:h(){c{\'x\':0,\'y\':0}}});m 2H={};2H.4z=V 1f({u:{4J:1f.2j,42:1f.2j,6k:1f.2j,7f:h(p){c-(1z.9u(1z.9a*p)-1)/2},2m:99,8P:\'4t\',4Q:12,5x:50},1O:h(u){7.W=7.W||1d;7.7h(u);k(7.u.1O)7.u.1O.1H(7)},5v:h(){m 28=$28();k(28<7.28+7.u.2m){7.6t=7.u.7f((28-7.28)/7.u.2m);7.4P();7.5r()}T{7.1U(12);7.2r(7.1A);7.26(\'42\',7.W,10);7.7n()}},2r:h(1A){7.2T=1A;7.5r();c 7},4P:h(){7.2T=7.4x(7.19,7.1A)},4x:h(19,1A){c(1A-19)*7.6t+19},1u:h(19,1A){k(!7.u.4Q)7.1U();T k(7.1K)c 7;7.19=19;7.1A=1A;7.5J=7.1A-7.19;7.28=$28();7.1K=7.5v.2x(1z.4W(7i/7.u.5x),7);7.26(\'4J\',7.W);c 7},1U:h(44){k(!7.1K)c 7;7.1K=$4C(7.1K);k(!44)7.26(\'6k\',7.W);c 7},1p:h(19,1A){c 7.1u(19,1A)},au:h(44){c 7.1U(44)}});2H.4z.6r(V 6p,V 1T,V 6n);2H.6W=2H.4z.N({u:{1x:[],5g:{\'x\':0,\'y\':0},69:12},1O:h(W,u){7.2T=[];7.W=$(W);7.4B={\'1U\':7.1U.J(7,P)};7.1B(u);k(7.u.69){7.1G(\'4J\',h(){F.1G(\'2S\',7.4B.1U)}.J(7));7.1G(\'42\',h(){F.3V(\'2S\',7.4B.1U)}.J(7))}},4P:h(){G(m i=0;i<2;i++)7.2T[i]=7.4x(7.19[i],7.1A[i])},2k:h(x,y){k(7.1K&&7.u.4Q)c 7;m o=7.W.4s();m 1o={\'x\':x,\'y\':y};G(m z 1g o.2A){m 1L=o.4k[z]-o.2A[z];k($33(1o[z]))1o[z]=($q(1o[z])==\'3U\')?1o[z].6Q(0,1L):1L;T 1o[z]=o.2M[z];1o[z]+=7.u.5g[z]}c 7.1u([o.2M.x,o.2M.y],[1o.x,1o.y])},ad:h(){c 7.2k(P,0)},8A:h(){c 7.2k(P,\'5Q\')},7z:h(){c 7.2k(0,P)},7w:h(){c 7.2k(\'5Q\',P)},5k:h(o){m 1B=7.W.2z(7.u.1x);m 1Z=$(o).2z(7.u.1x);c 7.2k(1Z.x-1B.x,1Z.y-1B.y)},5r:h(){7.W.2k(7.2T[0],7.2T[1])}});m 7q=V 2s({u:{43:P,3Z:P,2m:P,4N:P},2r:h(1h,O,u){u=$21(7.u,u);O=8E(O);k(u.43)O+=\'; 43=\'+u.43;k(u.3Z)O+=\'; 3Z=\'+u.3Z;k(u.2m){m 3X=V 5P();3X.8o(3X.5H()+u.2m*24*60*60*7i);O+=\'; 8z=\'+3X.8y()}k(u.4N)O+=\'; 4N\';F.2v=1h+\'=\'+O;c $N(u,{\'1h\':1h,\'O\':O})},8C:h(1h){m O=F.2v.1D(\'(?:^|;)\\\\s*\'+1h.7m()+\'=([^;]*)\');c O?8v(O[1]):P},2F:h(2v,u){k($q(2v)==\'2a\')7.2r(2v.1h,\'\',$21(2v,{2m:-1}));T 7.2r(2v,\'\',$21(u,{2m:-1}))}});m 87=2H.6W.N({1O:h(u){7.1B(C,u);7.2X=(7.u.2X)?$$(7.u.2X):$$(F.2X);m 2K=C.2K.41.1D(/^[^#]*/)[0]+\'#\';7.2X.1t(h(2L){k(2L.41.2B(2K)!=0)c;m 2b=2L.41.4u(2K.H);k(2b&&$(2b))7.77(2L,2b)},7);k(!C.3S)7.1G(\'42\',h(){C.2K.7O=7.2b})},77:h(2L,2b){2L.1G(\'5p\',h(r){7.2b=2b;7.5k(2b);r.1U()}.6s(7))}});',62,658,'|||||||this|||||return|||||function|||if||var||el||type|event||property|options|Element||||||fn|window|||document|for|length|elements|bind|events|param|arguments|extend|value|false|case|obj||else|args|new|element|items|contains||||true||push|array||className|result|from|style|selector|prototype|null|props|Class|in|key|break|prop|keys|current|Elements|relatedTarget|values|custom|name|Array|Garbage|each|start|delay|nocash|overflown|temp|Math|to|parent|switch|match|Event|documentElement|addEvent|call|ie|opacity|timer|max|create|context|initialize|Methods|rgb|tag|properties|Events|stop|item|join|filter|parentNode|target|shared|merge|text|string||returns|fireEvent||time|index|object|anchor|map|top|test|iterable|source|xpath|tmp|empty|scrollTo|left|duration|getElementsByTagName|previous|border|replace|set|Abstract|chains|id|cookie|method|periodical|min|getPosition|size|indexOf|webkit|getStyle|addListener|remove|hex|Fx|results|len|location|link|scroll|Styles|apply|native|script|htmlElement|mousewheel|now|collect|inject|bit|links|getTag|walk|next|domReady||chk|width|val|parseInt||||klass|unique|option|scrollLeft|precision|scrollTop|HTMLElement|mix|proto|mp|getElementsBySelector|tagName|getElementById|getElements|fix|toInt|defined|included|attempt|Listeners|Properties|setProperty|generic|every|visibility|currentStyle|rgbToHex|brother|trash|fKey|regex|removeEvents|evType|forEach|getProperty|setMany|splice|toLowerCase|code|stopPropagation|preventDefault|realType|typeof|pos|webkit419|loaded|number|removeEvent|readyState|date|src|path||href|onComplete|domain|end|body||scrollWidth|scrollHeight|pick|mouseout|hexToRgb|innerText|mouseover|DOMMouseScroll|unload|charAt|NativeEvents|hasChild|cssText|scrollSize|operator|offsetHeight|merged|class|camelCase|Function|include|getSize|px|substr|newArray|random|compute|getMany|Base|appendChild|bound|clear|default|on|RegExp|parseFloat|pairs|hasClass|onStart|clean|String|first|secure|padding|setNow|wait|addEventListener|delete|catch|try|insertBefore|round|pageX|pageY|nodeType||addEvents|gecko|regexp|ie_ready|getItems|split|trim|found|node|xhtml|flag|concat|color|position|Dom|offset|while|right|bottom|toElement|add|height|domready|getParam|click|firstChild|increase|offsetWidth|picked|constructor|step|Bottom|fps|before|appendText|direction|opera|wheelDelta|Left|after|pageXOffset|where|getTime|Top|change|Multi|elementsProperty|styleSheet|which|Right|Date|full|getElement|clientX|clientY|childNodes|argument|borderShort|checked|disabled|multiple||selected|getLast|PropertiesIFlag|Merge|removeClass|setOpacity|setStyles|hidden|wheelStops|addClass|getNext|removeEventListener|pp|extended|visible|shift|contents|pageYOffset|zoom|onCancel|evaluate|continue|Options|callee|Chain|clientHeight|implement|bindWithEvent|delta|nodeValue|mouseenter|getScrollLeft|mouseleave|toUpperCase|setStyle|getScrollTop|slice|getScrollHeight|load|hyphenate|ie6|clientWidth|cloneEvents|defaultView|params|setProperties|beforeunload|filterByAttribute|undefined|filterById|filterByClass|limit|copy|resolver|prefix|innerHTML|keydown|Scroll|removeListener|textContent|setHTML|relatedTargetGecko|capitalize|toFloat|fixRelatedTarget|head|Width|getWidth|useLink|sel|0px|createElement|margin|Number|getScrollWidth|fixStyle|transition|removeChild|setOptions|1000|complete|getHeight|interval|escapeRegExp|callChain|normal|Style|Cookie|Sibling|alpha|100|hasLayout|getPropertyValue|toRight|getComputedStyle|Color|toLeft|getStyles|boolean|Object|iframe|DOMElement|khtml|getBoxObjectFor|taintEnabled|webkit420|execCommand|BackgroundImageCache|associate|getRandom|some|hash|chain|clearChain|navigator|all|whitespace|collection|textnode|nodeName|MooTools|version|floor|clearTimeout|XMLHttpRequest|ie7|ActiveXObject|Document|clearInterval|Window|SmoothScroll|transparent|adopt|clone|cloneNode|injectTop|injectInside|injectBefore|injectAfter|replaceWith|replaceChild|cssFloat|zIndex|styleFloat|float|createTextNode|toggleClass|setTime|styles|err|pass|setInterval|setTimeout|toString|decodeURIComponent|bindAsEventListener|pow|toGMTString|expires|toBottom|embed|get|times|encodeURIComponent|colSpan|space|onDomReady|DOMContentLoaded|getPrevious|onreadystatechange|esc|backspace|1999|http|unit|www|w3|tab|org|defer|write|do|getElementsByClassName|returnValue|cancelBubble|button|XPathResult|protocol|enter|void|down|javascript|up|https|500|PI|contextmenu|filterByTag|abort|error|reset|select|snapshotLength|ES|with|substring|starts|namespaceURI|UNORDERED_NODE_SNAPSHOT_TYPE|submit|blur|snapshotItem|mousedown|innerWidth|mouseup|cos|dblclick|mousemove|keypress|move|focus|resize|keyup|innerHeight|rightClick|fromElement|lastChild|accesskey|getParent|rowSpan|rowspan|getChildren|accessKey|getLeft|maxlength|maxLength|tabIndex|client|tabindex|getCoordinates|colspan|attributes|setText|setAttribute|getProperties|removeAttribute|getTop|getText|offsetParent|borderColor|htmlFor|borderStyle|borderWidth|getAttribute|readonly|readOnly|detail|keyCode|120|wheel|toTop|metaKey|getFirst|111|menu|page|mouse|fromCharCode|offsetLeft|meta|altKey|detachEvent||offsetTop|attachEvent|frameBorder|frameborder|clearTimer|CollectGarbage|ctrlKey|alt|control|shiftKey|srcElement|removeProperty'.split('|'),0,{}))
diff --git a/website/web/robots.txt b/website/web/robots.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0827227ab2aa526ac1b42e1d40c9c2c1258ee3f6
--- /dev/null
+++ b/website/web/robots.txt
@@ -0,0 +1,2 @@
+#User-agent: *
+#Disallow: