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: if (!defined('XOOPS_ROOT_PATH')) exit();
33:
34: require_once XOOPS_ROOT_PATH.'/class/xml/rpc/xmlrpcapi.php';
35:
36: class MetaWeblogApi extends XoopsXmlRpcApi
37: {
38: function MetaWeblogApi(&$params, &$response, &$module)
39: {
40: $this->XoopsXmlRpcApi($params, $response, $module);
41: $this->_setXoopsTagMap('storyid', 'postid');
42: $this->_setXoopsTagMap('published', 'dateCreated');
43: $this->_setXoopsTagMap('uid', 'userid');
44:
45: }
46:
47: function newPost()
48: {
49: if (!$this->_checkUser($this->params[1], $this->params[2])) {
50:
51: $this->response->add(new XoopsXmlRpcFault(104));
52: } else {
53: if (!$fields =& $this->_getPostFields(null, $this->params[0])) {
54: $this->response->add(new XoopsXmlRpcFault(106));
55: } else {
56: $missing = array();
57: $post = array();
58: foreach ($fields as $tag => $detail) {
59: $maptag = $this->_getXoopsTagMap($tag);
60: if (!isset($this->params[3][$maptag])) {
61: $data = $this->_getTagCdata($this->params[3]['description'], $maptag, true);
62: if (trim($data) == ''){
63: if ($detail['required']) {
64: $missing[] = $maptag;
65: }
66: } else {
67: $post[$tag] = $data;
68: }
69: } else {
70: $post[$tag] = $this->params[3][$maptag];
71: }
72: }
73: if (count($missing) > 0) {
74: $msg = '';
75: foreach ($missing as $m) {
76: $msg .= '<'.$m.'> ';echo $m;
77: }
78: $this->response->add(new XoopsXmlRpcFault(109, $msg));
79: } else {
80: $newparams = array();
81: $newparams[0] = $this->params[0];
82: $newparams[1] = $this->params[1];
83: $newparams[2] = $this->params[2];
84: foreach ($post as $key => $value) {
85: $newparams[3][$key] =& $value;
86: unset($value);
87: }
88: $newparams[3]['xoops_text'] = $this->params[3]['description'];
89: if (isset($this->params[3]['categories']) && is_array($this->params[3]['categories'])) {
90: foreach ($this->params[3]['categories'] as $k => $v) {
91: $newparams[3]['categories'][$k] = $v;
92: }
93: }
94: $newparams[4] = $this->params[4];
95: $xoopsapi =& $this->_getXoopsApi($newparams);
96: $xoopsapi->_setUser($this->user, $this->isadmin);
97: $xoopsapi->newPost();
98: }
99: }
100: }
101: }
102:
103: function editPost()
104: {
105: if (!$this->_checkUser($this->params[1], $this->params[2])) {
106: $this->response->add(new XoopsXmlRpcFault(104));
107: } else {
108: if (!$fields =& $this->_getPostFields($this->params[0])) {
109: } else {
110: $missing = array();
111: $post = array();
112: foreach ($fields as $tag => $detail) {
113: $maptag = $this->_getXoopsTagMap($tag);
114: if (!isset($this->params[3][$maptag])) {
115: $data = $this->_getTagCdata($this->params[3]['description'], $maptag, true);
116: if (trim($data) == ''){
117: if ($detail['required']) {
118: $missing[] = $tag;
119: }
120: } else {
121: $post[$tag] = $data;
122: }
123: } else {
124: $post[$tag] =& $this->params[3][$maptag];
125: }
126: }
127: if (count($missing) > 0) {
128: $msg = '';
129: foreach ($missing as $m) {
130: $msg .= '<'.$m.'> ';
131: }
132: $this->response->add(new XoopsXmlRpcFault(109, $msg));
133: } else {
134: $newparams = array();
135: $newparams[0] = $this->params[0];
136: $newparams[1] = $this->params[1];
137: $newparams[2] = $this->params[2];
138: foreach ($post as $key => $value) {
139: $newparams[3][$key] =& $value;
140: unset($value);
141: }
142: if (isset($this->params[3]['categories']) && is_array($this->params[3]['categories'])) {
143: foreach ($this->params[3]['categories'] as $k => $v) {
144: $newparams[3]['categories'][$k] = $v;
145: }
146: }
147: $newparams[3]['xoops_text'] = $this->params[3]['description'];
148: $newparams[4] = $this->params[4];
149: $xoopsapi =& $this->_getXoopsApi($newparams);
150: $xoopsapi->_setUser($this->user, $this->isadmin);
151: $xoopsapi->editPost();
152: }
153: }
154: }
155: }
156:
157: function getPost()
158: {
159: if (!$this->_checkUser($this->params[1], $this->params[2])) {
160: $this->response->add(new XoopsXmlRpcFault(104));
161: } else {
162: $xoopsapi =& $this->_getXoopsApi($this->params);
163: $xoopsapi->_setUser($this->user, $this->isadmin);
164: $ret =& $xoopsapi->getPost(false);
165: if (is_array($ret)) {
166: $struct = new XoopsXmlRpcStruct();
167: $content = '';
168: foreach ($ret as $key => $value) {
169: $maptag = $this->_getXoopsTagMap($key);
170: switch($maptag) {
171: case 'userid':
172: $struct->add('userid', new XoopsXmlRpcString($value));
173: break;
174: case 'dateCreated':
175: $struct->add('dateCreated', new XoopsXmlRpcDatetime($value));
176: break;
177: case 'postid':
178: $struct->add('postid', new XoopsXmlRpcString($value));
179: $struct->add('link', new XoopsXmlRpcString(XOOPS_URL.'/modules/xoopssections/item.php?item='.$value));
180: $struct->add('permaLink', new XoopsXmlRpcString(XOOPS_URL.'/modules/xoopssections/item.php?item='.$value));
181: break;
182: case 'title':
183: $struct->add('title', new XoopsXmlRpcString($value));
184: break;
185: default :
186: $content .= '<'.$key.'>'.trim($value).'</'.$key.'>';
187: break;
188: }
189: }
190: $struct->add('description', new XoopsXmlRpcString($content));
191: $this->response->add($struct);
192: } else {
193: $this->response->add(new XoopsXmlRpcFault(106));
194: }
195: }
196: }
197:
198: function getRecentPosts()
199: {
200: if (!$this->_checkUser($this->params[1], $this->params[2])) {
201: $this->response->add(new XoopsXmlRpcFault(104));
202: } else {
203: $xoopsapi =& $this->_getXoopsApi($this->params);
204: $xoopsapi->_setUser($this->user, $this->isadmin);
205: $ret =& $xoopsapi->getRecentPosts(false);
206: if (is_array($ret)) {
207: $arr = new XoopsXmlRpcArray();
208: $count = count($ret);
209: if ($count == 0) {
210: $this->response->add(new XoopsXmlRpcFault(106, 'Found 0 Entries'));
211: } else {
212: for ($i = 0; $i < $count; $i++) {
213: $struct = new XoopsXmlRpcStruct();
214: $content = '';
215: foreach($ret[$i] as $key => $value) {
216: $maptag = $this->_getXoopsTagMap($key);
217: switch($maptag) {
218: case 'userid':
219: $struct->add('userid', new XoopsXmlRpcString($value));
220: break;
221: case 'dateCreated':
222: $struct->add('dateCreated', new XoopsXmlRpcDatetime($value));
223: break;
224: case 'postid':
225: $struct->add('postid', new XoopsXmlRpcString($value));
226: $struct->add('link', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
227: $struct->add('permaLink', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
228: break;
229: case 'title':
230: $struct->add('title', new XoopsXmlRpcString($value));
231: break;
232: default :
233: $content .= '<'.$key.'>'.trim($value).'</'.$key.'>';
234: break;
235: }
236: }
237: $struct->add('description', new XoopsXmlRpcString($content));
238: $arr->add($struct);
239: unset($struct);
240: }
241: $this->response->add($arr);
242: }
243: } else {
244: $this->response->add(new XoopsXmlRpcFault(106));
245: }
246: }
247: }
248:
249: function getCategories()
250: {
251: if (!$this->_checkUser($this->params[1], $this->params[2])) {
252: $this->response->add(new XoopsXmlRpcFault(104));
253: } else {
254: $xoopsapi =& $this->_getXoopsApi($this->params);
255: $xoopsapi->_setUser($this->user, $this->isadmin);
256: $ret =& $xoopsapi->getCategories(false);
257: if (is_array($ret)) {
258: $arr = new XoopsXmlRpcArray();
259: foreach ($ret as $id => $detail) {
260: $struct = new XoopsXmlRpcStruct();
261: $struct->add('description', new XoopsXmlRpcString($detail));
262: $struct->add('htmlUrl', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/index.php?storytopic='.$id));
263: $struct->add('rssUrl', new XoopsXmlRpcString(''));
264: $catstruct = new XoopsXmlRpcStruct();
265: $catstruct->add($detail['title'], $struct);
266: $arr->add($catstruct);
267: unset($struct);
268: unset($catstruct);
269: }
270: $this->response->add($arr);
271: } else {
272: $this->response->add(new XoopsXmlRpcFault(106));
273: }
274: }
275: }
276: }
277: ?>