1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\Browser; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV\PropFind; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler/** 8*a1a3b679SAndreas Boehler * This class is used by the browser plugin to trick the system in returning 9*a1a3b679SAndreas Boehler * every defined property. 10*a1a3b679SAndreas Boehler * 11*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 12*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 13*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 14*a1a3b679SAndreas Boehler */ 15*a1a3b679SAndreas Boehlerclass PropFindAll extends PropFind { 16*a1a3b679SAndreas Boehler 17*a1a3b679SAndreas Boehler /** 18*a1a3b679SAndreas Boehler * Creates the PROPFIND object 19*a1a3b679SAndreas Boehler * 20*a1a3b679SAndreas Boehler * @param string $path 21*a1a3b679SAndreas Boehler */ 22*a1a3b679SAndreas Boehler function __construct($path) { 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler parent::__construct($path, []); 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler } 27*a1a3b679SAndreas Boehler 28*a1a3b679SAndreas Boehler /** 29*a1a3b679SAndreas Boehler * Handles a specific property. 30*a1a3b679SAndreas Boehler * 31*a1a3b679SAndreas Boehler * This method checks wether the specified property was requested in this 32*a1a3b679SAndreas Boehler * PROPFIND request, and if so, it will call the callback and use the 33*a1a3b679SAndreas Boehler * return value for it's value. 34*a1a3b679SAndreas Boehler * 35*a1a3b679SAndreas Boehler * Example: 36*a1a3b679SAndreas Boehler * 37*a1a3b679SAndreas Boehler * $propFind->handle('{DAV:}displayname', function() { 38*a1a3b679SAndreas Boehler * return 'hello'; 39*a1a3b679SAndreas Boehler * }); 40*a1a3b679SAndreas Boehler * 41*a1a3b679SAndreas Boehler * Note that handle will only work the first time. If null is returned, the 42*a1a3b679SAndreas Boehler * value is ignored. 43*a1a3b679SAndreas Boehler * 44*a1a3b679SAndreas Boehler * It's also possible to not pass a callback, but immediately pass a value 45*a1a3b679SAndreas Boehler * 46*a1a3b679SAndreas Boehler * @param string $propertyName 47*a1a3b679SAndreas Boehler * @param mixed $valueOrCallBack 48*a1a3b679SAndreas Boehler * @return void 49*a1a3b679SAndreas Boehler */ 50*a1a3b679SAndreas Boehler function handle($propertyName, $valueOrCallBack) { 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler if (is_callable($valueOrCallBack)) { 53*a1a3b679SAndreas Boehler $value = $valueOrCallBack(); 54*a1a3b679SAndreas Boehler } else { 55*a1a3b679SAndreas Boehler $value = $valueOrCallBack; 56*a1a3b679SAndreas Boehler } 57*a1a3b679SAndreas Boehler if (!is_null($value)) { 58*a1a3b679SAndreas Boehler $this->result[$propertyName] = [200, $value]; 59*a1a3b679SAndreas Boehler } 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler } 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas Boehler /** 64*a1a3b679SAndreas Boehler * Sets the value of the property 65*a1a3b679SAndreas Boehler * 66*a1a3b679SAndreas Boehler * If status is not supplied, the status will default to 200 for non-null 67*a1a3b679SAndreas Boehler * properties, and 404 for null properties. 68*a1a3b679SAndreas Boehler * 69*a1a3b679SAndreas Boehler * @param string $propertyName 70*a1a3b679SAndreas Boehler * @param mixed $value 71*a1a3b679SAndreas Boehler * @param int $status 72*a1a3b679SAndreas Boehler * @return void 73*a1a3b679SAndreas Boehler */ 74*a1a3b679SAndreas Boehler function set($propertyName, $value, $status = null) { 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler if (is_null($status)) { 77*a1a3b679SAndreas Boehler $status = is_null($value) ? 404 : 200; 78*a1a3b679SAndreas Boehler } 79*a1a3b679SAndreas Boehler $this->result[$propertyName] = [$status, $value]; 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler /** 84*a1a3b679SAndreas Boehler * Returns the current value for a property. 85*a1a3b679SAndreas Boehler * 86*a1a3b679SAndreas Boehler * @param string $propertyName 87*a1a3b679SAndreas Boehler * @return mixed 88*a1a3b679SAndreas Boehler */ 89*a1a3b679SAndreas Boehler function get($propertyName) { 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler return isset($this->result[$propertyName]) ? $this->result[$propertyName][1] : null; 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler } 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler /** 96*a1a3b679SAndreas Boehler * Returns the current status code for a property name. 97*a1a3b679SAndreas Boehler * 98*a1a3b679SAndreas Boehler * If the property does not appear in the list of requested properties, 99*a1a3b679SAndreas Boehler * null will be returned. 100*a1a3b679SAndreas Boehler * 101*a1a3b679SAndreas Boehler * @param string $propertyName 102*a1a3b679SAndreas Boehler * @return int|null 103*a1a3b679SAndreas Boehler */ 104*a1a3b679SAndreas Boehler function getStatus($propertyName) { 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler return isset($this->result[$propertyName]) ? $this->result[$propertyName][0] : 404; 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler } 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler /** 111*a1a3b679SAndreas Boehler * Returns all propertynames that have a 404 status, and thus don't have a 112*a1a3b679SAndreas Boehler * value yet. 113*a1a3b679SAndreas Boehler * 114*a1a3b679SAndreas Boehler * @return array 115*a1a3b679SAndreas Boehler */ 116*a1a3b679SAndreas Boehler function get404Properties() { 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler $result = []; 119*a1a3b679SAndreas Boehler foreach ($this->result as $propertyName => $stuff) { 120*a1a3b679SAndreas Boehler if ($stuff[0] === 404) { 121*a1a3b679SAndreas Boehler $result[] = $propertyName; 122*a1a3b679SAndreas Boehler } 123*a1a3b679SAndreas Boehler } 124*a1a3b679SAndreas Boehler // If there's nothing in this list, we're adding one fictional item. 125*a1a3b679SAndreas Boehler if (!$result) { 126*a1a3b679SAndreas Boehler $result[] = '{http://sabredav.org/ns}idk'; 127*a1a3b679SAndreas Boehler } 128*a1a3b679SAndreas Boehler return $result; 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler } 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler} 133