KT_atom_service.inc.php
3.06 KB
1
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
class KT_atom_service{
const STATUS_OK = '200 OK';
const STATUS_NOT_FOUND = '204 No Content';
const STATUS_NOT_ALLOWED = '204 Not Allowed';
const STATUS_CREATED = '201 Created';
const STATUS_UPDATED = '200 Updated';
const STATUS_NOT_MODIFIED = '304 Not Modified'; // For use with ETag & If-None-Match headers.
const STATUS_BAD_REQUEST = '400 Bad Request'; // Client issued a wrongly constructed request
const STATUS_NOT_AUTHENTICATED = '401 Not Authenticated';
const STATUS_PRECONDITION_FAILED = '412 Precondition Failed'; // Could not update document because another a newer version exist on the server than the one you are trying to update
const STATUS_SERVER_ERROR = '500 Internal Server Error'; // Server encountered an error processing the request
public $responseFeed=NULL;
public $responseHeader=NULL;
public $method='';
public $params='';
public $rawContent='';
public $parsedXMLContent='';
public $headers=array();
public function __construct($method,$params,$content){
$this->method=$method;
$this->params=$params;
$this->rawContent=$content;
$this->parseHeaders();
$this->parsedXMLContent=$this->xml2array($this->rawContent);
$this->setStatus(self::STATUS_OK);
$this->responseFeed=new KT_atom_responseFeed(KT_APP_BASE_URI);
switch(strtoupper($this->method)){
case 'GET': $this->GET_action();break;
case 'PUT': $this->PUT_action();break;
case 'POST': $this->POST_action();break;
case 'DELETE': $this->DELETE_action();break;
default: $this->UNSUPPORTED_action();break;
}
}
public function GET_action(){
$this->setStatus(KT_atom_service::STATUS_OK);
}
public function PUT_action(){
$this->setStatus(KT_atom_service::STATUS_NOT_FOUND );
}
public function POST_action(){
$this->setStatus(KT_atom_service::STATUS_NOT_FOUND );
}
public function DELETE_action(){
$this->setStatus(KT_atom_service::STATUS_NOT_FOUND );
}
public function UNSUPPORTED_action(){
$this->setStatus(KT_atom_service::STATUS_NOT_FOUND );
}
public function getHeaders()
{
return $this->headers;
}
public function render(){
return $this->responseFeed->render();
}
protected function xml2array($xml)
{
if (trim($xml) == '') return array();
if(class_exists('XMLns2array'))
{
$array=XMLns2array::parse($xml);
}
else
{
$array=json_decode(json_encode(@simplexml_load_string($xml)), true);
}
return $array;
}
protected function parseHeaders(){
$headers=null;
if(function_exists('http_get_request_headers')){ //Try to use pcre_http library if it exists
$headers=http_get_request_headers();
}else{
if(function_exists('apache_request_headers')){ //If not: try to use apache specific headers
$headers=apache_request_headers();
}else{ //If not: not supported - empty headers
$headers=array();
}
}
$this->headers=$headers;
}
public function setStatus($status=NULL){
header("HTTP/1.1 ".$status);
}
protected function setEtag($etagValue=NULL){
if($etagValue)header('ETag: '.$etagValue);
}
}
?>