<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/addon/propel/database/sfPropelDataRetriever.class.php</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,12 +1,36 @@
+Version 1.0.0
+-------------
+
+No major changes since 1.0.0-rc2.
+
+* r3502: fixed sfFilter::isFirstCall() method
+* r3493: removed the DATABASE_NAME constants
+
+* fixed typos in the book
+
+Version 1.0.0-rc2
+-----------------
+
+No major changes since 1.0.0-rc1.
+
+* r3385: new propel-dump-data task
+* r3377: fixed PEAR installation problem with PEAR 1.5
+
+* new book is now bundled with symfony under the doc/ directory
+* added some phpdoc comments
+
 Version 1.0.0-rc1
 -----------------
 
 No major changes since beta4.
 
+* r3348: added &quot;The Definitive guide to symfony&quot;
+* r3325: better inheritance for admin generator templates
 * r3316: updated script.aculo.us to 1.7.0 and prototype to 1.5.0
 * r3313: added a new decorate_with() helper
 * r3312: added a new isForwardedTo() method to sfTestBrowser
 * r3298: fixed tests on windows
+
 * updated phpdoc comments
 * added more unit tests (&gt; 3800 now)
 </diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -17,4 +17,4 @@ see LICENSE file
 INSTALLATION
 ------------
 
-see doc/book/03-Running-Symfony.txt
+see doc/03-Running-Symfony.txt</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -54,6 +54,10 @@ touch lib/model/.sf plugins/.sf web/js/.sf
 touch test/unit/.sf test/functional/.sf test/functional/${APP_NAME}/.sf
 touch web/uploads/assets/.sf
 
+touch data/sandbox.db
+chmod 777 data
+chmod 777 data/sandbox.db
+
 echo &quot;&gt;&gt;&gt; create archive&quot;
 cd ..
 tar zcpf ${SANDBOX_NAME}.tgz ${SANDBOX_NAME}</diff>
      <filename>data/bin/create_sandbox.sh</filename>
    </modified>
    <modified>
      <diff>@@ -77,4 +77,6 @@ default:
     path_info_array:        SERVER
     path_info_key:          PATH_INFO
     url_format:             PATH
-  
\ No newline at end of file
+
+    # ORM
+    orm:                    propel</diff>
      <filename>data/config/settings.yml</filename>
    </modified>
    <modified>
      <diff>@@ -36,6 +36,9 @@ class &lt;?php echo $this-&gt;getGeneratedModuleName() ?&gt;Actions extends sfActions
 &lt;?php if ($this-&gt;getParameterValue('list.peer_method')): ?&gt;
     $this-&gt;pager-&gt;setPeerMethod('&lt;?php echo $this-&gt;getParameterValue('list.peer_method') ?&gt;');
 &lt;?php endif ?&gt;
+&lt;?php if ($this-&gt;getParameterValue('list.peer_count_method')): ?&gt;
+    $this-&gt;pager-&gt;setPeerCountMethod('&lt;?php echo $this-&gt;getParameterValue('list.peer_count_method') ?&gt;');
+&lt;?php endif ?&gt;
     $this-&gt;pager-&gt;init();
   }
 
