public static function getChoices()
 {
     $table = Doctrine::getTable('sfFilebaseDirectory');
     $root = $table->getRootNode();
     $tree_object = Doctrine::getTable('sfFilebaseDirectory')->getTree();
     $tree = $tree_object->fetchTree(array('root_id' => $root->getId()));
     if (!$tree) {
         $root = new sfFilebaseDirectory();
         $root->setFilename(sfFilebasePlugin::getInstance()->getFilename());
         $root->setHash(sfFilebasePlugin::getInstance()->getHash());
         $root->save();
         $tree_object->createRoot($root);
         $tree = $tree_object->fetchTree();
     }
     return $tree;
 }
 function recurse(sfFilebasePluginFile $source, sfFilebaseDirectory $parent_dir, $file_mode)
 {
     try {
         foreach ($source as $file) {
             if ($file instanceof sfFilebasePluginDirectory) {
                 fwrite(STDOUT, sprintf("\n    Creating directory %s in %s\n", $source->getFilename(), $parent_dir->getFilename()));
                 $node = new sfFilebaseDirectory();
                 $hash = md5(uniqid(rand(), true));
                 $node->setHash($hash);
                 $node->setFilename($file->getFilename());
                 $node->save();
                 $node->getNode()->insertAsLastChildOf($parent_dir);
                 recurse($file, $node, $file_mode);
             } else {
                 fwrite(STDOUT, sprintf("\n    Copying %s to %s\n", $source->getPathname(), $parent_dir->getFilename()));
                 $copy = $file->copy($source->getFilebase()->getPathname(), true);
                 $hash = $hash = md5(uniqid(rand(), true)) . '.' . $copy->getExtension();
                 $node = new sfFilebaseFile();
                 $node->setFilename($copy->getFilename());
                 $node->setHash($hash);
                 $node->save();
                 $node->getNode()->insertAsLastChildOf($parent_dir);
                 $move = $copy->move($hash);
                 $move->chmod($file_mode);
             }
         }
     } catch (Exception $e) {
         throw new Exception((string) $e);
     }
 }