示例#1
0
 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);
         }
     }
 }
示例#3
0
 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;
 }