@@ -392,7 +395,7 @@ $column = sfPropelManyToMany::getColumn($class, $through_class);
 &lt;?php else: ?&gt;
     else if (isset($this-&gt;filters['&lt;?php echo $column-&gt;getName() ?&gt;']) &amp;&amp; $this-&gt;filters['&lt;?php echo $column-&gt;getName() ?&gt;'] !== '')
     {
-&lt;?php if ($type == CreoleTypes::CHAR || $type == CreoleTypes::VARCHAR): ?&gt;
+&lt;?php if ($type == CreoleTypes::CHAR || $type == CreoleTypes::VARCHAR || $type == CreoleTypes::LONGVARCHAR): ?&gt;
       $c-&gt;add(&lt;?php echo $this-&gt;getPeerClassName() ?&gt;::&lt;?php echo strtoupper($column-&gt;getName()) ?&gt;, strtr($this-&gt;filters['&lt;?php echo $column-&gt;getName() ?&gt;'], '*', '%'), Criteria::LIKE);
 &lt;?php else: ?&gt;
       $c-&gt;add(&lt;?php echo $this-&gt;getPeerClassName() ?&gt;::&lt;?php echo strtoupper($column-&gt;getName()) ?&gt;, $this-&gt;filters['&lt;?php echo $column-&gt;getName() ?&gt;']);</diff>
      <filename>data/generator/sfPropelAdmin/default/template/actions/actions.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,16 @@
-[?php echo form_tag('&lt;?php echo $this-&gt;getModuleName() ?&gt;/edit', 'id=sf_admin_edit_form name=sf_admin_edit_form multipart=true onsubmit=double_list_submit(); return true;') ?]
+[?php echo form_tag('&lt;?php echo $this-&gt;getModuleName() ?&gt;/edit', array(
+  'id'        =&gt; 'sf_admin_edit_form',
+  'name'      =&gt; 'sf_admin_edit_form',
+  'multipart' =&gt; true,
+&lt;?php foreach ($this-&gt;getColumnCategories('edit.display') as $category): ?&gt;
+&lt;?php foreach ($this-&gt;getColumns('edit.display', $category) as $name =&gt; $column): ?&gt;
+&lt;?php if ('admin_double_list' == $this-&gt;getParameterValue('edit.fields.'.$column-&gt;getName().'.type')): ?&gt;
+  'onsubmit'  =&gt; 'double_list_submit(); return true;'
+&lt;?php break 2; ?&gt;
+&lt;?php endif; ?&gt;
+&lt;?php endforeach; ?&gt;
+&lt;?php endforeach; ?&gt;
+)) ?]
 
 &lt;?php foreach ($this-&gt;getPrimaryKey() as $pk): ?&gt;
 [?php echo object_input_hidden_tag($&lt;?php echo $this-&gt;getSingularName() ?&gt;, 'get&lt;?php echo $pk-&gt;getPhpName() ?&gt;') ?]</diff>
      <filename>data/generator/sfPropelAdmin/default/template/templates/_edit_form.php</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-a:3:{s:14:&quot;NumberPatterns&quot;;a:4:{i:0;s:20:&quot;#,##0.###;-#,##0.###&quot;;i:1;s:24:&quot;#,##0.00 &#164;;-#,##0.00 &#164;&quot;;i:2;s:6:&quot;#,##0%&quot;;i:3;s:3:&quot;#E0&quot;;}s:7:&quot;Version&quot;;a:1:{i:0;s:3:&quot;1.2&quot;;}s:8:&quot;calendar&quot;;a:1:{s:9:&quot;gregorian&quot;;a:2:{s:26:&quot;DateTimeElements:intvector&quot;;a:2:{i:0;i:2;i:1;i:4;}s:16:&quot;DateTimePatterns&quot;;a:9:{i:0;s:12:&quot;HH.mm' u. 'z&quot;;i:1;s:10:&quot;HH:mm:ss z&quot;;i:2;s:8:&quot;HH:mm:ss&quot;;i:3;s:5:&quot;HH:mm&quot;;i:4;s:16:&quot;EEEE d MMMM yyyy&quot;;i:5;s:11:&quot;d MMMM yyyy&quot;;i:6;s:8:&quot;d-MMM-yy&quot;;i:7;s:7:&quot;d/MM/yy&quot;;i:8;s:7:&quot;{1} {0}&quot;;}}}}
\ No newline at end of file
+a:3:{s:14:&quot;NumberPatterns&quot;;a:4:{i:0;s:20:&quot;#,##0.###;-#,##0.###&quot;;i:1;s:24:&quot;&#164; #,##0.00;&#164; -#,##0.00&quot;;i:2;s:6:&quot;#,##0%&quot;;i:3;s:3:&quot;#E0&quot;;}s:7:&quot;Version&quot;;a:1:{i:0;s:3:&quot;1.2&quot;;}s:8:&quot;calendar&quot;;a:1:{s:9:&quot;gregorian&quot;;a:2:{s:26:&quot;DateTimeElements:intvector&quot;;a:2:{i:0;i:2;i:1;i:4;}s:16:&quot;DateTimePatterns&quot;;a:9:{i:0;s:12:&quot;HH.mm' u. 'z&quot;;i:1;s:10:&quot;HH:mm:ss z&quot;;i:2;s:8:&quot;HH:mm:ss&quot;;i:3;s:5:&quot;HH:mm&quot;;i:4;s:16:&quot;EEEE d MMMM yyyy&quot;;i:5;s:11:&quot;d MMMM yyyy&quot;;i:6;s:10:&quot;d-MMM-yyyy&quot;;i:7;s:9:&quot;d/MM/yyyy&quot;;i:8;s:7:&quot;{1} {0}&quot;;}}}}
\ No newline at end of file</diff>
      <filename>data/i18n/nl_BE.dat</filename>
    </modified>
    <modified>
      <diff>@@ -98,3 +98,6 @@ test:
 #    path_info_array:        SERVER
 #    path_info_key:          PATH_INFO
 #    url_format:             PATH
+#
+#    # ORM
+#    orm:                    propel</diff>
      <filename>data/skeleton/app/app/config/settings.yml</filename>
    </modified>
    <modified>
      <diff>@@ -44,15 +44,16 @@ function run_fix_perms($task, $args)
 
   pake_chmod(sfConfig::get('sf_cache_dir_name'), $sf_root_dir, 0777);
   pake_chmod(sfConfig::get('sf_log_dir_name'), $sf_root_dir, 0777);
+  pake_chmod(sfConfig::get('sf_web_dir_name').DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'), $sf_root_dir, 0777);
   pake_chmod('symfony', $sf_root_dir, 0777);
 
-  $dirs = array('root_cache', 'upload', 'log');
+  $dirs = array(sfConfig::get('sf_cache_dir_name'), sfConfig::get('sf_web_dir_name').DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'), sfConfig::get('sf_log_dir_name'));
   $dir_finder = pakeFinder::type('dir')-&gt;ignore_version_control();
   $file_finder = pakeFinder::type('file')-&gt;ignore_version_control();
   foreach ($dirs as $dir)
   {
-    pake_chmod($dir_finder, sfConfig::get('sf_'.$dir.'_dir'), 0777);
-    pake_chmod($file_finder, sfConfig::get('sf_'.$dir.'_dir'), 0666);
+    pake_chmod($dir_finder, $dir, 0777);
+    pake_chmod($file_finder, $dir, 0666);
   }
 }
 </diff>
      <filename>data/tasks/sfPakeMisc.php</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,9 @@ pake_task('propel-convert-xml-schema', 'project_exists');
 pake_desc('load data from fixtures directory');
 pake_task('propel-load-data', 'project_exists');
 
+pake_desc('dump data to fixtures directory');
+pake_task('propel-dump-data', 'project_exists');
+
 pake_desc('create database for current model');
 pake_task('propel-build-db', 'project_exists');
 
@@ -217,7 +220,64 @@ function run_propel_build_schema($task, $args)
 }
 
 /**
- * loads yml data from fixtures directory and inserts into database
+ * Dumps yml database data to fixtures directory.
+ *
+ * @example symfony dump-data frontend data.yml
+ * @example symfony dump-data frontend data.yml dev
+ *
+ * @param object $task
+ * @param array $args
+ */
+function run_propel_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 &quot;'.$app.'&quot; 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];
+
+  // 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';
+
+  $databaseManager = new sfDatabaseManager();
+  $databaseManager-&gt;initialize();
+
+  if (!sfToolkit::isPathAbsolute($filename))
+  {
+    $dir = sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.'fixtures';
+    pake_mkdirs($dir);
+    $filename = $dir.DIRECTORY_SEPARATOR.$filename;
+  }
+
+  pake_echo_action('propel', sprintf('dumping data to &quot;%s&quot;', $filename));
+
+  $data = new sfPropelData();
+  $data-&gt;dumpData($filename);
+}
+
+/**
+ * Loads yml data from fixtures directory and inserts into database.
  *
  * @example symfony load-data frontend
  * @example symfony load-data frontend dev fixtures append</diff>
      <filename>data/tasks/sfPakePropel.php</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ function run_test_all($task, $args)
   $h-&gt;base_dir = sfConfig::get('sf_test_dir');
 
   // register all tests
-  $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;name('*Test.php');
+  $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;follow_link()-&gt;name('*Test.php');
   $h-&gt;register($finder-&gt;in($h-&gt;base_dir));
 
   $h-&gt;run();
@@ -49,7 +49,7 @@ function run_test_functional($task, $args)
   {
     foreach (array_splice($args, 1) as $path)
     {
-      $files = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;name(basename($path).'Test.php')-&gt;in(sfConfig::get('sf_test_dir').DIRECTORY_SEPARATOR.'functional'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.dirname($path));
+      $files = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;follow_link()-&gt;name(basename($path).'Test.php')-&gt;in(sfConfig::get('sf_test_dir').DIRECTORY_SEPARATOR.'functional'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.dirname($path));
       foreach ($files as $file)
       {
         include($file);
@@ -64,7 +64,7 @@ function run_test_functional($task, $args)
     $h-&gt;base_dir = sfConfig::get('sf_test_dir').'/functional/'.$app;
 
     // register functional tests
-    $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;name('*Test.php');
+    $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;follow_link()-&gt;name('*Test.php');
     $h-&gt;register($finder-&gt;in($h-&gt;base_dir));
 
     $h-&gt;run();
@@ -77,7 +77,7 @@ function run_test_unit($task, $args)
   {
     foreach ($args as $path)
     {
-      $files = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;name(basename($path).'Test.php')-&gt;in(sfConfig::get('sf_test_dir').DIRECTORY_SEPARATOR.'unit'.DIRECTORY_SEPARATOR.dirname($path));
+      $files = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;follow_link()-&gt;name(basename($path).'Test.php')-&gt;in(sfConfig::get('sf_test_dir').DIRECTORY_SEPARATOR.'unit'.DIRECTORY_SEPARATOR.dirname($path));
       foreach ($files as $file)
       {
         include($file);
@@ -92,7 +92,7 @@ function run_test_unit($task, $args)
     $h-&gt;base_dir = sfConfig::get('sf_test_dir').'/unit';
 
     // register unit tests
-    $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;name('*Test.php');
+    $finder = pakeFinder::type('file')-&gt;ignore_version_control()-&gt;follow_link()-&gt;name('*Test.php');
     $h-&gt;register($finder-&gt;in($h-&gt;base_dir));
 
     $h-&gt;run();</diff>
      <filename>data/tasks/sfPakeTest.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class=&quot;sfTContainer&quot;&gt;
-  &lt;a alt=&quot;symfony website&quot; href=&quot;http://www.symfony-project.com/&quot;&gt;&lt;img alt=&quot;symfony PHP Framework&quot; class=&quot;sfTLogo&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/sfTLogo.png&quot; height=&quot;39&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;
+  &lt;a title=&quot;symfony website&quot; href=&quot;http://www.symfony-project.com/&quot;&gt;&lt;img alt=&quot;symfony PHP Framework&quot; class=&quot;sfTLogo&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/sfTLogo.png&quot; height=&quot;39&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;
   &lt;div class=&quot;sfTMessageContainer sfTAlert&quot;&gt;
     &lt;img alt=&quot;page not found&quot; class=&quot;sfTMessageIcon&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/icons/tools48.png&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
     &lt;div class=&quot;sfTMessageWrap&quot;&gt;</diff>
      <filename>data/web/errors/error500.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class=&quot;sfTContainer&quot;&gt;
-  &lt;a alt=&quot;symfony website&quot; href=&quot;http://www.symfony-project.com/&quot;&gt;&lt;img alt=&quot;symfony PHP Framework&quot; class=&quot;sfTLogo&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/sfTLogo.png&quot; height=&quot;39&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;
+  &lt;a title=&quot;symfony website&quot; href=&quot;http://www.symfony-project.com/&quot;&gt;&lt;img alt=&quot;symfony PHP Framework&quot; class=&quot;sfTLogo&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/sfTLogo.png&quot; height=&quot;39&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;
   &lt;div class=&quot;sfTMessageContainer sfTAlert&quot;&gt;
     &lt;img alt=&quot;page not found&quot; class=&quot;sfTMessageIcon&quot; src=&quot;&lt;?php echo $path ?&gt;/sf/sf_default/images/icons/tools48.png&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
     &lt;div class=&quot;sfTMessageWrap&quot;&gt;</diff>
      <filename>data/web/errors/unavailable.php</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-1.0.0-rc1
\ No newline at end of file
+1.0.0
\ No newline at end of file</diff>
      <filename>lib/VERSION</filename>
    </modified>
    <modified>
      <diff>@@ -281,7 +281,7 @@ abstract class sfComponent
    *
    * @see getVar()
    */
-  public function __get($key)
+  public function &amp; __get($key)
   {
     return $this-&gt;varHolder-&gt;get($key);
   }</diff>
      <filename>lib/action/sfComponent.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -286,4 +286,9 @@ class sfDebugConnection implements Connection
       self::$logger-&gt;log($msg);
     }
   }
+
+  public function __call($method, $arguments)
+  {
+    return $this-&gt;childConnection-&gt;$method($arguments);
+  }
 }</diff>
      <filename>lib/addon/creole/drivers/sfDebugConnection.php</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ require_once \''.$this-&gt;getFilePath($this-&gt;getStubObjectBuilder()-&gt;getPackage().
   {
     $script .= &quot;
 
-  public function __call(\$method, \$parameters)
+  public function __call(\$method, \$arguments)
   {
     if (!\$callable = sfMixer::getCallable('{$this-&gt;getClassname()}:'.\$method))
     {
@@ -90,15 +90,6 @@ require_once \''.$this-&gt;getFilePath($this-&gt;getStubObjectBuilder()-&gt;getPackage().
 
 &quot;;
   }
-  
-  protected function addConstants(&amp;$script)
-  {
-    parent::addConstants($script);
-    $script .= &quot;
-	/** the default database name for this class */
-	const DATABASE_NAME = '{$this-&gt;getDatabase()-&gt;getName()}';
-&quot;;
-  }
 
   protected function addAttributes(&amp;$script)
   {</diff>
      <filename>lib/addon/propel/builder/SfObjectBuilder.php</filename>
    </modified>
    <modified>
      <diff>@@ -111,30 +111,4 @@ class sfPropelDatabase extends sfCreoleDatabase
     self::$config['propel']['datasources'][$this-&gt;getParameter('datasource')]['connection'][$key] = $value;
     $this-&gt;setParameter($key, $value);
   }
-
-  public function retrieveObjects($class, $peerMethod = null)
-  {
-    if (!$classPath = sfCore::getClassPath($class.'Peer'))
-    {
-      throw new sfException(sprintf('Unable to find path for class &quot;%s&quot;.', $class.'Peer'));
-    }
-
-    require_once($classPath);
-
-    if (!$peerMethod)
-    {
-      $peerMethod = 'doSelect';
-    }
-
-    $classPeer = $class.'Peer';
-
-    if (!is_callable(array($classPeer, $peerMethod)))
-    {
-      throw new sfException(sprintf('Peer method &quot;%s&quot; not found for class &quot;%s&quot;', $peerMethod, $classPeer));
-    }
-
-    $objects = call_user_func(array($classPeer, $peerMethod), new Criteria());
-
-    return $objects;
-  }
 }</diff>
      <filename>lib/addon/propel/database/sfPropelDatabase.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,8 @@
  */
 
 /**
+ * This class is the Propel implementation of sfData.  It interacts with the data source
+ * and loads data.
  *
  * @package    symfony
  * @subpackage addon
@@ -21,6 +23,14 @@ class sfPropelData extends sfData
     $maps = array();
 
   // symfony load-data (file|dir)
+  /**
+   * Loads data from a file or directory into a Propel data source
+   *
+   * @param mixed A file or directory path
+   * @param string The Propel connection name, default 'propel'
+   *
+   * @throws Exception If the database throws an error, rollback transaction and rethrows exception
+   */
   public function loadData($directory_or_file = null, $connectionName = 'propel')
   {
     $fixture_files = $this-&gt;getFiles($directory_or_file);
@@ -44,6 +54,15 @@ class sfPropelData extends sfData
     }
   }
 
+  /**
+   * Implements the abstract loadDataFromArray method and loads the data using the generated data model.
+   *
+   * @param array The data to be loaded into the data source
+   *
+   * @throws Exception If data is unnamed.
+   * @throws sfException If an object defined in the model does not exist in the data
+   * @throws sfException If a column that does not exist is referenced
+   */
   public function loadDataFromArray($data)
   {
     if ($data === null)
@@ -132,6 +151,15 @@ class sfPropelData extends sfData
     }
   }
 
+  /**
+   * Clears existing data from the data source by reading the fixture files
+   * and deleting the existing data for only those classes that are mentioned
+   * in the fixtures.
+   *
+   * @param array The list of YAML files.
+   *
+   * @throws sfException If a class mentioned in a fixture can not be found
+   */
   protected function doDeleteCurrentData($fixture_files)
   {
     // delete all current datas in database
@@ -169,6 +197,13 @@ class sfPropelData extends sfData
     }
   }
 
