コード例 #1
0
ファイル: VirtualFile.php プロジェクト: DavidGarciaCat/eyeos
 /**
  * @return bool TRUE if the file has been successfully moved, FALSE otherwise
  */
 public function moveTo(IFile $file)
 {
     if ($this->realFile === null) {
         throw new EyeUnsupportedOperationException(__METHOD__ . ' on ' . $this->path);
     }
     if ($this->isRoot()) {
         throw new EyeUnsupportedOperationException('Cannot move root folder ' . $this->path . '.');
     }
     //if the destination ($file) is a a directory AND: the source is not a directory OR is a directory with a different name
     if ($file->isDirectory() && (!$this->isDirectory() || $file->getName() != $this->getName())) {
         if ($file->getName() != '/' || $this->getName() != '/') {
             //we redirect the move operation to a file located within the destination directory ($file)
             return $this->moveTo($file->getChildFile($this->getName()));
         }
     }
     $this->checkReadPermission();
     $parentFile = $file->getParentFile();
     if ($parentFile instanceof ISecurableFile) {
         $parentFile->checkWritePermission();
     }
     if ($file->exists()) {
         $file->checkWritePermission();
     }
     try {
         $success = false;
         if ($file instanceof EyeosAbstractVirtualFile) {
             $success = $file->copyFromAndKeepOGP($this, true);
         } else {
             $success = $this->copyTo($file);
         }
         if ($success) {
             // Ensure the "listeners" property has been initialized *before* deleting the file
             $this->getAllFileListeners();
             // Delete file *without firing deletion event* (from outside, file has been moved, not deleted)
             if ($this->deleteImpl(true, false, false)) {
                 //notify listeners
                 $this->fireEvent('fileMoved', new FileEvent($this, $file));
                 return true;
             }
         }
     } catch (EyeException $e) {
         throw new EyeIOException('Cannot move ' . $this->path . ' to ' . $file->getPath() . '.', 0, $e);
     }
     throw new EyeIOException('Cannot move ' . $this->path . ' to ' . $file->getPath() . ' (Unknown error).');
 }