1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\Mock; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler/** 8*a1a3b679SAndreas Boehler * Mock File 9*a1a3b679SAndreas Boehler * 10*a1a3b679SAndreas Boehler * See the Collection in this directory for more details. 11*a1a3b679SAndreas Boehler * 12*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 13*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 14*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 15*a1a3b679SAndreas Boehler */ 16*a1a3b679SAndreas Boehlerclass File extends DAV\File { 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler protected $name; 19*a1a3b679SAndreas Boehler protected $contents; 20*a1a3b679SAndreas Boehler protected $parent; 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler /** 23*a1a3b679SAndreas Boehler * Creates the object 24*a1a3b679SAndreas Boehler * 25*a1a3b679SAndreas Boehler * @param string $name 26*a1a3b679SAndreas Boehler * @param array $children 27*a1a3b679SAndreas Boehler * @return void 28*a1a3b679SAndreas Boehler */ 29*a1a3b679SAndreas Boehler function __construct($name, $contents, Collection $parent = null) { 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler $this->name = $name; 32*a1a3b679SAndreas Boehler $this->put($contents); 33*a1a3b679SAndreas Boehler $this->parent = $parent; 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler } 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler /** 38*a1a3b679SAndreas Boehler * Returns the name of the node. 39*a1a3b679SAndreas Boehler * 40*a1a3b679SAndreas Boehler * This is used to generate the url. 41*a1a3b679SAndreas Boehler * 42*a1a3b679SAndreas Boehler * @return string 43*a1a3b679SAndreas Boehler */ 44*a1a3b679SAndreas Boehler function getName() { 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler return $this->name; 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler } 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler /** 51*a1a3b679SAndreas Boehler * Changes the name of the node. 52*a1a3b679SAndreas Boehler * 53*a1a3b679SAndreas Boehler * @return void 54*a1a3b679SAndreas Boehler */ 55*a1a3b679SAndreas Boehler function setName($name) { 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler $this->name = $name; 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler } 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler /** 62*a1a3b679SAndreas Boehler * Updates the data 63*a1a3b679SAndreas Boehler * 64*a1a3b679SAndreas Boehler * The data argument is a readable stream resource. 65*a1a3b679SAndreas Boehler * 66*a1a3b679SAndreas Boehler * After a succesful put operation, you may choose to return an ETag. The 67*a1a3b679SAndreas Boehler * etag must always be surrounded by double-quotes. These quotes must 68*a1a3b679SAndreas Boehler * appear in the actual string you're returning. 69*a1a3b679SAndreas Boehler * 70*a1a3b679SAndreas Boehler * Clients may use the ETag from a PUT request to later on make sure that 71*a1a3b679SAndreas Boehler * when they update the file, the contents haven't changed in the mean 72*a1a3b679SAndreas Boehler * time. 73*a1a3b679SAndreas Boehler * 74*a1a3b679SAndreas Boehler * If you don't plan to store the file byte-by-byte, and you return a 75*a1a3b679SAndreas Boehler * different object on a subsequent GET you are strongly recommended to not 76*a1a3b679SAndreas Boehler * return an ETag, and just return null. 77*a1a3b679SAndreas Boehler * 78*a1a3b679SAndreas Boehler * @param resource $data 79*a1a3b679SAndreas Boehler * @return string|null 80*a1a3b679SAndreas Boehler */ 81*a1a3b679SAndreas Boehler function put($data) { 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler if (is_resource($data)) { 84*a1a3b679SAndreas Boehler $data = stream_get_contents($data); 85*a1a3b679SAndreas Boehler } 86*a1a3b679SAndreas Boehler $this->contents = $data; 87*a1a3b679SAndreas Boehler return '"' . md5($data) . '"'; 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehler } 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler /** 92*a1a3b679SAndreas Boehler * Returns the data 93*a1a3b679SAndreas Boehler * 94*a1a3b679SAndreas Boehler * This method may either return a string or a readable stream resource 95*a1a3b679SAndreas Boehler * 96*a1a3b679SAndreas Boehler * @return mixed 97*a1a3b679SAndreas Boehler */ 98*a1a3b679SAndreas Boehler function get() { 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler return $this->contents; 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler } 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler /** 105*a1a3b679SAndreas Boehler * Returns the ETag for a file 106*a1a3b679SAndreas Boehler * 107*a1a3b679SAndreas Boehler * An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change. 108*a1a3b679SAndreas Boehler * 109*a1a3b679SAndreas Boehler * Return null if the ETag can not effectively be determined 110*a1a3b679SAndreas Boehler * 111*a1a3b679SAndreas Boehler * @return void 112*a1a3b679SAndreas Boehler */ 113*a1a3b679SAndreas Boehler function getETag() { 114*a1a3b679SAndreas Boehler 115*a1a3b679SAndreas Boehler return '"' . md5($this->contents) . '"'; 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler } 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler /** 120*a1a3b679SAndreas Boehler * Returns the size of the node, in bytes 121*a1a3b679SAndreas Boehler * 122*a1a3b679SAndreas Boehler * @return int 123*a1a3b679SAndreas Boehler */ 124*a1a3b679SAndreas Boehler function getSize() { 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler return strlen($this->contents); 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler } 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler /** 131*a1a3b679SAndreas Boehler * Delete the node 132*a1a3b679SAndreas Boehler * 133*a1a3b679SAndreas Boehler * @return void 134*a1a3b679SAndreas Boehler */ 135*a1a3b679SAndreas Boehler function delete() { 136*a1a3b679SAndreas Boehler 137*a1a3b679SAndreas Boehler $this->parent->deleteChild($this->name); 138*a1a3b679SAndreas Boehler 139*a1a3b679SAndreas Boehler } 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas Boehler} 142