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 XoopsApi extends XoopsXmlRpcApi
37: {
38:
39: function XoopsApi(&$params, &$response, &$module)
40: {
41: $this->XoopsXmlRpcApi($params, $response, $module);
42: }
43:
44: function newPost()
45: {
46: if (!$this->_checkUser($this->params[1], $this->params[2])) {
47: $this->response->add(new XoopsXmlRpcFault(104));
48: } else {
49: if (!$fields =& $this->_getPostFields(null, $this->params[0])) {
50: $this->response->add(new XoopsXmlRpcFault(106));
51: } else {
52: $missing = array();
53: foreach ($fields as $tag => $detail) {
54: if (!isset($this->params[3][$tag])) {
55: $data = $this->_getTagCdata($this->params[3]['xoops_text'], $tag, true);
56: if (trim($data) == ''){
57: if ($detail['required']) {
58: $missing[] = $tag;
59: }
60: } else {
61: $post[$tag] =& $data;
62: }
63: } else {
64: $post[$tag] =& $this->params[3][$tag];
65: }
66: }
67: if (count($missing) > 0) {
68: $msg = '';
69: foreach ($missing as $m) {
70: $msg .= '<'.$m.'> ';
71: }
72: $this->response->add(new XoopsXmlRpcFault(109, $msg));
73: } else {
74:
75: include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
76: $story = new NewsStory();
77: $error = false;
78: if (intval($this->params[4]) > 0) {
79: if (!$this->_checkAdmin()) {
80:
81: $error = true;
82: $this->response->add(new XoopsXmlRpcFault(111));
83: } else {
84: $story->setType('admin');
85: $story->setApproved(true);
86: $story->setPublished(time());
87: }
88: } else {
89: if (!$this->_checkAdmin()) {
90: $story->setType('user');
91: } else {
92: $story->setType('admin');
93: }
94: }
95: if (!$error) {
96: if (isset($post['categories']) && !empty($post['categories'][0])) {
97: $story->setTopicId(intval($post['categories'][0]['categoryId']));
98: } else {
99: $story->setTopicId(1);
100: }
101: $story->setTitle(addslashes(trim($post['title'])));
102: if (isset($post['moretext'])) {
103: $story->setBodytext(addslashes(trim($post['moretext'])));
104: }
105: if (!isset($post['hometext'])) {
106: $story->setHometext(addslashes(trim($this->params[3]['xoops_text'])));
107: } else {
108: $story->setHometext(addslashes(trim($post['hometext'])));
109: }
110: $story->setUid($this->user->getVar('uid'));
111: $story->setHostname($_SERVER['REMOTE_ADDR']);
112: if (!$this->_checkAdmin()) {
113: $story->setNohtml(1);
114: } else {
115: $story->setNohtml(0);
116: }
117: $story->setNosmiley(0);
118: $story->setNotifyPub(1);
119: $story->setTopicalign('R');
120: $ret = $story->store();
121: if (!$ret) {
122: $this->response->add(new XoopsXmlRpcFault(106));
123: } else {
124: $this->response->add(new XoopsXmlRpcString($ret));
125: }
126: }
127: }
128: }
129: }
130: }
131:
132: function editPost()
133: {
134: if (!$this->_checkUser($this->params[1], $this->params[2])) {
135: $this->response->add(new XoopsXmlRpcFault(104));
136: } else {
137: if (!$fields =& $this->_getPostFields($this->params[0])) {
138: } else {
139: $missing = array();
140: foreach ($fields as $tag => $detail) {
141: if (!isset($this->params[3][$tag])) {
142: $data = $this->_getTagCdata($this->params[3]['xoops_text'], $tag, true);
143: if (trim($data) == ''){
144: if ($detail['required']) {
145: $missing[] = $tag;
146: }
147: } else {
148: $post[$tag] = $data;
149: }
150: } else {
151: $post[$tag] = $this->params[3][$tag];
152: }
153: }
154: if (count($missing) > 0) {
155: $msg = '';
156: foreach ($missing as $m) {
157: $msg .= '<'.$m.'> ';
158: }
159: $this->response->add(new XoopsXmlRpcFault(109, $msg));
160: } else {
161:
162: include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
163: $story = new NewsStory($this->params[0]);
164: $storyid = $story->storyid();
165: if (empty($storyid)) {
166: $this->response->add(new XoopsXmlRpcFault(106));
167: } elseif (!$this->_checkAdmin()) {
168: $this->response->add(new XoopsXmlRpcFault(111));
169: } else {
170: $story->setTitle(addslashes(trim($post['title'])));
171: if (isset($post['moretext'])) {
172: $story->setBodytext(addslashes(trim($post['moretext'])));
173: }
174: if (!isset($post['hometext'])) {
175: $story->setHometext(addslashes(trim($this->params[3]['xoops_text'])));
176: } else {
177: $story->setHometext(addslashes(trim($post['hometext'])));
178: }
179: if ($this->params[4]) {
180: $story->setApproved(true);
181: $story->setPublished(time());
182: }
183: $story->setTopicalign('R');
184: if (!$story->store()) {
185: $this->response->add(new XoopsXmlRpcFault(106));
186: } else {
187: $this->response->add(new XoopsXmlRpcBoolean(true));
188: }
189: }
190: }
191: }
192: }
193: }
194:
195: function deletePost()
196: {
197: if (!$this->_checkUser($this->params[1], $this->params[2])) {
198: $this->response->add(new XoopsXmlRpcFault(104));
199: } else {
200: if (!$this->_checkAdmin()) {
201: $this->response->add(new XoopsXmlRpcFault(111));
202: } else {
203:
204: include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
205: $story = new NewsStory($this->params[0]);
206: if (!$story->delete()) {
207: $this->response->add(new XoopsXmlRpcFault(106));
208: } else {
209: $this->response->add(new XoopsXmlRpcBoolean(true));
210: }
211: }
212: }
213: }
214:
215:
216: function &getPost($respond=true)
217: {
218: if (!$this->_checkUser($this->params[1], $this->params[2])) {
219: $this->response->add(new XoopsXmlRpcFault(104));
220: } else {
221:
222: include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
223: $story = new NewsStory($this->params[0]);
224: $ret = array('uid' => $story->uid(), 'published' => $story->published(), 'storyid' => $story->storyId(), 'title' => $story->title('Edit'), 'hometext' => $story->hometext('Edit'), 'moretext' => $story->bodytext('Edit'));
225: if (!$respond) {
226: return $ret;
227: } else {
228: if (!$ret) {
229: $this->response->add(new XoopsXmlRpcFault(106));
230: } else {
231: $struct = new XoopsXmlRpcStruct();
232: $content = '';
233: foreach ($ret as $key => $value) {
234: switch($key) {
235: case 'uid':
236: $struct->add('userid', new XoopsXmlRpcString($value));
237: break;
238: case 'published':
239: $struct->add('dateCreated', new XoopsXmlRpcDatetime($value));
240: break;
241: case 'storyid':
242: $struct->add('postid', new XoopsXmlRpcString($value));
243: $struct->add('link', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
244: $struct->add('permaLink', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
245: break;
246: case 'title':
247: $struct->add('title', new XoopsXmlRpcString($value));
248: break;
249: default :
250: $content .= '<'.$key.'>'.trim($value).'</'.$key.'>';
251: break;
252: }
253: }
254: $struct->add('description', new XoopsXmlRpcString($content));
255: $this->response->add($struct);
256: }
257: }
258:
259: $ret = null;
260: return $ret;
261: }
262: }
263:
264: function &getRecentPosts($respond=true)
265: {
266: if (!$this->_checkUser($this->params[1], $this->params[2])) {
267: $this->response->add(new XoopsXmlRpcFault(104));
268: } else {
269: include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
270: if (isset($this->params[4]) && intval($this->params[4]) > 0) {
271: $stories = NewsStory::getAllPublished(intval($this->params[3]), 0, $this->params[4]);
272: } else {
273: $stories = NewsStory::getAllPublished(intval($this->params[3]));
274: }
275: $scount = count($stories);
276: $ret = array();
277: for ($i = 0; $i < $scount; $i++) {
278: $ret[] = array('uid' => $stories[$i]->uid(), 'published' => $stories[$i]->published(), 'storyid' => $stories[$i]->storyId(), 'title' => $stories[$i]->title('Edit'), 'hometext' => $stories[$i]->hometext('Edit'), 'moretext' => $stories[$i]->bodytext('Edit'));
279: }
280: if (!$respond) {
281: return $ret;
282: } else {
283: if (count($ret) == 0) {
284: $this->response->add(new XoopsXmlRpcFault(106, 'Found 0 Entries'));
285: } else {
286: $arr = new XoopsXmlRpcArray();
287: $count = count($ret);
288: for ($i = 0; $i < $count; $i++) {
289: $struct = new XoopsXmlRpcStruct();
290: $content = '';
291: foreach($ret[$i] as $key => $value) {
292: switch($key) {
293: case 'uid':
294: $struct->add('userid', new XoopsXmlRpcString($value));
295: break;
296: case 'published':
297: $struct->add('dateCreated', new XoopsXmlRpcDatetime($value));
298: break;
299: case 'storyid':
300: $struct->add('postid', new XoopsXmlRpcString($value));
301: $struct->add('link', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
302: $struct->add('permaLink', new XoopsXmlRpcString(XOOPS_URL.'/modules/news/article.php?item_id='.$value));
303: break;
304: case 'title':
305: $struct->add('title', new XoopsXmlRpcString($value));
306: break;
307: default :
308: $content .= '<'.$key.'>'.trim($value).'</'.$key.'>';
309: break;
310: }
311: }
312: $struct->add('description', new XoopsXmlRpcString($content));
313: $arr->add($struct);
314: unset($struct);
315: }
316: $this->response->add($arr);
317: }
318: }
319:
320: $ret = null;
321: return $ret;
322: }
323: }
324:
325: function &getCategories($respond=true)
326: {
327: if (!$this->_checkUser($this->params[1], $this->params[2])) {
328: $this->response->add(new XoopsXmlRpcFault(104));
329: } else {
330: include_once XOOPS_ROOT_PATH.'/class/xoopstopic.php';
331: $db =& Database::getInstance();
332: $xt = new XoopsTopic($db->prefix('topics'));
333: $ret = $xt->getTopicsList();
334: if (!$respond) {
335: return $ret;
336: } else {
337: if (count($ret) == 0) {
338: $this->response->add(new XoopsXmlRpcFault(106, 'Found 0 Entries'));
339: } else {
340: $arr = new XoopsXmlRpcArray();
341: foreach ($ret as $topic_id => $topic_vars) {
342: $struct = new XoopsXmlRpcStruct();
343: $struct->add('categoryId', new XoopsXmlRpcString($topic_id));
344: $struct->add('categoryName', new XoopsXmlRpcString($topic_vars['title']));
345: $struct->add('categoryPid', new XoopsXmlRpcString($topic_vars['pid']));
346: $arr->add($struct);
347: unset($struct);
348: }
349: $this->response->add($arr);
350: }
351: }
352:
353: $ret = null;
354: return $ret;
355: }
356: }
357: }
358: ?>
359: