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); } }