-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathXMLRpcRequest.php
79 lines (68 loc) · 2.47 KB
/
XMLRpcRequest.php
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
<?php
include_once 'Param.php';
include_once 'Book.php';
class XMLRpcRequest {
const XML_ROOT = '<?xml version="1.0"?><methodCall></methodCall>';
const METHOD_CALL = 'methodCall';
const METHOD_NAME = 'methodName';
const BOOK_NODE = array(
'ROOT' => 'Book',
'TITLE' => 'Title',
'AUTHOR' => 'Author',
'PRICE' => 'Price'
);
const PARAMS = 'params';
const PARAM = 'param';
const VALUE = 'value';
const TYPE = 'type';
const PARAM_TYPES = array(
'INT' => 'int',
'STRING' => 'string',
'XML' => 'xml'
);
const ADD_BOOK = 'AddBook';
const DELETE_BOOK = 'DeleteBook';
const GET_BOOK_BY_TITLE = 'GetBookByTitle';
const GET_BOOKS = 'GetBooks';
public $xmlDoc;
public function __construct() {
$this->xmlDoc = new SimpleXMLElement(self::XML_ROOT);
}
private function addMethodName($name) {
$this->xmlDoc->addChild(self::METHOD_NAME, $name);
}
private function addBookParam($book, $value) {
$bookNode = $value->addChild(self::BOOK_NODE['ROOT']);
$bookNode->addChild(self::BOOK_NODE['TITLE'], $book->title);
$bookNode->addChild(self::BOOK_NODE['AUTHOR'], $book->author);
$bookNode->addChild(self::BOOK_NODE['PRICE'], $book->price);
}
private function addMethodParams($parameters) {
$params = $this->xmlDoc->addChild(self::PARAMS);
$param = $params->addChild(self::PARAM);
if (is_object($parameters->value)) {
$value = $param->addChild(self::VALUE);
$this->addBookParam($parameters->value, $value);
} else {
$value = $param->addChild(self::VALUE, $parameters->value);
}
$value->addAttribute(self::TYPE, $parameters->type);
}
public function addBook($title, $author, $price) {
$this->addMethodName(self::ADD_BOOK);
$this->addMethodParams(new Param(
new Book(null, $title, $author, $price), self::PARAM_TYPES['XML']));
}
public function deleteBook($id) {
$this->addMethodName(self::DELETE_BOOK);
$this->addMethodParams(new Param($id, self::PARAM_TYPES['INT']));
}
public function getBooks() {
$this->addMethodName(self::GET_BOOKS);
}
public function getBookByTitle($title) {
$this->addMethodName(self::GET_BOOK_BY_TITLE);
$this->addMethodParams(new Param($title, self::PARAM_TYPES['STRING']));
}
}
?>