mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2025-07-07 17:08:48 +00:00
Initial Release of the calendar plugin
This commit is contained in:
parent
45cc9885fc
commit
7115197a33
561 changed files with 189494 additions and 0 deletions
153
dav/SabreDAV/lib/Sabre/DAV/ObjectTree.php
Normal file
153
dav/SabreDAV/lib/Sabre/DAV/ObjectTree.php
Normal file
|
@ -0,0 +1,153 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* ObjectTree class
|
||||
*
|
||||
* This implementation of the Tree class makes use of the INode, IFile and ICollection API's
|
||||
*
|
||||
* @package Sabre
|
||||
* @subpackage DAV
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_DAV_ObjectTree extends Sabre_DAV_Tree {
|
||||
|
||||
/**
|
||||
* The root node
|
||||
*
|
||||
* @var Sabre_DAV_ICollection
|
||||
*/
|
||||
protected $rootNode;
|
||||
|
||||
/**
|
||||
* This is the node cache. Accessed nodes are stored here
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $cache = array();
|
||||
|
||||
/**
|
||||
* Creates the object
|
||||
*
|
||||
* This method expects the rootObject to be passed as a parameter
|
||||
*
|
||||
* @param Sabre_DAV_ICollection $rootNode
|
||||
*/
|
||||
public function __construct(Sabre_DAV_ICollection $rootNode) {
|
||||
|
||||
$this->rootNode = $rootNode;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the INode object for the requested path
|
||||
*
|
||||
* @param string $path
|
||||
* @return Sabre_DAV_INode
|
||||
*/
|
||||
public function getNodeForPath($path) {
|
||||
|
||||
$path = trim($path,'/');
|
||||
if (isset($this->cache[$path])) return $this->cache[$path];
|
||||
|
||||
//if (!$path || $path=='.') return $this->rootNode;
|
||||
$currentNode = $this->rootNode;
|
||||
|
||||
// We're splitting up the path variable into folder/subfolder components and traverse to the correct node..
|
||||
foreach(explode('/',$path) as $pathPart) {
|
||||
|
||||
// If this part of the path is just a dot, it actually means we can skip it
|
||||
if ($pathPart=='.' || $pathPart=='') continue;
|
||||
|
||||
if (!($currentNode instanceof Sabre_DAV_ICollection))
|
||||
throw new Sabre_DAV_Exception_NotFound('Could not find node at path: ' . $path);
|
||||
|
||||
$currentNode = $currentNode->getChild($pathPart);
|
||||
|
||||
}
|
||||
|
||||
$this->cache[$path] = $currentNode;
|
||||
return $currentNode;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function allows you to check if a node exists.
|
||||
*
|
||||
* @param string $path
|
||||
* @return bool
|
||||
*/
|
||||
public function nodeExists($path) {
|
||||
|
||||
try {
|
||||
|
||||
// The root always exists
|
||||
if ($path==='') return true;
|
||||
|
||||
list($parent, $base) = Sabre_DAV_URLUtil::splitPath($path);
|
||||
|
||||
$parentNode = $this->getNodeForPath($parent);
|
||||
if (!$parentNode instanceof Sabre_DAV_ICollection) return false;
|
||||
return $parentNode->childExists($base);
|
||||
|
||||
} catch (Sabre_DAV_Exception_NotFound $e) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of childnodes for a given path.
|
||||
*
|
||||
* @param string $path
|
||||
* @return array
|
||||
*/
|
||||
public function getChildren($path) {
|
||||
|
||||
$node = $this->getNodeForPath($path);
|
||||
$children = $node->getChildren();
|
||||
foreach($children as $child) {
|
||||
|
||||
$this->cache[trim($path,'/') . '/' . $child->getName()] = $child;
|
||||
|
||||
}
|
||||
return $children;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called with every tree update
|
||||
*
|
||||
* Examples of tree updates are:
|
||||
* * node deletions
|
||||
* * node creations
|
||||
* * copy
|
||||
* * move
|
||||
* * renaming nodes
|
||||
*
|
||||
* If Tree classes implement a form of caching, this will allow
|
||||
* them to make sure caches will be expired.
|
||||
*
|
||||
* If a path is passed, it is assumed that the entire subtree is dirty
|
||||
*
|
||||
* @param string $path
|
||||
* @return void
|
||||
*/
|
||||
public function markDirty($path) {
|
||||
|
||||
// We don't care enough about sub-paths
|
||||
// flushing the entire cache
|
||||
$path = trim($path,'/');
|
||||
foreach($this->cache as $nodePath=>$node) {
|
||||
if ($nodePath == $path || strpos($nodePath,$path.'/')===0)
|
||||
unset($this->cache[$nodePath]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue