Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/ips_kernel/sabre/Sabre/DAV/ObjectTree.php
Строк: 110
<?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-2010 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 
     * @return void
     */
    
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;
        
$i=0;
        
// 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_FileNotFound('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 {

            list(
$parent$base) = Sabre_DAV_URLUtil::splitPath($path);
            
$parentNode $this->getNodeForPath($parent);
            return 
$parentNode->childExists($base);

        } catch (
Sabre_DAV_Exception_FileNotFound $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]);
            
        }

    }

}
Онлайн: 3
Реклама