1<?php 2 3namespace Sabre\DAV; 4 5/** 6 * SimpleCollection 7 * 8 * The SimpleCollection is used to quickly setup static directory structures. 9 * Just create the object with a proper name, and add children to use it. 10 * 11 * @copyright Copyright (C) fruux GmbH (https://fruux.com/) 12 * @author Evert Pot (http://evertpot.com/) 13 * @license http://sabre.io/license/ Modified BSD License 14 */ 15class SimpleCollection extends Collection { 16 17 /** 18 * List of childnodes 19 * 20 * @var INode[] 21 */ 22 protected $children = []; 23 24 /** 25 * Name of this resource 26 * 27 * @var string 28 */ 29 protected $name; 30 31 /** 32 * Creates this node 33 * 34 * The name of the node must be passed, child nodes can also be passed. 35 * This nodes must be instances of INode 36 * 37 * @param string $name 38 * @param INode[] $children 39 */ 40 function __construct($name, array $children = []) { 41 42 $this->name = $name; 43 foreach ($children as $child) { 44 45 if (!($child instanceof INode)) throw new Exception('Only instances of Sabre\DAV\INode are allowed to be passed in the children argument'); 46 $this->addChild($child); 47 48 } 49 50 } 51 52 /** 53 * Adds a new childnode to this collection 54 * 55 * @param INode $child 56 * @return void 57 */ 58 function addChild(INode $child) { 59 60 $this->children[$child->getName()] = $child; 61 62 } 63 64 /** 65 * Returns the name of the collection 66 * 67 * @return string 68 */ 69 function getName() { 70 71 return $this->name; 72 73 } 74 75 /** 76 * Returns a child object, by its name. 77 * 78 * This method makes use of the getChildren method to grab all the child nodes, and compares the name. 79 * Generally its wise to override this, as this can usually be optimized 80 * 81 * This method must throw Sabre\DAV\Exception\NotFound if the node does not 82 * exist. 83 * 84 * @param string $name 85 * @throws Exception\NotFound 86 * @return INode 87 */ 88 function getChild($name) { 89 90 if (isset($this->children[$name])) return $this->children[$name]; 91 throw new Exception\NotFound('File not found: ' . $name . ' in \'' . $this->getName() . '\''); 92 93 } 94 95 /** 96 * Returns a list of children for this collection 97 * 98 * @return INode[] 99 */ 100 function getChildren() { 101 102 return array_values($this->children); 103 104 } 105 106 107} 108