mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-02 22:17:03 +03:00
Remote Synchronization (CardDAV) improvements:
now it supports address book url auto detection (and works with Google contacts, icloud and etc.)
This commit is contained in:
parent
92f2caf700
commit
1fb553e77e
249 changed files with 1338 additions and 1453 deletions
|
|
@ -0,0 +1,133 @@
|
|||
<?php
|
||||
|
||||
namespace SabreForRainLoop\DAV\Tree;
|
||||
|
||||
use SabreForRainLoop\DAV;
|
||||
|
||||
/**
|
||||
* FileSystem Tree
|
||||
*
|
||||
* This class is an alternative to the standard ObjectTree. This tree can only
|
||||
* use SabreForRainLoop\DAV\FS\Directory and File classes, but as a result it allows for a few
|
||||
* optimizations that otherwise wouldn't be possible.
|
||||
*
|
||||
* Specifically copying and moving are much, much faster.
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/).
|
||||
* @author Evert Pot (http://evertpot.com/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Filesystem extends DAV\Tree {
|
||||
|
||||
/**
|
||||
* Base url on the filesystem.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $basePath;
|
||||
|
||||
/**
|
||||
* Creates this tree
|
||||
*
|
||||
* Supply the path you'd like to share.
|
||||
*
|
||||
* @param string $basePath
|
||||
*/
|
||||
public function __construct($basePath) {
|
||||
|
||||
$this->basePath = $basePath;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new node for the given path
|
||||
*
|
||||
* @param string $path
|
||||
* @return DAV\FS\Node
|
||||
*/
|
||||
public function getNodeForPath($path) {
|
||||
|
||||
$realPath = $this->getRealPath($path);
|
||||
if (!file_exists($realPath)) {
|
||||
throw new DAV\Exception\NotFound('File at location ' . $realPath . ' not found');
|
||||
}
|
||||
if (is_dir($realPath)) {
|
||||
return new DAV\FS\Directory($realPath);
|
||||
} else {
|
||||
return new DAV\FS\File($realPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the real filesystem path for a webdav url.
|
||||
*
|
||||
* @param string $publicPath
|
||||
* @return string
|
||||
*/
|
||||
protected function getRealPath($publicPath) {
|
||||
|
||||
return rtrim($this->basePath,'/') . '/' . trim($publicPath,'/');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies a file or directory.
|
||||
*
|
||||
* This method must work recursively and delete the destination
|
||||
* if it exists
|
||||
*
|
||||
* @param string $source
|
||||
* @param string $destination
|
||||
* @return void
|
||||
*/
|
||||
public function copy($source,$destination) {
|
||||
|
||||
$source = $this->getRealPath($source);
|
||||
$destination = $this->getRealPath($destination);
|
||||
$this->realCopy($source,$destination);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by self::copy
|
||||
*
|
||||
* @param string $source
|
||||
* @param string $destination
|
||||
* @return void
|
||||
*/
|
||||
protected function realCopy($source,$destination) {
|
||||
|
||||
if (is_file($source)) {
|
||||
copy($source,$destination);
|
||||
} else {
|
||||
mkdir($destination);
|
||||
foreach(scandir($source) as $subnode) {
|
||||
|
||||
if ($subnode=='.' || $subnode=='..') continue;
|
||||
$this->realCopy($source.'/'.$subnode,$destination.'/'.$subnode);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a file or directory recursively.
|
||||
*
|
||||
* If the destination exists, delete it first.
|
||||
*
|
||||
* @param string $source
|
||||
* @param string $destination
|
||||
* @return void
|
||||
*/
|
||||
public function move($source,$destination) {
|
||||
|
||||
$source = $this->getRealPath($source);
|
||||
$destination = $this->getRealPath($destination);
|
||||
rename($source,$destination);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue