public static function add($filename, $prefix, $data = array(), $fsl = false, $folder = false) { $db = Loader::db(); $dh = Loader::helper('date'); $date = $dh->getOverridableNow(); if (!is_object($fsl)) { $fsl = StorageLocation::getDefault(); } $uID = 0; $u = new User(); if (isset($data['uID'])) { $uID = $data['uID']; } else { if ($u->isRegistered()) { $uID = $u->getUserID(); } } if (!$folder instanceof FileFolder) { $filesystem = new Filesystem(); $folder = $filesystem->getRootFolder(); } $f = new \Concrete\Core\Entity\File\File(); $f->uID = $uID; $f->storageLocation = $fsl; $f->fDateAdded = new Carbon($date); $f->folderTreeNodeID = $folder->getTreeNodeID(); $em = \ORM::entityManager(); $em->persist($f); $em->flush(); $node = \Concrete\Core\Tree\Node\Type\File::add($f, $folder); $fv = Version::add($f, $filename, $prefix, $data); $f->versions->add($fv); $fve = new \Concrete\Core\File\Event\FileVersion($fv); Events::dispatch('on_file_add', $fve); $entities = $u->getUserAccessEntityObjects(); $hasUploader = false; foreach ($entities as $obj) { if ($obj instanceof FileUploaderPermissionAccessEntity) { $hasUploader = true; } } if (!$hasUploader) { $u->refreshUserGroups(); } return $fv; }
protected function updateFileManager() { $this->output(t('Migrating to new file manager...')); $filesystem = new Filesystem(); $folder = $filesystem->getRootFolder(); if (!is_object($folder)) { $filesystem = new Filesystem(); $manager = $filesystem->create(); $folder = $manager->getRootTreeNodeObject(); $r = $this->connection->executeQuery('select fID from Files'); while ($row = $r->fetch()) { // This is a performance hack $f = new \Concrete\Core\Entity\File\File(); $f->fID = $row['fID']; File::add($f, $folder); } } }
public function duplicate() { $db = Loader::db(); $em = \ORM::entityManager(); $versions = $this->versions; // duplicate the core file object $nf = clone $this; $dh = Loader::helper('date'); $date = $dh->getOverridableNow(); $nf->fDateAdded = new Carbon($date); $em->persist($nf); $em->flush(); $folder = $this->getFileFolderObject(); $folderNode = \Concrete\Core\Tree\Node\Type\File::add($nf, $folder); $nf->folderTreeNodeID = $folderNode->getTreeNodeID(); $em->persist($nf); $em->flush(); // clear out the versions $nf->versions = new ArrayCollection(); $fi = Core::make('helper/file'); $cf = Core::make('helper/concrete/file'); $importer = new Importer(); $filesystem = $this->getFileStorageLocationObject()->getFileSystemObject(); foreach ($versions as $version) { if ($version->isApproved()) { $cloneVersion = clone $version; $cloneVersion->setFileVersionID(1); $cloneVersion->setFile($nf); $em->persist($cloneVersion); $em->flush(); $cloneVersion->duplicateUnderlyingFile(); foreach ($version->getAttributes() as $value) { $value = clone $value; $value->setVersion($cloneVersion); $em->persist($value); } $em->flush(); do { $prefix = $importer->generatePrefix(); $path = $cf->prefix($prefix, $version->getFilename()); } while ($filesystem->has($path)); $filesystem->write($path, $version->getFileResource()->read(), ['visibility' => AdapterInterface::VISIBILITY_PUBLIC, 'mimetype' => Core::make('helper/mime')->mimeFromExtension($fi->getExtension($version->getFilename()))]); $cloneVersion->updateFile($version->getFilename(), $prefix); $nf->versions->add($cloneVersion); } } $em->persist($nf); $em->flush(); $v = [$this->fID]; $q = "select fID, paID, pkID from FilePermissionAssignments where fID = ?"; $r = $db->query($q, $v); while ($row = $r->fetchRow()) { $v = [$nf->getFileID(), $row['paID'], $row['pkID']]; $q = "insert into FilePermissionAssignments (fID, paID, pkID) values (?, ?, ?)"; $db->query($q, $v); } $fe = new \Concrete\Core\File\Event\DuplicateFile($this); $fe->setNewFileObject($nf); Events::dispatch('on_file_duplicate', $fe); return $nf; }