+  /**
+   * Loads the mappings for the classes
+   *
+   * @param string The name of a data object
+   *
+   * @throws sfException If the class cannot be found
+   */
   protected function loadMapBuilder($class)
   {
     $class_map_builder = $class.'MapBuilder';
@@ -227,37 +262,66 @@ class sfPropelData extends sfData
     // load map classes
     array_walk($tables, array($this, 'loadMapBuilder'));
 
-    foreach ($tables as $table)
+    // reordering tables to take foreign keys into account
+    $move = true;
+    while ($move)
     {
-      $tableMap = $this-&gt;maps[$table]-&gt;getDatabaseMap()-&gt;getTable(constant($table.'Peer::TABLE_NAME'));
+      foreach ($tables as $i =&gt; $tableName)
+      {
+        $tableMap = $this-&gt;maps[$tableName]-&gt;getDatabaseMap()-&gt;getTable(constant($tableName.'Peer::TABLE_NAME'));
+
+        foreach ($tableMap-&gt;getColumns() as $column)
+        {
+          if ($column-&gt;isForeignKey())
+          {
+            $relatedTable = $this-&gt;maps[$tableName]-&gt;getDatabaseMap()-&gt;getTable($column-&gt;getRelatedTableName());
+            if (array_search($relatedTable-&gt;getPhpName(), $tables) &gt; $i)
+            {
+              unset($tables[$i]);
+              $tables[] = $tableName;
+              $move = true;
+              continue 2;
+            }
+          }
+        }
+
+        $move = false;
+      }
+    }
+
+    foreach ($tables as $tableName)
+    {
+      $tableMap = $this-&gt;maps[$tableName]-&gt;getDatabaseMap()-&gt;getTable(constant($tableName.'Peer::TABLE_NAME'));
 
       // get db info
-      $rs = $con-&gt;executeQuery('SELECT * FROM '.constant($table.'Peer::TABLE_NAME'));
+      $rs = $con-&gt;executeQuery('SELECT * FROM '.constant($tableName.'Peer::TABLE_NAME'));
 
-      $dumpData[$table] = array();
+      $dumpData[$tableName] = array();
 
-      while ($rs-&gt;next()) {
-        $pk = '';
+      while ($rs-&gt;next())
+      {
+        $pk = $tableName;
+        $values = array();
         foreach ($tableMap-&gt;getColumns() as $column)
         {
           $col = strtolower($column-&gt;getColumnName());
-
           if ($column-&gt;isPrimaryKey())
           {
-            $pk .= '_' .$rs-&gt;get($col);
-            continue;
+            $pk .= '_'.$rs-&gt;get($col);
           }
           else if ($column-&gt;isForeignKey())
           {
-            $relatedTable = $this-&gt;maps[$table]-&gt;getDatabaseMap()-&gt;getTable($column-&gt;getRelatedTableName());
+            $relatedTable = $this-&gt;maps[$tableName]-&gt;getDatabaseMap()-&gt;getTable($column-&gt;getRelatedTableName());
 
-            $dumpData[$table][$table.$pk][$col] = $relatedTable-&gt;getPhpName().'_'.$rs-&gt;get($col);
+            $values[$col] = $relatedTable-&gt;getPhpName().'_'.$rs-&gt;get($col);
           }
           else
           {
-            $dumpData[$table][$table.$pk][$col] = $rs-&gt;get($col);
+            $values[$col] = $rs-&gt;get($col);
           }
         }
+
+        $dumpData[$tableName][$pk] = $values;
       }
     }
 </diff>
      <filename>lib/addon/propel/sfPropelData.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -93,11 +93,11 @@ class sfPropelDatabaseSchema
       }
 
       // foreign-keys
-      if (isset($table['_foreign_keys']))
+      if (isset($table['_foreignKeys']))
       {
-        foreach ($table['_foreign_keys'] as $fkey_name =&gt; $fkey)
+        foreach ($table['_foreignKeys'] as $fkey_name =&gt; $fkey)
         {
-          $xml .= &quot;    &lt;foreign-key foreignTable=\&quot;$fkey[foreign_table]\&quot;&quot;;
+          $xml .= &quot;    &lt;foreign-key foreignTable=\&quot;$fkey[foreignTable]\&quot;&quot;;
 
           // foreign key name
           if (!is_numeric($fkey_name))
@@ -106,15 +106,15 @@ class sfPropelDatabaseSchema
           }
 
           // onDelete
-          if (isset($fkey['on_delete']))
+          if (isset($fkey['onDelete']))
           {
-            $xml .= &quot; onDelete=\&quot;$fkey[on_delete]\&quot;&quot;;
+            $xml .= &quot; onDelete=\&quot;$fkey[onDelete]\&quot;&quot;;
           }
 
           // onUpdate
-          if (isset($fkey['on_update']))
+          if (isset($fkey['onUpdate']))
           {
-            $xml .= &quot; onUpdate=\&quot;$fkey[on_update]\&quot;&quot;;
+            $xml .= &quot; onUpdate=\&quot;$fkey[onUpdate]\&quot;&quot;;
           }
           $xml .= &quot;&gt;\n&quot;;
 
@@ -405,11 +405,11 @@ class sfPropelDatabaseSchema
     $booleans = array('required', 'primaryKey', 'autoincrement', 'autoIncrement', 'noXsd', 'isI18N', 'isCulture');
     if (in_array($key, $booleans))
     {
-      return ($value == 1) ? 'true' : 'false';
+      return $value == 1 ? 'true' : 'false';
     }
     else
     {
-      return $value;
+      return is_null($value) ? 'null' : $value;
     }
   }
 </diff>
      <filename>lib/addon/propel/sfPropelDatabaseSchema.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,8 @@
  */
 
 /**
+ * This class defines the interface for interacting with data, as well
+ * as default implementations.
  *
  * @package    symfony
  * @subpackage addon
@@ -22,16 +24,33 @@ abstract class sfData
     $deleteCurrentData = true,
     $object_references = array();
 
+  /**
+   * Sets a flag to indicate if the current data in the database
+   * should be deleted before new data is loaded.
+   *
+   * @param boolean The flag value
+   */
   public function setDeleteCurrentData($boolean)
   {
     $this-&gt;deleteCurrentData = $boolean;
   }
 
+  /**
+   * Gets the current value of the flag that indicates whether
+   * current data is to be deleted or not.
+   *
+   * @returns boolean
+   */
   public function getDeleteCurrentData()
   {
     return $this-&gt;deleteCurrentData;
   }
 
+  /**
+   * Loads data for the database from a YAML file
+   *
+   * @param string The path to the YAML file.
+   */
   protected function doLoadDataFromFile($fixture_file)
   {
     // import new datas
@@ -40,8 +59,19 @@ abstract class sfData
     $this-&gt;loadDataFromArray($data);
   }
 
+  /**
+   * Manages the insertion of data into the data source
+   *
+   * @param array The data to be inserted into the data source
+   */
   abstract public function loadDataFromArray($data);
 
+  /**
+   * Manages reading all of the fixture data files and
+   * loading them into the data source
+   *
+   * @param array The path names of the YAML data files
+   */
   protected function doLoadData($fixture_files)
   {
     $this-&gt;object_references = array();
@@ -54,6 +84,15 @@ abstract class sfData
     }
   }
 
