/**
* @param Model\Asset $target
* @param Model\Asset $source
* @return Model\Asset copied asset
*/
public function copyRecursive($target, $source)
{
// avoid recursion
if (!$this->_copyRecursiveIds) {
$this->_copyRecursiveIds = [];
}
if (in_array($source->getId(), $this->_copyRecursiveIds)) {
return;
}
$source->getProperties();
$new = clone $source;
$new->id = null;
if ($new instanceof Asset\Folder) {
$new->setChilds(null);
}
$new->setFilename(Element\Service::getSaveCopyName("asset", $new->getFilename(), $target));
$new->setParentId($target->getId());
$new->setUserOwner($this->_user->getId());
$new->setUserModification($this->_user->getId());
$new->setDao(null);
$new->setLocked(false);
$new->setCreationDate(time());
$new->setStream($source->getStream());
$new->save();
// add to store
$this->_copyRecursiveIds[] = $new->getId();
foreach ($source->getChilds() as $child) {
$this->copyRecursive($new, $child);
}
if ($target instanceof Asset\Folder) {
$this->updateChilds($target, $new);
}
return $new;
}