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