1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehler/** 6*a1a3b679SAndreas Boehler * SimpleFile 7*a1a3b679SAndreas Boehler * 8*a1a3b679SAndreas Boehler * The 'SimpleFile' class is used to easily add read-only immutable files to 9*a1a3b679SAndreas Boehler * the directory structure. One usecase would be to add a 'readme.txt' to a 10*a1a3b679SAndreas Boehler * root of a webserver with some standard content. 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 SimpleFile extends File { 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler /** 19*a1a3b679SAndreas Boehler * File contents 20*a1a3b679SAndreas Boehler * 21*a1a3b679SAndreas Boehler * @var string 22*a1a3b679SAndreas Boehler */ 23*a1a3b679SAndreas Boehler protected $contents = []; 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler /** 26*a1a3b679SAndreas Boehler * Name of this resource 27*a1a3b679SAndreas Boehler * 28*a1a3b679SAndreas Boehler * @var string 29*a1a3b679SAndreas Boehler */ 30*a1a3b679SAndreas Boehler protected $name; 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler /** 33*a1a3b679SAndreas Boehler * A mimetype, such as 'text/plain' or 'text/html' 34*a1a3b679SAndreas Boehler * 35*a1a3b679SAndreas Boehler * @var string 36*a1a3b679SAndreas Boehler */ 37*a1a3b679SAndreas Boehler protected $mimeType; 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler /** 40*a1a3b679SAndreas Boehler * Creates this node 41*a1a3b679SAndreas Boehler * 42*a1a3b679SAndreas Boehler * The name of the node must be passed, as well as the contents of the 43*a1a3b679SAndreas Boehler * file. 44*a1a3b679SAndreas Boehler * 45*a1a3b679SAndreas Boehler * @param string $name 46*a1a3b679SAndreas Boehler * @param string $contents 47*a1a3b679SAndreas Boehler * @param string|null $mimeType 48*a1a3b679SAndreas Boehler */ 49*a1a3b679SAndreas Boehler function __construct($name, $contents, $mimeType = null) { 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler $this->name = $name; 52*a1a3b679SAndreas Boehler $this->contents = $contents; 53*a1a3b679SAndreas Boehler $this->mimeType = $mimeType; 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler } 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler /** 58*a1a3b679SAndreas Boehler * Returns the node name for this file. 59*a1a3b679SAndreas Boehler * 60*a1a3b679SAndreas Boehler * This name is used to construct the url. 61*a1a3b679SAndreas Boehler * 62*a1a3b679SAndreas Boehler * @return string 63*a1a3b679SAndreas Boehler */ 64*a1a3b679SAndreas Boehler function getName() { 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler return $this->name; 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler /** 71*a1a3b679SAndreas Boehler * Returns the data 72*a1a3b679SAndreas Boehler * 73*a1a3b679SAndreas Boehler * This method may either return a string or a readable stream resource 74*a1a3b679SAndreas Boehler * 75*a1a3b679SAndreas Boehler * @return mixed 76*a1a3b679SAndreas Boehler */ 77*a1a3b679SAndreas Boehler function get() { 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler return $this->contents; 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler /** 84*a1a3b679SAndreas Boehler * Returns the size of the file, in bytes. 85*a1a3b679SAndreas Boehler * 86*a1a3b679SAndreas Boehler * @return int 87*a1a3b679SAndreas Boehler */ 88*a1a3b679SAndreas Boehler function getSize() { 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler return strlen($this->contents); 91*a1a3b679SAndreas Boehler 92*a1a3b679SAndreas Boehler } 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler /** 95*a1a3b679SAndreas Boehler * Returns the ETag for a file 96*a1a3b679SAndreas Boehler * 97*a1a3b679SAndreas Boehler * An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change. 98*a1a3b679SAndreas Boehler * The ETag is an arbitrary string, but MUST be surrounded by double-quotes. 99*a1a3b679SAndreas Boehler * 100*a1a3b679SAndreas Boehler * Return null if the ETag can not effectively be determined 101*a1a3b679SAndreas Boehler * @return string 102*a1a3b679SAndreas Boehler */ 103*a1a3b679SAndreas Boehler function getETag() { 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler return '"' . sha1($this->contents) . '"'; 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler } 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler /** 110*a1a3b679SAndreas Boehler * Returns the mime-type for a file 111*a1a3b679SAndreas Boehler * 112*a1a3b679SAndreas Boehler * If null is returned, we'll assume application/octet-stream 113*a1a3b679SAndreas Boehler * @return string 114*a1a3b679SAndreas Boehler */ 115*a1a3b679SAndreas Boehler function getContentType() { 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler return $this->mimeType; 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler } 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler} 122