+  /**
+   * Gets a list of one or more *.yml files and returns the list in an array
+   *
+   * @param string A directory or file name; if null, then defaults to 'sf_data_dir'/fixtures
+   *
+   * @returns array A list of *.yml files.
+   *
+   * @throws sfInitializationException If the directory or file does not exist.
+   */
   protected function getFiles($directory_or_file = null)
   {
     // directory or file?</diff>
      <filename>lib/addon/sfData.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -51,7 +51,7 @@ class sfFunctionCache extends sfFileCache
       $target = array_shift($arguments);
       ob_start();
       ob_implicit_flush(false);
-      if (strstr($target, '::'))
+      if (is_string($target) &amp;&amp; strstr($target, '::'))
       {
         // classname::staticMethod
         list($class, $method) = explode('::', $target);
@@ -65,7 +65,7 @@ class sfFunctionCache extends sfFileCache
           throw $e;
         }
       }
-      else if (strstr($target, '-&gt;'))
+      else if (is_string($target) &amp;&amp; strstr($target, '-&gt;'))
       {
         // object-&gt;method
         // use a stupid name ($objet_123456789 because) of problems when the object</diff>
      <filename>lib/cache/sfFunctionCache.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -63,6 +63,8 @@ class sfConfigCache
     // handler to call for this configuration file
     $handlerToCall = null;
 
+    $handler = str_replace(DIRECTORY_SEPARATOR, '/', $handler);
+
     // grab the base name of the handler
     $basename = basename($handler);
     if (isset($this-&gt;handlers[$handler]))
@@ -130,6 +132,8 @@ class sfConfigCache
    */
   public function checkConfig($configPath, $optional = false)
   {
+    static $process_cache_cleared = false;
+
     if (sfConfig::get('sf_debug') &amp;&amp; sfConfig::get('sf_logging_enabled'))
     {
       $timer = sfTimerManager::getTimer('Configuration');
@@ -186,9 +190,10 @@ class sfConfigCache
       $this-&gt;callHandler($configPath, $files, $cache);
 
       // clear process cache
-      if ('config/config_handlers.yml' != $configPath)
+      if ('config/config_handlers.yml' != $configPath &amp;&amp; sfConfig::has('sf_use_process_cache') &amp;&amp; !$process_cache_cleared)
       {
         sfProcessCache::clear();
+        $process_cache_cleared = true;
       }
     }
 </diff>
      <filename>lib/config/sfConfigCache.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -69,7 +69,7 @@ class sfValidatorConfigHandler extends sfYamlConfigHandler
           // unsupported request method
           $error = sprintf('Configuration file &quot;%s&quot; specifies unsupported request method &quot;%s&quot;', $configFiles[0], $method);
 
-          throw new sfParseException($method);
+          throw new sfParseException($error);
         }
 
         // create our method</diff>
      <filename>lib/config/sfValidatorConfigHandler.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -36,6 +36,9 @@ class sfFrontWebController extends sfWebController
         $this-&gt;getContext()-&gt;getLogger()-&gt;info('{sfController} dispatch request');
       }
 
