1 <?php
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
38 class SOAPModelAccess extends SapphireSoapServer {
39
40 public static $methods = array(
41 'getXML' => array(
42 'class' => 'string',
43 'id' => 'int',
44 'relation' => 'string',
45 '_returns' => 'string',
46 ),
47 'getJSON' => array(
48 'class' => 'string',
49 'id' => 'int',
50 'relation' => 'string',
51 '_returns' => 'string',
52 ),
53 'putXML' => array(
54 'class' => 'string',
55 'id' => 'int',
56 'relation' => 'string',
57 'data' => 'string',
58 'username' => 'string',
59 'password' => 'string',
60 '_returns' => 'boolean',
61 ),
62 'putJSON' => array(
63 'class' => 'string',
64 'id' => 'int',
65 'relation' => 'string',
66 '_returns' => 'boolean',
67 ),
68 );
69
70 function Link($action = null) {
71 return Controller::join_links("soap/v1/", $action);
72 }
73
74 75 76 77 78 79 80 81
82 function getXML($class, $id, $relation = false, $username = null, $password = null) {
83 $this->authenticate($username, $password);
84
85 $response = Director::test(
86 $this->buildRestfulURL($class, $id, $relation, 'xml'),
87 null,
88 null,
89 'GET'
90 );
91
92 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
93 }
94
95 96 97 98 99 100 101 102 103 104
105 function getJSON($class, $id, $relation = false, $username = null, $password = null) {
106 $this->authenticate($username, $password);
107
108 $response = Director::test(
109 $this->buildRestfulURL($class, $id, $relation, 'json'),
110 null,
111 null,
112 'GET'
113 );
114
115 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
116 }
117
118 119 120 121 122 123 124 125 126 127 128
129 function putXML($class, $id = false, $relation = false, $data, $username = null, $password = null) {
130 $this->authenticate($username, $password);
131
132 $response = Director::test(
133 $this->buildRestfulURL($class, $id, $relation, 'xml'),
134 array(),
135 null,
136 ($id) ? 'PUT' : 'POST',
137 $data
138 );
139
140 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
141 }
142
143 144 145 146 147 148 149 150 151 152 153
154 function putJSON($class = false, $id = false, $relation = false, $data, $username = null, $password = null) {
155 $this->authenticate($username, $password);
156
157 $response = Director::test(
158 $this->buildRestfulURL($class, $id, $relation, 'json'),
159 array(),
160 null,
161 ($id) ? 'PUT' : 'POST',
162 $data
163 );
164
165 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
166 }
167
168 169 170 171 172 173 174 175 176 177
178 function deleteXML($class, $id, $relation = false, $username = null, $password = null) {
179 $this->authenticate($username, $password);
180
181 $response = Director::test(
182 $this->buildRestfulURL($class, $id, $relation, 'xml'),
183 null,
184 null,
185 'DELETE'
186 );
187
188 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
189 }
190
191 192 193 194 195 196 197 198 199 200
201 function deleteJSON($class, $id, $relation = false, $username = null, $password = null) {
202 $this->authenticate($username, $password);
203
204 $response = Director::test(
205 $this->buildRestfulURL($class, $id, $relation, 'json'),
206 null,
207 null,
208 'DELETE'
209 );
210
211 return ($response->isError()) ? $this->getErrorMessage($response) : $response->getBody();
212 }
213
214 215 216 217 218 219 220
221 protected function authenticate($username, $password) {
222 if(is_string($username)) $_SERVER['PHP_AUTH_USER'] = $username;
223 if(is_string($password)) $_SERVER['PHP_AUTH_PW'] = $password;
224 }
225
226 227 228 229 230 231 232
233 protected function buildRestfulURL($class, $id, $relation, $extension) {
234 $url = "api/v1/{$class}";
235 if($id) $url .= "/{$id}";
236 if($relation) $url .= "/{$relation}";
237 if($extension) $url .= "/.{$extension}";
238 return $url;
239 }
240
241 242 243 244
245 protected function getErrorMessage($response) {
246 return "<error type=\"authentication\" code=\"" . $response->getStatusCode() . "\">" . $response->getStatusDescription() . "</error>";
247 }
248 }
249
250 ?>
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-