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