+      // reinitialize filters (needed for unit and functional tests)
+      sfFilter::$filterCalled = array();
+
       // determine our module and action
       $request    = $this-&gt;getContext()-&gt;getRequest();
       $moduleName = $request-&gt;getParameter('module');</diff>
      <filename>lib/controller/sfFrontWebController.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -116,9 +116,12 @@ class sfDebug
         'httpHeaders'     =&gt; array(),
         'parameterHolder' =&gt; self::flattenParameterHolder($response-&gt;getParameterHolder()),
       );
-      foreach ($response-&gt;getHttpHeaders() as $key =&gt; $value)
+      if (method_exists($response, 'getHttpHeaders'))
       {
-        $values['httpHeaders'][$key] = $value;
+        foreach ($response-&gt;getHttpHeaders() as $key =&gt; $value)
+        {
+          $values['httpHeaders'][$key] = $value;
+        }
       }
 
       $cookies = array();</diff>
      <filename>lib/debug/sfDebug.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -45,11 +45,16 @@ class sfTimer
 
   /**
    * Stops the timer and add the amount of time since the start to the total time.
+   *
+   * @return integer Time spend for the last call
    */
   public function addTime()
   {
-    $this-&gt;totalTime += microtime(true) - $this-&gt;startTime;
+    $spend = microtime(true) - $this-&gt;startTime;
+    $this-&gt;totalTime += $spend;
     ++$this-&gt;calls;
+
+    return $spend;
   }
 
   /**</diff>
      <filename>lib/debug/sfTimer.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -51,7 +51,7 @@ class sfCacheFilter extends sfFilter
   public function execute($filterChain)
   {
     // execute this filter only once, if cache is set and no GET or POST parameters
-    if (!$this-&gt;isFirstCall() || !sfConfig::get('sf_cache') || count($_GET) || count($_POST))
+    if (!sfConfig::get('sf_cache') || count($_GET) || count($_POST))
     {
       $filterChain-&gt;execute();
 </diff>
      <filename>lib/filter/sfCacheFilter.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,9 +22,11 @@ abstract class sfFilter
 {
   protected
     $parameterHolder = null,
-    $filterCalled    = array(),
     $context         = null;
 
+  public static
+    $filterCalled    = array();
+
   /**
    * Returns true if this is the first call to the sfFilter instance.
    *
@@ -33,13 +35,13 @@ abstract class sfFilter
   protected function isFirstCall()
   {
     $class = get_class($this);
-    if (isset($this-&gt;filterCalled[$class]))
+    if (isset(self::$filterCalled[$class]))
     {
       return false;
     }
     else
     {
-      $this-&gt;filterCalled[$class] = true;
+      self::$filterCalled[$class] = true;
 
       return true;
     }</diff>
      <filename>lib/filter/sfFilter.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -124,13 +124,16 @@ abstract class sfAdminGenerator extends sfCrudGenerator
     $action = isset($params['action']) ? $params['action'] : $default_action;
     $url_params = $pk_link ? '?'.$this-&gt;getPrimaryKeyUrlParams() : '\'';
 
-    if (!isset($options['class']) &amp;&amp; $default_class)
+    if (!isset($options['class']))
     {
-      $options['class'] = $default_class;
-    }
-    else
-    {
-      $options['style'] = 'background: #ffc url('.$icon.') no-repeat 3px 2px';
+      if ($default_class)
+      {
+        $options['class'] = $default_class;
+      }
+      else
+      {
+        $options['style'] = 'background: #ffc url('.$icon.') no-repeat 3px 2px';
+      }
     }
 
     $li_class = $li_class ? ' class=&quot;'.$li_class.'&quot;' : '';</diff>
      <filename>lib/generator/sfAdminGenerator.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -86,16 +86,8 @@ abstract class sfCrudGenerator extends sfGenerator
     }
 
     $this-&gt;setTheme($theme);
-
-    $templateFiles = array_merge(
-      sfFinder::type('file')-&gt;name('*.php')-&gt;relative()-&gt;in(sfLoader::getGeneratorTemplate($this-&gt;getGeneratorClass(), 'default', '').'/templates'),
-      sfFinder::type('file')-&gt;name('*.php')-&gt;relative()-&gt;in($themeDir.'/templates')
-    );
-
-    $configFiles = array_merge(
-      sfFinder::type('file')-&gt;name('*.yml')-&gt;relative()-&gt;in(sfLoader::getGeneratorTemplate($this-&gt;getGeneratorClass(), 'default', '').'/config'),
-      sfFinder::type('file')-&gt;name('*.yml')-&gt;relative()-&gt;in($themeDir.'/config')
-    );
+    $templateFiles = sfFinder::type('file')-&gt;name('*.php')-&gt;relative()-&gt;in($themeDir.'/templates');
+    $configFiles = sfFinder::type('file')-&gt;name('*.yml')-&gt;relative()-&gt;in($themeDir.'/config');
 
     $this-&gt;generatePhpFiles($this-&gt;generatedModuleName, $templateFiles, $configFiles);
 </diff>
      <filename>lib/generator/sfCrudGenerator.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -68,7 +68,7 @@ abstract class sfGenerator
       // save template file
       $this-&gt;getGeneratorManager()-&gt;getCache()-&gt;set($template, $generatedModuleName.DIRECTORY_SEPARATOR.'templates', $retval);
     }
-    
+
     // generate config files
     foreach ($configFiles as $config)
     {</diff>
      <filename>lib/generator/sfGenerator.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -37,6 +37,11 @@ function format_date($date, $format = 'd', $culture = null, $charset = null)
 {
   static $dateFormats = array();
 
+  if (is_null($date))
+  {
+    return null;
+  }
+
   if (!$culture)
   {
     $culture = sfContext::getInstance()-&gt;getUser()-&gt;getCulture();</diff>
      <filename>lib/helper/DateHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -458,7 +458,7 @@ function textarea_tag($name, $content = null, $options = array())
     return $sfEditor-&gt;toHTML();
   }
 
-  return content_tag('textarea', (is_object($content)) ? $content-&gt;__toString() : $content, array_merge(array('name' =&gt; $name, 'id' =&gt; get_id_from_name(_get_option($options, 'id', $name), null)), _convert_options($options)));
+  return content_tag('textarea', escape_once((is_object($content)) ? $content-&gt;__toString() : $content), array_merge(array('name' =&gt; $name, 'id' =&gt; get_id_from_name(_get_option($options, 'id', $name), null)), _convert_options($options)));
 }
 
 /**</diff>
      <filename>lib/helper/FormHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -1000,7 +1000,7 @@
     $callback = remote_function($options);
 
     $javascript  = 'new '.$klass.'(&quot;'.$name.'&quot;, ';
-    if (isset($options['frequency']))
+    if (isset($options['frequency']) &amp;&amp; $options['frequency'] &gt; 0)
     {
       $javascript .= $options['frequency'].&quot;, &quot;;
     }</diff>
      <filename>lib/helper/JavascriptHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -19,6 +19,11 @@
 
 function format_number($number, $culture = null)
 {
+  if (is_null($number))
+  {
+    return null;
+  }
+
   $numberFormat = new sfNumberFormat(_current_language($culture));
 
   return $numberFormat-&gt;format($number);
@@ -26,6 +31,11 @@ function format_number($number, $culture = null)
 
 function format_currency($amount, $currency = null, $culture = null)
 {
+  if (is_null($amount))
+  {
+    return null;
+  }
+
   $numberFormat = new sfNumberFormat(_current_language($culture));
 
   return $numberFormat-&gt;format($amount, 'c', $currency);</diff>
      <filename>lib/helper/NumberHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -155,23 +155,26 @@ function strip_links_text($text)
 
 if (!defined('SF_AUTO_LINK_RE'))
 {
-  define('SF_AUTO_LINK_RE', '/
+  define('SF_AUTO_LINK_RE', '~
     (                       # leading text
       &lt;\w+.*?&gt;|             #   leading HTML tag, or
-      [^=!:\'&quot;\/]|          #   leading punctuation, or
+      [^=!:\'&quot;/]|           #   leading punctuation, or
       ^                     #   beginning of line
     )
     (
-      (?:http[s]?:\/\/)|    # protocol spec, or
+      (?:https?://)|        # protocol spec, or
       (?:www\.)             # www.*
-    ) 
+    )
     (
-      ([\w]+:?[=?&amp;\/.-]?)*  # url segment
-      \w+[\/]?              # url tail
-      (?:\#\w*)?            # trailing anchor
+      [-\w]+                   # subdomain or domain
+      (?:\.[-\w]+)*            # remaining subdomains or domain
+      (?::\d+)?                # port
+      (?:/(?:(?:[\~\w\+%-]|(?:[,.;:][^\s$]))+)?)* # path
+      (?:\?[\w\+%&amp;=.;-]+)?     # query string
+      (?:\#[\w\-]*)?           # trailing anchor
     )
     ([[:punct:]]|\s|&lt;|$)    # trailing text
-   /x');
+   ~x');
 }
 
 /**
@@ -189,7 +192,7 @@ function _auto_link_urls($text, $href_options = array())
       }
       else
       {
-        return $matches[1].\'&lt;a href=&quot;\'.($matches[2] == &quot;www.&quot; ? &quot;http://www.&quot; : $matches[2]).$matches[3].\'&quot;'.$href_options.'&gt;\'.$matches[2].$matches[3].\'&lt;/a&gt;\'.$matches[5];
+        return $matches[1].\'&lt;a href=&quot;\'.($matches[2] == &quot;www.&quot; ? &quot;http://www.&quot; : $matches[2]).$matches[3].\'&quot;'.$href_options.'&gt;\'.$matches[2].$matches[3].\'&lt;/a&gt;\'.$matches[4];
       }
     ')
   , $text);</diff>
      <filename>lib/helper/TextHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -292,16 +292,24 @@ function button_to($name, $internal_uri, $options = array())
  * @return string XHTML compliant &lt;a href&gt; tag
  * @see    link_to
  */
