4 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
5 * Copyright (C) 2002-2012 The Nucleus Group
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 * (see nucleus/documentation/index.html#license for more info)
14 * This file contains definitions for the methods in the Movable Type API
16 * Wouter Demuynck 2003-08-31
18 * @license http://nucleuscms.org/license.txt GNU General Public License
19 * @copyright Copyright (C) 2002-2012 The Nucleus Group
21 * * $NucleusJP: api_mt.inc.php,v 1.5 2006/07/17 20:03:45 kimitake Exp $
24 // mt.supportedMethods
25 $f_mt_supportedMethods_sig = array(array(
27 $xmlrpcArray // array of strings
29 $f_mt_supportedMethods_doc = 'returns an array of supported methods';
30 function f_mt_supportedMethods($m) {
31 $res = new xmlrpcresp(new xmlrpcval(
33 new xmlrpcval('mt.supportedMethods', 'string'),
34 new xmlrpcval('mt.supportedTextFilters', 'string'),
35 new xmlrpcval('mt.publishPost', 'string'),
36 new xmlrpcval('mt.getCategoryList', 'string'),
37 new xmlrpcval('mt.getPostCategories', 'string'),
38 new xmlrpcval('mt.setPostCategories', 'string'),
39 new xmlrpcval('mt.getRecentPostTitles', 'string'),
40 new xmlrpcval('mt.getTrackbackPings','string'),
46 // mt.supportedTextFilters
47 $f_mt_supportedTextFilters_sig = array(array(
49 $xmlrpcArray // array of structs
51 $f_mt_supportedTextFilters_doc = 'returns the supported text filters';
52 function f_mt_supportedTextFilters($m) {
53 $res = new xmlrpcresp(new xmlrpcval(
55 // no text filters in nucleus
62 $f_mt_getCategoryList_sig = array(array(
64 $xmlrpcArray, // array of structs
67 $xmlrpcString, // blogid
68 $xmlrpcString, // username
69 $xmlrpcString // password
72 $f_mt_getCategoryList_doc = 'Returns a list of all categories defined in the weblog';
73 function f_mt_getCategoryList($m) {
74 $blogid = _getScalar($m,0);
75 $username = _getScalar($m,1);
76 $password = _getScalar($m,2);
78 return _mt_categoryList($blogid, $username, $password);
82 $f_mt_publishPost_sig = array(array(
84 $xmlrpcBoolean, // true
87 $xmlrpcString, // itemid
88 $xmlrpcString, // username
89 $xmlrpcString // password
91 $f_mt_publishPost_doc = 'Transfers an item from the "draft" state to the "published" state. For items that were published earlier, does nothing.';
92 function f_mt_publishPost($m) {
93 $itemid = intval(_getScalar($m, 0));
94 $username = _getScalar($m, 1);
95 $password = _getScalar($m, 2);
97 return _mt_publishPost($itemid, $username, $password);
100 // mt.getPostCategories
101 $f_mt_getPostCategories_sig = array(array(
103 $xmlrpcArray, // array of structs
105 $xmlrpcString, // itemid
106 $xmlrpcString, // username
107 $xmlrpcString // password
109 $f_mt_getPostCategories_doc = 'Returns a list of all categories to which the post is assigned.';
110 function f_mt_getPostCategories($m) {
111 $itemid = intval(_getScalar($m, 0));
112 $username = _getScalar($m, 1);
113 $password = _getScalar($m, 2);
115 return _mt_getPostCategories($itemid, $username, $password);
118 // mt.setPostCategories
119 $f_mt_setPostCategories_sig = array(array(
121 $xmlrpcBoolean, // true
123 $xmlrpcString, // itemid
124 $xmlrpcString, // username
125 $xmlrpcString, // password
126 $xmlrpcArray // categories
128 $f_mt_setPostCategories_doc = 'Sets the categories for a post. Only the primary category will be stored';
129 function f_mt_setPostCategories($m) {
130 $itemid = intval(_getScalar($m, 0));
131 $username = _getScalar($m, 1);
132 $password = _getScalar($m, 2);
134 $categories = $m->getParam(3);
135 $iSize = $categories->arraysize();
138 for ($i=0;$i<$iSize;$i++) {
139 $struct = $categories->arraymem($i);
140 $bPrimary = $struct->structmem('isPrimary');
142 $bPrimary = $bPrimary->scalarval();
144 $bPrimary = 1; // "Using isPrimary to set the primary category is optional--
145 // in the absence of this flag, the first struct in the array
146 // will be assigned the primary category for the post." (MT doc)
148 $category = $struct->structmem('categoryId');
149 $category = $category->scalarval();
154 return _mt_setPostCategories($itemid, $username, $password, $category);
157 // mt.getRecentPostTitles
158 $f_mt_getRecentPostTitles_sig = array(array(
160 $xmlrpcArray, // array of structs
162 $xmlrpcString, // blogid
163 $xmlrpcString, // userid
164 $xmlrpcString, // password,
165 $xmlrpcInt // number of posts
167 $f_mt_getRecentPostTitles_doc = 'Returns a bandwidth-friendly list of the most recent posts in the system.';
168 function f_mt_getRecentPostTitles($m) {
169 $blogid = intval(_getScalar($m, 0));
170 $username = _getScalar($m, 1);
171 $password = _getScalar($m, 2);
172 $iAmount = intval(_getScalar($m, 3));
174 return _mt_getRecentPostTitles($blogid, $username, $password, $iAmount);
177 // mt.getTrackbackPings
178 $f_mt_getTrackbackPings_sig = array(array(
180 $xmlrpcArray, // array of structs
182 $xmlrpcString // postid
184 $f_mt_getTrackbackPings_doc = '(this is currently just a placeholder. It returns an empty array.)';
185 function f_mt_getTrackbackPings($m) {
188 $itemid = intval(_getScalar($m, 0));
190 $trackbacks = array ();
191 $tbstruct = array ();
195 'trackbacks' => &$trackbacks
197 $manager->notify('RetrieveTrackback', $param);
199 while (list(,$v) = each ($trackbacks)) {
200 $tbstruct[] = new xmlrpcval(
202 "pingTitle" => new xmlrpcval($v['title'], "string"),
203 "pingURL" => new xmlrpcval($v['url'], "string"),
204 "pingIP" => new xmlrpcval($v['ip'], "string")
209 return new xmlrpcresp(new xmlrpcval( $tbstruct , "array"));
212 $functionDefs = array_merge($functionDefs,
214 "mt.supportedMethods" =>
215 array( "function" => "f_mt_supportedMethods",
216 "signature" => $f_mt_supportedMethods_sig,
217 "docstring" => $f_mt_supportedMethods_doc),
219 "mt.supportedTextFilters" =>
220 array( "function" => "f_mt_supportedTextFilters",
221 "signature" => $f_mt_supportedTextFilters_sig,
222 "docstring" => $f_mt_supportedTextFilters_doc),
224 "mt.getCategoryList" =>
225 array( "function" => "f_mt_getCategoryList",
226 "signature" => $f_mt_getCategoryList_sig,
227 "docstring" => $f_mt_getCategoryList_doc),
230 array( "function" => "f_mt_publishPost",
231 "signature" => $f_mt_publishPost_sig,
232 "docstring" => $f_mt_publishPost_doc),
234 "mt.getPostCategories" =>
235 array( "function" => "f_mt_getPostCategories",
236 "signature" => $f_mt_getPostCategories_sig,
237 "docstring" => $f_mt_getPostCategories_doc),
239 "mt.setPostCategories" =>
240 array( "function" => "f_mt_setPostCategories",
241 "signature" => $f_mt_setPostCategories_sig,
242 "docstring" => $f_mt_setPostCategories_doc),
244 "mt.getRecentPostTitles" =>
245 array( "function" => "f_mt_getRecentPostTitles",
246 "signature" => $f_mt_getRecentPostTitles_sig,
247 "docstring" => $f_mt_getRecentPostTitles_doc),
249 "mt.getTrackbackPings" =>
250 array( "function" => "f_mt_getTrackbackPings",
251 "signature" => $f_mt_getTrackbackPings_sig,
252 "docstring" => $f_mt_getTrackbackPings_doc)
257 function _mt_setPostCategories($itemid, $username, $password, $category) {
262 if (!$mem->login($username, $password))
263 return _error(1,"Could not log in");
265 // check if item exists
266 if (!$manager->existsItem($itemid,1,1))
267 return _error(6,"No such item ($itemid)");
269 $blogid = getBlogIDFromItemID($itemid);
270 $blog = new BLOG($blogid);
272 if (!$mem->canAlterItem($itemid))
273 return _error(7,"Not allowed to alter item");
275 $old =& $manager->getItem($itemid,1,1);
277 $catid = $blog->getCategoryIdFromName($category);
280 if ($old['draft'] && $publish) {
287 return _edititem($itemid, $username, $password, $catid, $old['title'], $old['body'], $old['more'], $wasdraft, $publish, $old['closed']);
291 function _mt_getPostCategories($itemid, $username, $password) {
296 if (!$mem->login($username, $password))
297 return _error(1,"Could not log in");
299 // check if item exists
300 if (!$manager->existsItem($itemid,1,1))
301 return _error(6,"No such item ($itemid)");
303 $blogid = getBlogIDFromItemID($itemid);
304 $blog = new BLOG($blogid);
306 if (!$mem->canAlterItem($itemid))
307 return _error(7, 'You are not allowed to request this information');
309 $info =& $manager->getItem($itemid,1,1);
310 $catName = $blog->getCategoryName($info['catid']);
312 $struct = new xmlrpcval(
314 'categoryId' => new xmlrpcval($catName, 'string'),
315 'categoryName' => new xmlrpcval($catName, 'string'),
316 'isPrimary' => new xmlrpcval(1, 'boolean')
320 return new xmlrpcresp(new xmlrpcval(array($struct), 'array'));
324 function _mt_publishPost($itemid, $username, $password) {
327 if (!$manager->existsItem($itemid,1,1))
328 return _error(6,"No such item ($itemid)");
331 $blogid = getBlogIDFromItemID($itemid);
332 $blog = new BLOG($blogid);
333 $old =& $manager->getItem($itemid,1,1);
335 return _edititem($itemid, $username, $password, $old['catid'], $old['title'], $old['body'], $old['more'], $old['draft'], 1, $old['closed']);
339 function _mt_categoryList($blogid, $username, $password) {
342 if (!$mem->login($username, $password))
343 return _error(1,"Could not log in");
345 // check if on team and blog exists
346 if (!BLOG::existsID($blogid))
347 return _error(2,"No such blog ($blogid)");
348 if (!$mem->teamRights($blogid))
349 return _error(3,"Not a team member");
351 $b = new BLOG($blogid);
353 $categorystruct = array();
355 $query = "SELECT cname, cdesc, catid"
356 . ' FROM '.sql_table('category')
357 . " WHERE cblog=" . intval($blogid)
359 $r = sql_query($query);
361 while ($obj = sql_fetch_object($r)) {
363 $categorystruct[] = new xmlrpcval(
365 "categoryName" => new xmlrpcval($obj->cname,"string"),
366 "categoryId" => new xmlrpcval($obj->cname,"string")
373 return new xmlrpcresp(new xmlrpcval( $categorystruct , "array"));
377 function _mt_getRecentPostTitles($blogid, $username, $password, $iAmount)
379 $blogid = intval($blogid);
380 $iAmount = intval($iAmount);
384 if (!$mem->login($username, $password))
385 return _error(1,"Could not log in");
387 // 2. check if allowed
388 if (!BLOG::existsID($blogid))
389 return _error(2,"No such blog ($blogid)");
390 if (!$mem->teamRights($blogid))
391 return _error(3,"Not a team member");
392 $iAmount = intval($iAmount);
394 return _error(5,"Amount parameter must be positive");
396 // 3. create and return list of recent items
397 // Struct returned has dateCreated, userid, postid and title
399 $blog = new BLOG($blogid);
401 $structarray = array(); // the array in which the structs will be stored
403 $query = "SELECT inumber, ititle as title, itime, iauthor"
404 .' FROM '.sql_table('item')
405 ." WHERE iblog=$blogid"
406 ." ORDER BY itime DESC"
408 $r = sql_query($query);
410 while ($row = sql_fetch_assoc($r)) {
412 $newstruct = new xmlrpcval(array(
413 "dateCreated" => new xmlrpcval(iso8601_encode(strtotime($row['itime'])),"dateTime.iso8601"),
414 "postid" => new xmlrpcval($row['inumber'],"string"),
415 "title" => new xmlrpcval($row['title'],"string"),
416 "userid" => new xmlrpcval($row['iauthor'],"string")
419 array_push($structarray, $newstruct);
422 return new xmlrpcresp(new xmlrpcval( $structarray , "array"));