| 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: | |