-function mail_to($email, $name = '', $options = array())
+function mail_to($email, $name = '', $options = array(), $default_value = array())
 {
   $html_options = _parse_attributes($options);
 
   $html_options = _convert_options_to_javascript($html_options);
 
+  $default_tmp = _parse_attributes($default_value);
+  $default = array();
+  foreach ($default_tmp as $key =&gt; $value)
+  {
+    $default[] = urlencode($key).'='.urlencode($value);
+  }
+  $options = count($default) ? '?'.implode('&amp;', $default) : '';
+
   if (isset($html_options['encode']) &amp;&amp; $html_options['encode'])
   {
     unset($html_options['encode']);
-    $html_options['href'] = _encodeText('mailto:'.$email);
+    $html_options['href'] = _encodeText('mailto:'.$email.$options);
     if (!$name)
     {
       $name = _encodeText($email);
@@ -309,7 +317,7 @@ function mail_to($email, $name = '', $options = array())
   }
   else
   {
-    $html_options['href'] = 'mailto:'.$email;
+    $html_options['href'] = 'mailto:'.$email.$options;
     if (!$name)
     {
       $name = $email;</diff>
      <filename>lib/helper/UrlHelper.php</filename>
    </modified>
    <modified>
      <diff>@@ -117,6 +117,11 @@ class sfDateFormat
    */
   public function getDate($time, $pattern = null)
   {
+    if (is_null($time))
+    {
+      return null;
+    }
+
     // if the type is not a php timestamp
     $isString = (string) $time !== (string) (int) $time;
 </diff>
      <filename>lib/i18n/sfDateFormat.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -162,7 +162,9 @@ class sfContext
 
   public function retrieveObjects($class, $peerMethod)
   {
-    return $this-&gt;databaseManager-&gt;getDatabase(constant(&quot;$class::DATABASE_NAME&quot;))-&gt;retrieveObjects($class, $peerMethod);
+    $retrievingClass = 'sf'.ucfirst(sfConfig::get('sf_orm', 'propel')).'DataRetriever';
+
+    return call_user_func(array($retrievingClass, 'retrieveObjects'), $class, $peerMethod);
   }
 
   /**</diff>
      <filename>lib/util/sfContext.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -48,7 +48,7 @@ class sfYaml
     {
       $retval = syck_load($input);
 
-      return (is_array($retval)) ? $retval : array();
+      return is_array($retval) ? $retval : array();
     }
     else
     {
@@ -71,6 +71,8 @@ class sfYaml
    */
   public static function dump($array)
   {
+    require_once(dirname(__FILE__).'/Spyc.class.php');
+
     $spyc = new Spyc();
 
     return $spyc-&gt;dump($array);</diff>
      <filename>lib/util/sfYaml.class.php</filename>
    </modified>
    <modified>
      <diff>@@ -42,26 +42,26 @@
 
    &lt;file role=&quot;php&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;VERSION&quot; name=&quot;lib/VERSION&quot; /&gt;
 
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;LICENSE&quot; name=&quot;doc/LICENSE&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;01-Introducing-Symfony.txt&quot; name=&quot;doc/01-Introducing-Symfony.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;02-Exploring-Symfony-s-Code.txt&quot; name=&quot;doc/02-Exploring-Symfony-s-Code.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;03-Running-Symfony.txt&quot; name=&quot;doc/03-Running-Symfony.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;04-The-Basics-of-Page-Creation.txt&quot; name=&quot;doc/04-The-Basics-of-Page-Creation.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;05-Configuring-Symfony.txt&quot; name=&quot;doc/05-Configuring-Symfony.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;06-Inside-the-Controller-Layer.txt&quot; name=&quot;doc/06-Inside-the-Controller-Layer.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;07-Inside-the-View-Layer.txt&quot; name=&quot;doc/07-Inside-the-View-Layer.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;08-Inside-the-Model-Layer.txt&quot; name=&quot;doc/08-Inside-the-Model-Layer.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;09-Links-and-the-Routing-System.txt&quot; name=&quot;doc/09-Links-and-the-Routing-System.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;10-Forms.txt&quot; name=&quot;doc/10-Forms.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;11-Ajax-Integration.txt&quot; name=&quot;doc/11-Ajax-Integration.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;12-Caching.txt&quot; name=&quot;doc/12-Caching.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;13-I18n-and-L10n.txt&quot; name=&quot;doc/13-I18n-and-L10n.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;14-Generators.txt&quot; name=&quot;doc/14-Generators.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;15-Unit-and-Functional-Testing.txt&quot; name=&quot;doc/15-Unit-and-Functional-Testing.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;16-Application-Management-Tools.txt&quot; name=&quot;doc/16-Application-Management-Tools.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;17-Extending-Symfony.txt&quot; name=&quot;doc/17-Extending-Symfony.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;18-Performance.txt&quot; name=&quot;doc/18-Performance.txt&quot; /&gt;
-   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;19-Mastering-Symfony-s-Configuration-Files.txt&quot; name=&quot;doc/19-Mastering-Symfony-s-Configuration-Files.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/LICENSE&quot; name=&quot;doc/LICENSE&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/01-Introducing-Symfony.txt&quot; name=&quot;doc/01-Introducing-Symfony.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/02-Exploring-Symfony-s-Code.txt&quot; name=&quot;doc/02-Exploring-Symfony-s-Code.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/03-Running-Symfony.txt&quot; name=&quot;doc/03-Running-Symfony.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/04-The-Basics-of-Page-Creation.txt&quot; name=&quot;doc/04-The-Basics-of-Page-Creation.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/05-Configuring-Symfony.txt&quot; name=&quot;doc/05-Configuring-Symfony.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/06-Inside-the-Controller-Layer.txt&quot; name=&quot;doc/06-Inside-the-Controller-Layer.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/07-Inside-the-View-Layer.txt&quot; name=&quot;doc/07-Inside-the-View-Layer.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/08-Inside-the-Model-Layer.txt&quot; name=&quot;doc/08-Inside-the-Model-Layer.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/09-Links-and-the-Routing-System.txt&quot; name=&quot;doc/09-Links-and-the-Routing-System.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/10-Forms.txt&quot; name=&quot;doc/10-Forms.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/11-Ajax-Integration.txt&quot; name=&quot;doc/11-Ajax-Integration.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/12-Caching.txt&quot; name=&quot;doc/12-Caching.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/13-I18n-and-L10n.txt&quot; name=&quot;doc/13-I18n-and-L10n.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/14-Generators.txt&quot; name=&quot;doc/14-Generators.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/15-Unit-and-Functional-Testing.txt&quot; name=&quot;doc/15-Unit-and-Functional-Testing.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/16-Application-Management-Tools.txt&quot; name=&quot;doc/16-Application-Management-Tools.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/17-Extending-Symfony.txt&quot; name=&quot;doc/17-Extending-Symfony.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/18-Performance.txt&quot; name=&quot;doc/18-Performance.txt&quot; /&gt;
+   &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; install-as=&quot;book/19-Mastering-Symfony-s-Configuration-Files.txt&quot; name=&quot;doc/19-Mastering-Symfony-s-Configuration-Files.txt&quot; /&gt;
 
    &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; name=&quot;README&quot; /&gt;
    &lt;file role=&quot;doc&quot; baseinstalldir=&quot;symfony&quot; name=&quot;COPYRIGHT&quot; /&gt;</diff>
      <filename>package.xml.tmpl</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,6 @@
 abstract class BaseArticle extends BaseObject  implements Persistent {
 
 
-	
-	const DATABASE_NAME = 'propel';
 
 	
 	protected static $peer;</diff>
      <filename>test/functional/fixtures/project/lib/model/om/BaseArticle.php</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,6 @@
 abstract class BaseAuthor extends BaseObject  implements Persistent {
 
 
-	
-	const DATABASE_NAME = 'propel';
 
 	
 	protected static $peer;</diff>
      <filename>test/functional/fixtures/project/lib/model/om/BaseAuthor.php</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,6 @@
 abstract class BaseAuthorArticle extends BaseObject  implements Persistent {
 
 
-	
-	const DATABASE_NAME = 'propel';
 
 	
 	protected static $peer;</diff>
      <filename>test/functional/fixtures/project/lib/model/om/BaseAuthorArticle.php</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,6 @@
 abstract class BaseBook extends BaseObject  implements Persistent {
 
 
-	
-	const DATABASE_NAME = 'propel';
 
 	
 	protected static $peer;</diff>
      <filename>test/functional/fixtures/project/lib/model/om/BaseBook.php</filename>
    </modified>
    <modified>
      <diff>@@ -5,9 +5,6 @@ abstract class BaseCategory extends BaseObject  implements Persistent {
 
 
 	
-	const DATABASE_NAME = 'propel';
-
-	
 	protected static $peer;
 
 </diff>
      <filename>test/functional/fixtures/project/lib/model/om/BaseCategory.php</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,7 @@
 require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
 require_once($_test_dir.'/unit/sfContextMock.class.php');
 
-$t = new lime_test(16, new lime_output_color());
+$t = new lime_test(17, new lime_output_color());
 
 sfConfig::set('sf_max_forwards', 10);
 $context = new sfContext();
@@ -152,3 +152,11 @@ $controller-&gt;redirect('/module/action/id/1#photos');
 $content = ob_get_clean();
 $t-&gt;like($content, '~/module/action/id/1#photos~', '-&gt;redirect() adds a refresh meta in the content');
 $t-&gt;like($context-&gt;getResponse()-&gt;getHttpHeader('Location'), '~/module/action/id/1#photos~', '-&gt;redirect() adds a Location HTTP header');
+
+// -&gt;genUrl()
+$t-&gt;diag('-&gt;genUrl()');
+
+$r = sfRouting::getInstance();
+$r-&gt;clearRoutes();
+$r-&gt;connect('test1', '/:module/:action/:id', array('module' =&gt; 'default', 'action' =&gt; 'index'));
+$t-&gt;is($controller-&gt;genUrl('module/action?id=4'), $controller-&gt;genUrl(array('module' =&gt; 'module', 'action' =&gt; 'action', 'id' =&gt; 4)), '-&gt;genUrl() accepts a string or an array as its first argument');</diff>
      <filename>test/unit/controller/sfWebControllerTest.php</filename>
    </modified>
    <modified>
      <diff>@@ -11,23 +11,13 @@
 require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
 require_once($_test_dir.'/unit/sfContextMock.class.php');
 
-$t = new lime_test(19, new lime_output_color());
+$t = new lime_test(20, new lime_output_color());
 
 class myFilter extends sfFilter
 {
-  public function isFirstCallBeforeExecution()
+  public function isFirstCall()
   {
-    return parent::isFirstCallBeforeExecution();
-  }
-
-  public function isFirstCallBeforeRendering()
-  {
-    return parent::isFirstCallBeforeRendering();
-  }
-
-  public function isFirstCall($type = 'beforeExecution')
-  {
-    return parent::isFirstCall($type);
+    return parent::isFirstCall();
   }
 }
 
@@ -52,6 +42,10 @@ $t-&gt;is($filter-&gt;isFirstCall('beforeExecution'), true, '-&gt;isFirstCall() returns t
 $t-&gt;is($filter-&gt;isFirstCall('beforeExecution'), false, '-&gt;isFirstCall() returns false if this is not the first call with this argument');
 $t-&gt;is($filter-&gt;isFirstCall('beforeExecution'), false, '-&gt;isFirstCall() returns false if this is not the first call with this argument');
 
+$filter = new myFilter();
+$filter-&gt;initialize($context);
+$t-&gt;is($filter-&gt;isFirstCall('beforeExecution'), false, '-&gt;isFirstCall() returns false if this is not the first call with this argument');
+
 // parameter holder proxy
 require_once($_test_dir.'/unit/sfParameterHolderTest.class.php');
 $pht = new sfParameterHolderProxyTest($t);</diff>
      <filename>test/unit/filter/sfFilterTest.php</filename>
    </modified>
    <modified>
      <diff>@@ -93,7 +93,7 @@ class sfContext
   }
 }
 
-$t = new lime_test(83, new lime_output_color());
+$t = new lime_test(85, new lime_output_color());
 
 $context = sfContext::getInstance();
 $context-&gt;controller = new myController();
@@ -188,6 +188,8 @@ $t-&gt;is(input_password_tag('name', null, array('class' =&gt; 'foo')), '&lt;input type=&quot;
 $t-&gt;diag('textarea_tag()');
 $t-&gt;is(textarea_tag('name'), '&lt;textarea name=&quot;name&quot; id=&quot;name&quot;&gt;&lt;/textarea&gt;', 'textarea_tag() takes a name as its first argument');
 $t-&gt;is(textarea_tag('name', 'content'), '&lt;textarea name=&quot;name&quot; id=&quot;name&quot;&gt;content&lt;/textarea&gt;', 'textarea_tag() takes a value as its second argument');
+$t-&gt;is(textarea_tag('name', '&lt;p&gt;foo&lt;/p&gt;'), '&lt;textarea name=&quot;name&quot; id=&quot;name&quot;&gt;&amp;lt;p&amp;gt;foo&amp;lt;/p&amp;gt;&lt;/textarea&gt;', 'textarea_tag() escapes the content');
+$t-&gt;is(textarea_tag('name', '&amp;lt;p&amp;gt;foo&amp;lt;/p&amp;gt;'), '&lt;textarea name=&quot;name&quot; id=&quot;name&quot;&gt;&amp;lt;p&amp;gt;foo&amp;lt;/p&amp;gt;&lt;/textarea&gt;', 'textarea_tag() does not escape an already escaped content');
 
 // options
 $t-&gt;is(textarea_tag('name', null, array('class' =&gt; 'foo')), '&lt;textarea name=&quot;name&quot; id=&quot;name&quot; class=&quot;foo&quot;&gt;&lt;/textarea&gt;', 'textarea_tag() takes an array of attribute options as its third argument');
@@ -196,7 +198,8 @@ $t-&gt;is(textarea_tag('name', null, array('size' =&gt; '5x20')), '&lt;textarea name=&quot;nam
 
 require_once(sfConfig::get('sf_symfony_lib_dir').'/helper/sfRichTextEditor.class.php');
 require_once(sfConfig::get('sf_symfony_lib_dir').'/helper/sfRichTextEditorTinyMCE.class.php');
-sfConfig::set('sf_rich_text_js_dir', dirname(__FILE__).'/fixtures');
+sfConfig::set('sf_web_dir', dirname(__FILE__));
+sfConfig::set('sf_rich_text_js_dir', 'fixtures');
 $t-&gt;like(textarea_tag('name', 'content', array('rich' =&gt; 'TinyMCE')), '/tinyMCE\.init/', 'textarea_tag() can create a rich textarea tag based on tinyMCE');
 $t-&gt;like(textarea_tag('name', 'content', array('rich' =&gt; true)), '/tinyMCE\.init/', 'textarea_tag() can create a rich textarea tag based on tinyMCE');
 </diff>
      <filename>test/unit/helper/FormHelperTest.php</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,7 @@ require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
 
 sfLoader::loadHelpers(array('Helper', 'Tag', 'Text'));
 
-$t = new lime_test(41, new lime_output_color());
+$t = new lime_test(42, new lime_output_color());
 
 // truncate_text()
 $t-&gt;diag('truncate_text()');
@@ -110,3 +110,4 @@ $t-&gt;is(auto_link_text('Go to '.$link2_raw, 'urls'), 'Go to '.$link2_result, 'aut
 $t-&gt;is(auto_link_text('Go to '.$link2_raw, 'email_addresses'), 'Go to '.$link2_raw, 'auto_linking() converts URLs to links');
 $t-&gt;is(auto_link_text('&lt;p&gt;Link '.$link2_raw.'&lt;/p&gt;'), '&lt;p&gt;Link '.$link2_result.'&lt;/p&gt;', 'auto_linking() converts URLs to links');
 $t-&gt;is(auto_link_text('&lt;p&gt;'.$link2_raw.' Link&lt;/p&gt;'), '&lt;p&gt;'.$link2_result.' Link&lt;/p&gt;', 'auto_linking() converts URLs to links');
+$t-&gt;is(auto_link_text('&lt;p&gt;http://www.google.com/?q=symfony Link&lt;/p&gt;'), '&lt;p&gt;&lt;a href=&quot;http://www.google.com/?q=symfony&quot;&gt;http://www.google.com/?q=symfony&lt;/a&gt; Link&lt;/p&gt;', 'auto_linking() converts URLs to links');</diff>
      <filename>test/unit/helper/TextHelperTest.php</filename>
    </modified>
    <modified>
      <diff>@@ -42,7 +42,7 @@ class sfContext
   }
 }
 
-$t = new lime_test(18, new lime_output_color());
+$t = new lime_test(23, new lime_output_color());
 
 $context = sfContext::getInstance();
 $context-&gt;controller = new myController();
@@ -101,3 +101,11 @@ $t-&gt;is(mail_to('fabien.potencier@symfony-project.com'), '&lt;a href=&quot;mailto:fabien.
 $t-&gt;is(mail_to('fabien.potencier@symfony-project.com', 'fabien'), '&lt;a href=&quot;mailto:fabien.potencier@symfony-project.com&quot;&gt;fabien&lt;/a&gt;', 'mail_to() creates a mailto a tag');
 preg_match('/href=&quot;(.+?)&quot;/', mail_to('fabien.potencier@symfony-project.com', 'fabien', array('encode' =&gt; true)), $matches);
 $t-&gt;is(html_entity_decode($matches[1], ENT_QUOTES, 'UTF-8'), 'mailto:fabien.potencier@symfony-project.com', 'mail_to() can encode the email address');
+
+$t-&gt;diag('mail_to test');
+$t-&gt;is(mail_to('webmaster@example.com'),'&lt;a href=&quot;mailto:webmaster@example.com&quot;&gt;webmaster@example.com&lt;/a&gt;','mail_to with only given email works');
+$t-&gt;is(mail_to('webmaster@example.com', 'send us an email'),'&lt;a href=&quot;mailto:webmaster@example.com&quot;&gt;send us an email&lt;/a&gt;','mail_to with given email and title works');
+
+$t-&gt;is(mail_to('webmaster@example.com', '', array(), array('subject' =&gt; 'test subject', 'body' =&gt; 'test body')),'&lt;a href=&quot;mailto:webmaster@example.com?subject=test+subject&amp;amp;body=test+body&quot;&gt;webmaster@example.com&lt;/a&gt;', 'mail_to() works with given default values in array form');
+$t-&gt;is(mail_to('webmaster@example.com', '', array(), 'subject=test subject body=test body'),'&lt;a href=&quot;mailto:webmaster@example.com?subject=test+subject&amp;amp;body=test+body&quot;&gt;webmaster@example.com&lt;/a&gt;', 'mail_to() works with given default values in string form');
+$t-&gt;is(mail_to('webmaster@example.com', '', array(), 'subject=Hello World and more'),'&lt;a href=&quot;mailto:webmaster@example.com?subject=Hello+World+and+more&quot;&gt;webmaster@example.com&lt;/a&gt;', 'mail_to() works with given default value with spaces');</diff>
      <filename>test/unit/helper/UrlHelperTest.php</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0d5f41e3d0eebcdfec805e484eed4ef5a3251b9e</id>
    </parent>
  </parents>
  <author>
    <name>fabien</name>
    <email>fabien@ee427ae8-e902-0410-961c-c3ed070cd9f9</email>
  </author>
  <url>http://github.com/WIZARDISHUNGRY/symfony/commit/f824b47a83d60e0813408306d5a5241c533562ef</url>
  <id>f824b47a83d60e0813408306d5a5241c533562ef</id>
  <committed-date>2007-02-21T06:44:06-08:00</committed-date>
  <authored-date>2007-02-21T06:44:06-08:00</authored-date>
  <message>merged 1.0 into trunk (3350:3513)

git-svn-id: http://svn.symfony-project.com/trunk@3525 ee427ae8-e902-0410-961c-c3ed070cd9f9</message>
  <tree>c537aeabd4ec7a578ce941294a09cc0d195b3ea5</tree>
  <committer>
    <name>fabien</name>
    <email>fabien@ee427ae8-e902-0410-961c-c3ed070cd9f9</email>
  </committer>
</commit>
