xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\PartialUpdate;
4*a1a3b679SAndreas Boehleruse Sabre\DAV;
5*a1a3b679SAndreas Boehler
6*a1a3b679SAndreas Boehlerclass FileMock implements IPatchSupport {
7*a1a3b679SAndreas Boehler
8*a1a3b679SAndreas Boehler    protected $data = '';
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehler    function put($str) {
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler        if (is_resource($str)) {
13*a1a3b679SAndreas Boehler            $str = stream_get_contents($str);
14*a1a3b679SAndreas Boehler        }
15*a1a3b679SAndreas Boehler        $this->data = $str;
16*a1a3b679SAndreas Boehler
17*a1a3b679SAndreas Boehler    }
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas Boehler    /**
20*a1a3b679SAndreas Boehler     * Updates the file based on a range specification.
21*a1a3b679SAndreas Boehler     *
22*a1a3b679SAndreas Boehler     * The first argument is the data, which is either a readable stream
23*a1a3b679SAndreas Boehler     * resource or a string.
24*a1a3b679SAndreas Boehler     *
25*a1a3b679SAndreas Boehler     * The second argument is the type of update we're doing.
26*a1a3b679SAndreas Boehler     * This is either:
27*a1a3b679SAndreas Boehler     * * 1. append
28*a1a3b679SAndreas Boehler     * * 2. update based on a start byte
29*a1a3b679SAndreas Boehler     * * 3. update based on an end byte
30*a1a3b679SAndreas Boehler     *;
31*a1a3b679SAndreas Boehler     * The third argument is the start or end byte.
32*a1a3b679SAndreas Boehler     *
33*a1a3b679SAndreas Boehler     * After a successful put operation, you may choose to return an ETag. The
34*a1a3b679SAndreas Boehler     * etag must always be surrounded by double-quotes. These quotes must
35*a1a3b679SAndreas Boehler     * appear in the actual string you're returning.
36*a1a3b679SAndreas Boehler     *
37*a1a3b679SAndreas Boehler     * Clients may use the ETag from a PUT request to later on make sure that
38*a1a3b679SAndreas Boehler     * when they update the file, the contents haven't changed in the mean
39*a1a3b679SAndreas Boehler     * time.
40*a1a3b679SAndreas Boehler     *
41*a1a3b679SAndreas Boehler     * @param resource|string $data
42*a1a3b679SAndreas Boehler     * @param int $rangeType
43*a1a3b679SAndreas Boehler     * @param int $offset
44*a1a3b679SAndreas Boehler     * @return string|null
45*a1a3b679SAndreas Boehler     */
46*a1a3b679SAndreas Boehler    function patch($data, $rangeType, $offset = null) {
47*a1a3b679SAndreas Boehler
48*a1a3b679SAndreas Boehler        if (is_resource($data)) {
49*a1a3b679SAndreas Boehler            $data = stream_get_contents($data);
50*a1a3b679SAndreas Boehler        }
51*a1a3b679SAndreas Boehler
52*a1a3b679SAndreas Boehler        switch($rangeType) {
53*a1a3b679SAndreas Boehler
54*a1a3b679SAndreas Boehler            case 1 :
55*a1a3b679SAndreas Boehler                $this->data.=$data;
56*a1a3b679SAndreas Boehler                break;
57*a1a3b679SAndreas Boehler            case 3 :
58*a1a3b679SAndreas Boehler                // Turn the offset into an offset-offset.
59*a1a3b679SAndreas Boehler                $offset = strlen($this->data) - $offset;
60*a1a3b679SAndreas Boehler                // No break is intentional
61*a1a3b679SAndreas Boehler            case 2 :
62*a1a3b679SAndreas Boehler                $this->data =
63*a1a3b679SAndreas Boehler                    substr($this->data, 0, $offset) .
64*a1a3b679SAndreas Boehler                    $data .
65*a1a3b679SAndreas Boehler                    substr($this->data, $offset + strlen($data));
66*a1a3b679SAndreas Boehler                break;
67*a1a3b679SAndreas Boehler
68*a1a3b679SAndreas Boehler        }
69*a1a3b679SAndreas Boehler
70*a1a3b679SAndreas Boehler    }
71*a1a3b679SAndreas Boehler
72*a1a3b679SAndreas Boehler    function get() {
73*a1a3b679SAndreas Boehler
74*a1a3b679SAndreas Boehler        return $this->data;
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler    }
77*a1a3b679SAndreas Boehler
78*a1a3b679SAndreas Boehler    function getContentType() {
79*a1a3b679SAndreas Boehler
80*a1a3b679SAndreas Boehler        return 'text/plain';
81*a1a3b679SAndreas Boehler
82*a1a3b679SAndreas Boehler    }
83*a1a3b679SAndreas Boehler
84*a1a3b679SAndreas Boehler    function getSize() {
85*a1a3b679SAndreas Boehler
86*a1a3b679SAndreas Boehler        return strlen($this->data);
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehler    }
89*a1a3b679SAndreas Boehler
90*a1a3b679SAndreas Boehler    function getETag() {
91*a1a3b679SAndreas Boehler
92*a1a3b679SAndreas Boehler        return '"' . $this->data . '"';
93*a1a3b679SAndreas Boehler
94*a1a3b679SAndreas Boehler    }
95*a1a3b679SAndreas Boehler
96*a1a3b679SAndreas Boehler    function delete() {
97*a1a3b679SAndreas Boehler
98*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed();
99*a1a3b679SAndreas Boehler
100*a1a3b679SAndreas Boehler    }
101*a1a3b679SAndreas Boehler
102*a1a3b679SAndreas Boehler    function setName($name) {
103*a1a3b679SAndreas Boehler
104*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed();
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler    }
107*a1a3b679SAndreas Boehler
108*a1a3b679SAndreas Boehler    function getName() {
109*a1a3b679SAndreas Boehler
110*a1a3b679SAndreas Boehler        return 'partial';
111*a1a3b679SAndreas Boehler
112*a1a3b679SAndreas Boehler    }
113*a1a3b679SAndreas Boehler
114*a1a3b679SAndreas Boehler    function getLastModified() {
115*a1a3b679SAndreas Boehler
116*a1a3b679SAndreas Boehler        return null;
117*a1a3b679SAndreas Boehler
118*a1a3b679SAndreas Boehler    }
119*a1a3b679SAndreas Boehler
120*a1a3b679SAndreas Boehler
121*a1a3b679SAndreas Boehler}
122