[ Index ]

PHP Cross Reference of Nucleus CMS v3.51 code documentation

title

Body

[close]

/nucleus/xmlrpc/ -> server.php (source)

   1  <?php
   2  /*

   3   * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)

   4   * Copyright (C) 2002-2009 The Nucleus Group

   5   *

   6   * This program is free software; you can redistribute it and/or

   7   * modify it under the terms of the GNU General Public License

   8   * as published by the Free Software Foundation; either version 2

   9   * of the License, or (at your option) any later version.

  10   * (see nucleus/documentation/index.html#license for more info)

  11   */
  12  
  13  /**

  14   * This script is provides an XML-RPC [1] interface to Nucleus [2].

  15   *

  16   * At this time, the Blogger API [3], the metaWeblog API [4] and

  17   * parts of the Movable Type API [5] are implemented

  18   *

  19   * This script uses the the 'XML-RPC for PHP v1.02' implementation [6]

  20   * All other code was written by Wouter Demuynck [7]

  21   *

  22   * [1] http://www.xmlrpc.com/

  23   * [2] http://nucleuscms.org/

  24   * [3] http://plant.blogger.com/api/

  25   * [4] http://www.xmlrpc.com/metaWeblogApi

  26   * [5] http://www.movabletype.org/docs/mtmanual_programmatic.html

  27   * [6] http://phpxmlrpc.sourceforge.net/

  28   * [7] http://demuynck.org/

  29   *

  30   *

  31   * The Blogger API: (more info in the documentation)

  32   *

  33   *    blogger.newPost

  34   *    blogger.editPost

  35   *    blogger.getUsersBlogs

  36   *    blogger.deletePost

  37   *    blogger.getRecentPosts

  38   *    blogger.getPost

  39   *    blogger.getUserInfo

  40   *    blogger.getTemplate

  41   *    blogger.setTemplate

  42   *

  43   *    Note: The getUserInfo response contains an empty 'lastname' and the full name as

  44   *       'firstname'

  45   * Note: Blogger API methods only affect the body field of items

  46   *

  47   * The metaWeblog API (more info in documentation)

  48   *

  49   * metaWeblog.newPost

  50   * metaWeblog.getPost

  51   * metaWeblog.editPost

  52   * metaWeblog.getCategories

  53   * metaWeblog.newMediaObject

  54   * metaWeblog.getRecentPosts

  55   *

  56   * Note: metaWeblog API methods only affect the body and title fields of items.

  57   *       the extended part is left untouched (and empty for new posts)

  58   *

  59   * The Movable Type API

  60   *

  61   * mt.supportedMethods

  62   *

  63   * @license http://nucleuscms.org/license.txt GNU General Public License

  64   * @copyright Copyright (C) 2002-2009 The Nucleus Group

  65   * @version $Id: server.php 1388 2009-07-18 06:31:28Z shizuki $

  66   */
  67  $CONF = array();
  68  require ("../../config.php");    // include Nucleus libs and code

  69  include($DIR_LIBS . "xmlrpc.inc.php");
  70  include($DIR_LIBS . "xmlrpcs.inc.php");
  71  
  72  /* define xmlrpc settings */

  73  $xmlrpc_internalencoding = _CHARSET;
  74  $xmlrpc_defencoding = 'UTF-8';
  75  
  76  /* definition of available methods */

  77  
  78  $functionDefs = array();
  79  
  80  // load server functions

  81  include ('api_blogger.inc.php');
  82  include ('api_metaweblog.inc.php');
  83  // include('api_nucleus.inc.php'); // uncomment if you still want to use the nucleus.* methods

  84  include ('api_mt.inc.php');
  85  
  86  
  87  // create server

  88  $s = new xmlrpc_server( $functionDefs );
  89  
  90  
  91  /* ------------------------------ private functions ---------------------------------- */

  92  
  93  /**

  94    * Adds an item to the given blog. Username and password are required to login

  95    */
  96  function _addItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $catname = "") {
  97      $blog = new BLOG($blogid);
  98      $timestamp = $blog->getCorrectTime();
  99      return _addDatedItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $timestamp, 0, $catname);
 100  }
 101  
 102  /**

 103    * Adds item to blog, with time of item given

 104    */
 105  function _addDatedItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $timestamp, $future, $catname = "") {
 106      // 1. login

 107      $mem = new MEMBER();
 108  
 109      if (!$mem->login($username, $password))
 110          return _error(1,"Could not log in");
 111  
 112      // 2. check if allowed to add to blog

 113      if (!BLOG::existsID($blogid))
 114          return _error(2,"No such blog ($blogid)");
 115      if (!$mem->teamRights($blogid))
 116          return _error(3,"Not a team member");
 117      if (!trim($body))
 118          return _error(4,"Cannot add empty items!");
 119  
 120      // 3. calculate missing vars

 121      $blog = new BLOG($blogid);
 122  
 123      // get category id (or id for default category when false category)

 124      $catid = $blog->getCategoryIdFromName($catname);
 125  
 126      if ($publish == 1)
 127          $draft = 0;
 128      else
 129          $draft = 1;
 130      if ($closed != 1)
 131          $closed = 0;
 132  
 133      // 4. add to blog

 134      $itemid = $blog->additem($catid, $title, $body, $more, $blogid, $mem->getID(), $timestamp, $closed, $draft);
 135  
 136      // [TODO] ping weblogs.com ?

 137  
 138      return new xmlrpcresp(new xmlrpcval($itemid,"string"));
 139  }
 140  
 141  /**

 142    * Updates an item. Username and password are required to login

 143    */
 144  function _edititem($itemid, $username, $password, $catid, $title, $body, $more, $wasdraft, $publish, $closed) {
 145      global $manager;
 146  
 147      // 1. login

 148      $mem = new MEMBER();
 149      if (!$mem->login($username, $password))
 150          return _error(1,"Could not log in");
 151  
 152      // 2. check if allowed to add to blog

 153      if (!$manager->existsItem($itemid,1,1))
 154          return _error(6,"No such item ($itemid)");
 155      if (!$mem->canAlterItem($itemid))
 156          return _error(7,"Not allowed to alter item");
 157  
 158      // 3. update item

 159      ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, 0);
 160  
 161      return new xmlrpcresp(new xmlrpcval(1,"boolean"));
 162  }
 163  
 164  /**

 165    * Gives the list of blogs to which the user with given name and password has access

 166    */
 167  function _getUsersBlogs($username, $password) {
 168      // 1. Try to login

 169      $mem = new MEMBER();
 170      if (!$mem->login($username, $password))
 171          return _error(1,"Could not log in");
 172  
 173      // 2. Get list of blogs

 174  
 175      $structarray = array();
 176      $query =  "SELECT bnumber, bname, burl"
 177              . ' FROM '.sql_table('blog').', '.sql_table('team')
 178              . " WHERE tblog=bnumber and tmember=" . $mem->getID()
 179              . " ORDER BY bname";
 180      $r = sql_query($query);
 181  
 182      while ($obj = sql_fetch_object($r)) {
 183          if ($obj->burl)
 184              $blogurl = $obj->burl;
 185          else
 186              $blogurl = 'http://';
 187  
 188          $newstruct = new xmlrpcval(array(
 189              "url" => new xmlrpcval($blogurl,"string"),
 190              "blogid" => new xmlrpcval($obj->bnumber,"string"),
 191              "blogName" => new xmlrpcval($obj->bname,"string")
 192          ),'struct');
 193          array_push($structarray, $newstruct);
 194      }
 195  
 196      return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
 197  }
 198  
 199  
 200  function _getUserInfo($username, $password) {
 201      // 1. login

 202      $mem = new MEMBER();
 203      if (!$mem->login($username, $password))
 204          return _error(1,"Could not log in");
 205  
 206      // 3. return the info

 207      // Structure returned has nickname, userid, url, email, lastname, firstname

 208  
 209      $newstruct = new xmlrpcval(array(
 210          "nickname" => new xmlrpcval($mem->getDisplayName(),"string"),
 211          "userid" => new xmlrpcval($mem->getID(),"string"),
 212          "url" => new xmlrpcval($mem->getURL(),"string"),
 213          "email" => new xmlrpcval($mem->getEmail(),"string"),
 214          "lastname" => new xmlrpcval("","string"),
 215          "firstname" => new xmlrpcval($mem->getRealName(),"string")
 216      ),'struct');
 217  
 218      return new xmlrpcresp($newstruct);
 219  
 220  
 221  }
 222  
 223  /**

 224    * deletes an item

 225    */
 226  function _deleteItem($itemid, $username, $password) {
 227      global $manager;
 228  
 229      // 1. login

 230      $mem = new MEMBER();
 231      if (!$mem->login($username, $password))
 232          return _error(1,"Could not log in");
 233  
 234      // 2. check if allowed

 235      if (!$manager->existsItem($itemid,1,1))
 236          return _error(6,"No such item ($itemid)");
 237      $blogid = getBlogIDFromItemID($itemid);
 238      if (!$mem->teamRights($blogid))
 239          return _error(3,"Not a team member");
 240  
 241      // delete the item

 242      ITEM::delete($itemid);
 243  
 244      return new xmlrpcresp(new xmlrpcval(1,"boolean"));
 245  }
 246  
 247  /**

 248    * Returns a template

 249    */
 250  function _getSkinPart($blogid, $username, $password, $type) {
 251      // 1. login

 252      $mem = new MEMBER();
 253      if (!$mem->login($username, $password))
 254          return _error(1,"Could not log in");
 255  
 256      // 2. check if allowed

 257      if (!BLOG::existsID($blogid))
 258          return _error(2,"No such blog ($blogid)");
 259      if (!$mem->teamRights($blogid))
 260          return _error(3,"Not a team member");
 261  
 262      // 3. return skin part

 263      $blog = new BLOG($blogid);
 264      $skin = new SKIN($blog->getDefaultSkin());
 265      return new xmlrpcresp(new xmlrpcval($skin->getContent($type),"string"));
 266  
 267  }
 268  
 269  function _setSkinPart($blogid, $username, $password, $content, $type) {
 270      // 1. login

 271      $mem = new MEMBER();
 272      if (!$mem->login($username, $password))
 273          return _error(1,"Could not log in");
 274  
 275      // 2. check if allowed

 276      if (!BLOG::existsID($blogid))
 277          return _error(2,"No such blog ($blogid)");
 278      if (!$mem->teamRights($blogid))
 279          return _error(3,"Not a team member");
 280  
 281      // 3. update skin part

 282      $blog = new BLOG($blogid);
 283      $skin = new SKIN($blog->getDefaultSkin());
 284      $skin->update($type, $content);
 285  
 286      return new xmlrpcresp(new xmlrpcval(1,'boolean'));
 287  }
 288  
 289  /**

 290    * Some convenience methods

 291    */
 292  
 293  function _getScalar($m, $idx) {
 294      $v = $m->getParam($idx);
 295      return $v->scalarval();
 296  }
 297  
 298  function _getStructVal($struct, $key) {
 299      $t = $struct->structmem($key);
 300      if (!$t) 
 301          return '';    // no such struct value

 302      else
 303          return $t->scalarval();
 304  }
 305  
 306  function _getArrayVal($a, $idx) {
 307      $t = $a->arraymem($idx);
 308      return $t->scalarval();
 309  }
 310  
 311  /**

 312    * Returns an XML-RPC error response

 313    * $err is the error number (>0, will be added to $xmlrpcerruser)

 314    */
 315  function _error($err, $msg) {
 316      global $xmlrpcerruser;
 317      return new xmlrpcresp(0, $xmlrpcerruser + $err, $msg);
 318  }
 319  ?>


Generated: Sun Aug 1 03:56:06 2010
Open Source related documentation for developers.