OSDN Git Service

merged 3.2 code
[nucleus-jp/nucleus-jp-ancient.git] / euc / nucleus / xmlrpc / api_blogger.inc.php
1 <?php\r
2 /** \r
3   * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
4   * Copyright (C) 2002-2004 The Nucleus Group\r
5   *\r
6   * This program is free software; you can redistribute it and/or\r
7   * modify it under the terms of the GNU General Public License\r
8   * as published by the Free Software Foundation; either version 2\r
9   * of the License, or (at your option) any later version.\r
10   * (see nucleus/documentation/index.html#license for more info)\r
11   */\r
12   \r
13 /*\r
14  * This file contains definitions for the methods in the Blogger API\r
15  */\r
16 \r
17 \r
18         // blogger.newPost\r
19         $f_blogger_newPost_sig = array(array(\r
20                         // return type\r
21                         $xmlrpcString,  // itemid of the new item\r
22 \r
23                         // params:\r
24                         $xmlrpcString,  // appkey (ignored)\r
25                         $xmlrpcString,  // blogid\r
26                         $xmlrpcString,  // username\r
27                         $xmlrpcString,  // password\r
28                         $xmlrpcString,  // content\r
29                         $xmlrpcBoolean, // publish boolean (set to false to create draft)\r
30 \r
31                 ));\r
32         $f_blogger_newPost_doc = "Adds a new item to the given blog. Adds it as a draft when publish is false";\r
33         function f_blogger_newPost($m) {\r
34                 $blogid = _getScalar($m,1);\r
35                 $username = _getScalar($m,2);\r
36                 $password = _getScalar($m,3);\r
37                 $content = _getScalar($m,4);\r
38                 $publish = _getScalar($m,5);\r
39                 \r
40                 $title = blogger_extractTitle($content);\r
41                 $category = blogger_extractCategory($content);\r
42                 $content = blogger_removeSpecialTags($content); \r
43 \r
44                 return _addItem($blogid, $username, $password, $title, $content, '', $publish, 0, $category);\r
45         }\r
46 \r
47         // blogger.editPost\r
48         $f_blogger_editPost_sig = array(array(\r
49                         // return type\r
50                         $xmlrpcBoolean, // true or false\r
51 \r
52                         // params:\r
53                         $xmlrpcString,  // appkey (ignored)\r
54                         $xmlrpcString,  // postid\r
55                         $xmlrpcString,  // username\r
56                         $xmlrpcString,  // password\r
57                         $xmlrpcString,  // content\r
58                         $xmlrpcBoolean, // publish boolean (only considered when dealing with a draft)\r
59 \r
60                 ));\r
61         $f_blogger_editPost_doc = "Edits an item of a blog";\r
62         function f_blogger_editPost($m) {\r
63                 global $manager;\r
64                 \r
65                 $itemid = intval(_getScalar($m,1));\r
66                 $username = _getScalar($m,2);\r
67                 $password = _getScalar($m,3);\r
68                 $content = _getScalar($m,4);\r
69                 $publish = _getScalar($m,5);\r
70 \r
71                 $title = blogger_extractTitle($content);\r
72                 $category = blogger_extractCategory($content);\r
73                 $content = blogger_removeSpecialTags($content); \r
74 \r
75                 // get old title and extended part \r
76                 if (!$manager->existsItem($itemid,1,1))\r
77                         return _error(6,"No such item ($itemid)");\r
78                 $old =& $manager->getItem($itemid,1,1);\r
79 \r
80                 $blogid = getBlogIDFromItemID($itemid);\r
81 \r
82                 $blog = new BLOG($blogid);\r
83                 $catid = $blog->getCategoryIdFromName($category);\r
84                 \r
85                 if ($old['draft'] && $publish) {\r
86                         $wasdraft = 1;\r
87                         $publish = 1;\r
88                 } else {\r
89                         $wasdraft = 0;\r
90                 }\r
91 \r
92                 return _edititem($itemid, $username, $password, $catid, $title, $content, $old['more'], $wasdraft, $publish, $old['closed']);\r
93         }\r
94 \r
95 \r
96         // blogger.getUsersBlogs\r
97         $f_blogger_getUsersBlogs_sig = array(array(\r
98                         // return type\r
99                         $xmlrpcArray,   // array containing structs containing blog info\r
100 \r
101                         // params:\r
102                         $xmlrpcString,  // appkey (ignored)\r
103                         $xmlrpcString,  // username\r
104                         $xmlrpcString,  // password\r
105                 ));\r
106         $f_blogger_getUsersBlogs_doc = "Returns a list of all the blogs where the given member is on the team";\r
107         function f_blogger_getUsersBlogs($m) {\r
108                 $username = _getScalar($m,1);\r
109                 $password = _getScalar($m,2);\r
110 \r
111                 return _getUsersBlogs($username, $password);\r
112         }\r
113 \r
114         // blogger.getRecentPosts\r
115         $f_blogger_getRecentPosts_sig = array(array(\r
116                         // return type\r
117                         $xmlrpcArray,   // array of strucs (representing items)\r
118 \r
119                         // params\r
120                         $xmlrpcString,  // appkey (ignored)\r
121                         $xmlrpcString,  // blogid\r
122                         $xmlrpcString,  // username\r
123                         $xmlrpcString,  // password\r
124                         $xmlrpcInt,     // amount of items to return (max = 20)\r
125                 ));\r
126         $f_blogger_getRecentPosts_doc = "Returns a maximum of 20 recent items";\r
127         function f_blogger_getRecentPosts($m) {\r
128                 $blogid = _getScalar($m, 1);\r
129                 $username = _getScalar($m, 2);\r
130                 $password = _getScalar($m, 3);\r
131                 $amount = _getScalar($m, 4);\r
132 \r
133                 return _getRecentItemsBlogger($blogid, $username, $password, $amount);\r
134         }\r
135 \r
136 \r
137         // blogger.getPost\r
138         $f_blogger_getPost_sig = array(array(\r
139                         // return type\r
140                         $xmlrpcStruct,  // A struct representing the item\r
141 \r
142                         // params\r
143                         $xmlrpcString,  // appkey (ignored)\r
144                         $xmlrpcString,  // postid\r
145                         $xmlrpcString,  // username\r
146                         $xmlrpcString,  // password\r
147                 ));\r
148         $f_blogger_getPost_doc = "Returns an item (only the item body!)";\r
149         function f_blogger_getPost($m) {\r
150                 $postid = _getScalar($m, 1);\r
151                 $username = _getScalar($m, 2);\r
152                 $password = _getScalar($m, 3);\r
153 \r
154                 return _getItemBlogger($postid, $username, $password);\r
155         }\r
156 \r
157 \r
158         // blogger.deletePost\r
159         $f_blogger_deletePost_sig = array(array(\r
160                         // return type\r
161                         $xmlrpcBoolean, // boolean (ok or not ok)\r
162 \r
163                         // params\r
164                         $xmlrpcString,  // appkey (ignored)\r
165                         $xmlrpcString,  // postid\r
166                         $xmlrpcString,  // username\r
167                         $xmlrpcString,  // password\r
168                         $xmlrpcBoolean, // publish (ignored)\r
169                 ));\r
170         $f_blogger_deletePost_doc = "Deletes an item";\r
171         function f_blogger_deletePost($m) {\r
172                 $postid = _getScalar($m,1);\r
173                 $username = _getScalar($m, 2);\r
174                 $password = _getScalar($m, 3);\r
175 \r
176                 return _deleteItem($postid, $username, $password);\r
177         }\r
178 \r
179         // blogger.getTemplate\r
180         $f_blogger_getTemplate_sig = array(array(\r
181                         // return type\r
182                         $xmlrpcString,  // the template\r
183 \r
184                         // params\r
185                         $xmlrpcString,  // appkey (ignored)\r
186                         $xmlrpcString,  // blogid\r
187                         $xmlrpcString,  // username\r
188                         $xmlrpcString,  // password\r
189                         $xmlrpcString,  // type of template (main/archiveIndex)\r
190                                 ));\r
191         $f_blogger_getTemplate_doc = "Returns the required part of the default skin for the given blog";\r
192         function f_blogger_getTemplate($m) {\r
193                 $blogid = _getScalar($m,1);\r
194                 $username = _getScalar($m,2);\r
195                 $password = _getScalar($m,3);\r
196                 $type = _getScalar($m,4);\r
197 \r
198                 switch($type) {\r
199                         case "main":\r
200                                 $type = "index";\r
201                                 break;\r
202                         case "archiveIndex":\r
203                                 $type = "archivelist";\r
204                                 break;\r
205                 }\r
206 \r
207                 return _getSkinPart($blogid, $username, $password, $type);\r
208         }\r
209 \r
210         // blogger.setTemplate\r
211         $f_blogger_setTemplate_sig = array(array(\r
212                         // return type\r
213                         $xmlrpcBoolean, // OK or not OK\r
214 \r
215                         // params\r
216                         $xmlrpcString,  // appkey (ignored)\r
217                         $xmlrpcString,  // blogid\r
218                         $xmlrpcString,  // username\r
219                         $xmlrpcString,  // password\r
220                         $xmlrpcString,  // template contents\r
221                         $xmlrpcString,  // type of template (main/archiveIndex)\r
222                         ));\r
223         $f_blogger_setTemplate_doc = "Changes a part of the default skin for the selected blog";\r
224         function f_blogger_setTemplate($m) {\r
225                 $blogid = _getScalar($m,1);\r
226                 $username = _getScalar($m,2);\r
227                 $password = _getScalar($m,3);\r
228                 $content = _getScalar($m,4);\r
229                 $type = _getScalar($m,5);\r
230 \r
231                 switch($type) {\r
232                         case "main":\r
233                                 $type = "index";\r
234                                 break;\r
235                         case "archiveIndex":\r
236                                 $type = "archivelist";\r
237                                 break;\r
238                 }\r
239 \r
240                 return _setSkinPart($blogid, $username, $password, $content, $type);\r
241         }\r
242 \r
243         // blogger.getUserInfo\r
244         $f_blogger_getUserInfo_sig = array(array(\r
245                         // return type\r
246                         $xmlrpcStruct,  // Struct\r
247 \r
248                         // params\r
249                         $xmlrpcString,  // appkey (ignored)\r
250                         $xmlrpcString,  // username\r
251                         $xmlrpcString,  // password\r
252                         ));\r
253         $f_blogger_getUserInfo_doc = "Returns info on the user";\r
254         function f_blogger_getUserInfo($m) {\r
255                 $username = _getScalar($m,1);\r
256                 $password = _getScalar($m,2);\r
257 \r
258                 return _getUserInfo($username, $password);\r
259         }\r
260 \r
261 \r
262         /**\r
263           * Returns a list of recent items \r
264           */\r
265         function _getRecentItemsBlogger($blogid, $username, $password, $amount) {\r
266                 \r
267                 $blogid = intval($blogid);\r
268                 $amount = intval($amount);\r
269                         \r
270                 // 1. login\r
271                 $mem = new MEMBER();\r
272                 if (!$mem->login($username, $password))\r
273                         return _error(1,"Could not log in");\r
274 \r
275                 // 2. check if allowed \r
276                 if (!BLOG::existsID($blogid))\r
277                         return _error(2,"No such blog ($blogid)");\r
278                 if (!$mem->teamRights($blogid))\r
279                         return _error(3,"Not a team member");\r
280                 $amount = intval($amount);\r
281                 if (($amount < 1) or ($amount > 20))\r
282                         return _error(5,"Amount parameter must be in range 1..20");\r
283 \r
284                 // 3. create and return list of recent items\r
285                 // Struct returned has dateCreated, userid, blogid and content\r
286                 \r
287                 $blog = new BLOG($blogid);\r
288 \r
289                 $structarray = array();         // the array in which the structs will be stored\r
290 \r
291                 $query = "SELECT mname, ibody, iauthor, ibody, inumber, ititle as title, itime, cname as category"\r
292                            .' FROM '.sql_table('item').', '.sql_table('category').', '.sql_table('member')\r
293                            ." WHERE iblog=$blogid and icat=catid and iauthor=mnumber"\r
294                            ." ORDER BY itime DESC"\r
295                            ." LIMIT $amount";\r
296                 $r = sql_query($query);\r
297                 \r
298                 while ($row = mysql_fetch_assoc($r)) {\r
299                 \r
300                         // remove linebreaks if needed\r
301                         if ($blog->convertBreaks())\r
302                                 $row['ibody'] = removeBreaks($row['ibody']);\r
303 \r
304                         $content = blogger_specialTags($row) . $row['ibody'];\r
305                 \r
306                         $newstruct = new xmlrpcval(array(\r
307                                 "userid" => new xmlrpcval($row['iauthor'],"string"),\r
308                                 "dateCreated" => new xmlrpcval(iso8601_encode(strtotime($row['itime'])),"dateTime.iso8601"),\r
309                                 "blogid" => new xmlrpcval($blogid,"string"),\r
310                                 "content" => new xmlrpcval($content,"string"),\r
311                                 "postid" => new xmlrpcval($row['inumber'],"string"),\r
312                                 "authorName" => new xmlrpcval($row['mname'],'string'),\r
313                                 "title" => new xmlrpcval($row['title'],'string'),\r
314                         ),'struct');\r
315                         array_push($structarray, $newstruct);           \r
316                 }\r
317 \r
318                 return new xmlrpcresp(new xmlrpcval( $structarray , "array"));\r
319 \r
320         }\r
321         \r
322         /**\r
323           * Returns one item (Blogger version)\r
324           */\r
325         function _getItemBlogger($itemid, $username, $password) {\r
326                 global $manager;\r
327         \r
328                 // 1. login\r
329                 $mem = new MEMBER();\r
330                 if (!$mem->login($username, $password))\r
331                         return _error(1,"Could not log in");\r
332 \r
333                 // 2. check if allowed \r
334                 if (!$manager->existsItem($itemid,1,1))\r
335                         return _error(6,"No such item ($itemid)");\r
336                 $blogid = getBlogIDFromItemID($itemid);\r
337                 if (!$mem->teamRights($blogid))\r
338                         return _error(3,"Not a team member");\r
339 \r
340                 // 3. return the item\r
341                 // Structure returned has dateCreated, userid, blogid and content\r
342 \r
343                 $item =& $manager->getItem($itemid,1,1); // (also allow drafts and future items)\r
344                 $blog = new BLOG($blogid);\r
345                 \r
346                 // get category\r
347                 $item['category'] = $blog->getCategoryName($item['catid']);\r
348                 \r
349                 // remove linebreaks if needed\r
350                 if ($blog->convertBreaks())\r
351                         $item['body'] = removeBreaks($item['body']);\r
352 \r
353                 $content = blogger_specialTags($item) . $item['body'];\r
354 \r
355                 $newstruct = new xmlrpcval(array(\r
356                         "dateCreated" => new xmlrpcval(iso8601_encode($item['timestamp']),"dateTime.iso8601"),\r
357                         "userid" => new xmlrpcval($item['authorid'],"string"),\r
358                         "blogid" => new xmlrpcval($blogid,"string"),\r
359                         "content" => new xmlrpcval($content,"string")\r
360                 ),'struct');\r
361 \r
362                 return new xmlrpcresp($newstruct);\r
363 \r
364 \r
365         }\r
366 \r
367 \r
368         function blogger_extractTitle($body) {\r
369                 return blogger_matchTag('title',$body);\r
370         }\r
371 \r
372         function blogger_extractCategory($body) {\r
373                 return blogger_matchTag('category',$body);\r
374         }       \r
375         \r
376         function blogger_matchTag($tag, $body) {\r
377                 if (preg_match("/<" . $tag .">(.+?)<\/".$tag.">/is",$body,$match)) \r
378                         return $match[1];\r
379                 else\r
380                         return "";\r
381         }\r
382 \r
383         function blogger_removeSpecialTags($body) {\r
384                 $body = preg_replace("/<title>(.+?)<\/title>/","",$body);\r
385                 $body = preg_replace("/<category>(.+?)<\/category>/","",$body);\r
386                 return trim($body);\r
387         }\r
388         \r
389         function blogger_specialTags($item) {\r
390                 $result = "<title>". $item['title']."</title>";\r
391                 $result .= "<category>".$item['category']."</category>";\r
392                 return $result;\r
393         }\r
394         \r
395 \r
396 \r
397         $functionDefs = array_merge($functionDefs,\r
398                 array(\r
399                          "blogger.getUsersBlogs" =>\r
400                          array( "function" => "f_blogger_getUsersBlogs",\r
401                                 "signature" => $f_blogger_getUsersBlogs_sig,\r
402                                 "docstring" => $f_blogger_getUsersBlogs_doc),\r
403 \r
404                          "blogger.newPost" =>\r
405                          array( "function" => "f_blogger_newPost",\r
406                                 "signature" => $f_blogger_newPost_sig,\r
407                                 "docstring" => $f_blogger_newPost_doc),\r
408 \r
409                          "blogger.editPost" =>\r
410                          array( "function" => "f_blogger_editPost",\r
411                                 "signature" => $f_blogger_editPost_sig,\r
412                                 "docstring" => $f_blogger_editPost_doc),\r
413 \r
414                          "blogger.deletePost" =>\r
415                          array( "function" => "f_blogger_deletePost",\r
416                                 "signature" => $f_blogger_deletePost_sig,\r
417                                 "docstring" => $f_blogger_deletePost_doc),\r
418 \r
419                          "blogger.getPost" =>\r
420                          array( "function" => "f_blogger_getPost",\r
421                                 "signature" => $f_blogger_getPost_sig,\r
422                                 "docstring" => $f_blogger_getPost_doc),\r
423 \r
424                          "blogger.getRecentPosts" =>\r
425                          array( "function" => "f_blogger_getRecentPosts",\r
426                                 "signature" => $f_blogger_getRecentPosts_sig,\r
427                                 "docstring" => $f_blogger_getRecentPosts_doc),\r
428 \r
429                          "blogger.getUserInfo" =>\r
430                          array( "function" => "f_blogger_getUserInfo",\r
431                                 "signature" => $f_blogger_getUserInfo_sig,\r
432                                 "docstring" => $f_blogger_getUserInfo_doc),\r
433 \r
434                          "blogger.getTemplate" =>\r
435                          array( "function" => "f_blogger_getTemplate",\r
436                                 "signature" => $f_blogger_getTemplate_sig,\r
437                                 "docstring" => $f_blogger_getTemplate_doc),\r
438 \r
439                          "blogger.setTemplate" =>\r
440                          array( "function" => "f_blogger_setTemplate",\r
441                                 "signature" => $f_blogger_setTemplate_sig,\r
442                                 "docstring" => $f_blogger_setTemplate_doc)\r
443                 \r
444                 )\r
445         );\r
446 \r
447 \r
448 ?>