'; ?> e107 http://www.e107.org/ db_Select_gen($query); $row = $sql->db_Fetch(); //variable to store user permissions $perms = explode('.', $row['user_perms']); $haspe = in_array($area, $perms); //if neededs permissions are founds or user is the main site admin if (($haspe != false) || ($row['user_perms'] == 0)) { return true; } else { return false; } } $getUsersBlogs_sig = array(array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getUsersBlogs_doc = 'Returns a list of weblogs to which an author has posting privileges.'; function getUsersBlogs($xmlrpcmsg) { $structArray = array(); $structArray[] = new xmlrpcval(array( 'isAdmin'=> new xmlrpcval(true, 'boolean'), 'url'=> new xmlrpcval(SITEURL, 'string'), 'blogid'=> new xmlrpcval(eXMLRPC_BLOG_ID_LOC, 'string'), 'blogName'=> new xmlrpcval(eXMLRPC_BLOG_NAME_LOC, 'string'), 'xmlrpc'=> new xmlrpcval(eXMLRPC_BLOG_XMLRPC, 'string') ),'struct'); return new xmlrpcresp(new xmlrpcval($structArray, 'array')); } /* ************************* ***** NEW POST ********* ************************* */ $newPost_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct, $xmlrpcBoolean)); $newPost_doc = 'Post a new item to the blog.'; function newPost($xmlrpcmsg) { $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { $content = $xmlrpcmsg->getParam(3); $title = $content->structMem('title')->scalarval(); $description = '[html]'.htmlspecialchars_decode($content->structMem('description')->scalarval()).'[/html]'; //22/10/2009 14.48.04 added mt_text_more ie news_extended //check if we have something... $tempTextMore = checkXmlElementS($content->serialize(), 'mt_text_more'); if($tempTextMore == 1){ $mt_text_more = '[html]'.$content->structMem('mt_text_more')->scalarval().'[/html]'; } //if date is null will be replaced with current datetime (wordpress like) //check with simplexml for the parameter dateCreated? XMLRPC-PHP seems to not have such functions?? $tempDate = checkXmlElementS($content->serialize(), 'dateCreated'); if ($tempDate == 1) { $dateCreated = $content->structMem('dateCreated')->serialize(); // Not all clients send dateCreated info. So add if statement here if you want to use it. $timestamp = iso8601_decode($dateCreated); // To convert to unix timestamp } else { $timestamp = time(); } //21/10/2009 17.17.46 added $mt_excerpt //add in the news summary //check if we have something... $tempExcerpt = checkXmlElementS($content->serialize(), 'mt_excerpt'); if($tempExcerpt == 1){ $mt_excerpt = $content->structMem('mt_excerpt')->scalarval(); } //22/10/2009 11.51.54 added $mt_allow_comments //add the news_allow_comments flag //check if we have something... $tempAllowComments = checkXmlElementS($content->serialize(), 'mt_allow_comments'); if($tempAllowComments == 1){ $mt_allow_comments = $content->structMem('mt_allow_comments')->scalarval(); } //26/10/2009 14.30.41 added mt_keywords ie tags //check if we have something... $tempKeywords = checkXmlElementS($content->serialize(), 'mt_keywords'); if($tempKeywords == 1){ $mt_keywords = $content->structMem('mt_keywords')->scalarval(); } //author from e107 $query = 'SELECT u.user_id FROM `#user` AS u WHERE u.user_loginname = \''.$username.'\' AND u.user_password = \''.md5($password).'\''; $sql = e107::getDb(); $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $author = $row['user_id']; if ($content->structMem('categories')->arraySize() > 0) { $categories = $content->structMem('categories')->arrayMem(0)->scalarval(); //try to read out the id of the category if ($categories != '') { $query = 'SELECT c.category_id FROM `#news_category` AS c WHERE c.category_name = \''.$categories.'\''; $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $categories = $row['category_id']; } } $published = $xmlrpcmsg->getParam(4)->scalarval(); // TODO use: // $ix = new news; // $ret = $ix->submit_item($arrayvalues); //post data with new fuctions $data = array(); $data['data']['news_title'] = $title; $data['_FIELD_TYPES']['news_title'] = 'todb'; $data['data']['news_body'] = $description; $data['_FIELD_TYPES']['news_body'] = 'todb'; $data['data']['news_extended'] = $mt_text_more; $data['_FIELD_TYPES']['news_extended'] = 'todb'; $data['data']['news_datestamp'] = $timestamp; $data['_FIELD_TYPES']['news_datestamp'] = 'int'; $data['data']['news_author'] = $author; $data['_FIELD_TYPES']['news_author'] = 'int'; $data['data']['news_category'] = $categories; //category id is taken by a query against news categories $data['_FIELD_TYPES']['news_category'] = 'int'; $data['data']['news_allow_comments'] = $mt_allow_comments; $data['_FIELD_TYPES']['news_allow_comments'] = 'int'; $data['data']['news_start'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_start'] = 'int'; $data['data']['news_end'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_end'] = 'int'; //$data['data']['news_class'] = $news['news_class']; //$data['_FIELD_TYPES']['news_class'] = 'todb'; $data['data']['news_render_type'] = eXMLRPC_NEWS_RENDER_TYPE_LOC; //from preferences $data['_FIELD_TYPES']['news_render_type'] = 'int'; //news_comment_total $data['data']['news_summary'] = $mt_excerpt; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_summary'] = 'todb'; $data['data']['news_thumbnail'] = ''; //NOT APPLICABLE? $data['_FIELD_TYPES']['news_thumbnail'] = 'todb'; $data['data']['news_sticky'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_sticky'] = 'int'; $data['data']['news_meta_keywords'] = $mt_keywords; $data['_FIELD_TYPES']['news_meta_keywords'] = 'todb'; $data['data']['news_meta_description'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_meta_description'] = 'todb'; $postid = $sql->db_Insert('news', $data); return new xmlrpcresp( new xmlrpcval($postid, 'string')); // Return the id of the post just inserted into the DB. See mysql_insert_id() in the PHP manual. } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** EDIT POST ********* ************************* */ $editPost_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct, $xmlrpcBoolean)); $editPost_doc = 'Edit item on the blog.'; function editPost($xmlrpcmsg) { $postid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { $content = $xmlrpcmsg->getParam(3); $title = $content->structMem('title')->scalarval(); $description = '[html]'.$content->structMem('description')->scalarval().'[/html]'; //22/10/2009 14.48.04 added mt_text_more ie news_extended //check if we have something... $tempTextMore = checkXmlElementS($content->serialize(), 'mt_text_more'); if($tempTextMore == 1){ $mt_text_more = '[html]'.$content->structMem('mt_text_more')->scalarval().'[/html]'; } //if date is null will be replaced with current datetime (wordpress like) //check with simplexml for the parameter dateCreated? XMLRPC-PHP seems to not have such functions?? $tempDate = checkXmlElementS($content->serialize(), 'dateCreated'); if ($tempDate == 1) { $dateCreated = $content->structMem('dateCreated')->serialize(); // Not all clients send dateCreated info. So add if statement here if you want to use it. $timestamp = iso8601_decode($dateCreated); // To convert to unix timestamp } else { $timestamp = time(); } //22/10/2009 11.51.54 added $mt_excerpt //add the news summary //check if we have something... $tempExcerpt = checkXmlElementS($content->serialize(), 'mt_excerpt'); if($tempExcerpt == 1){ $mt_excerpt = $content->structMem('mt_excerpt')->scalarval(); } //22/10/2009 11.51.54 added $mt_allow_comments //add the news_allow_comments flag //check if we have something... $tempAllowComments = checkXmlElementS($content->serialize(), 'mt_allow_comments'); if($tempAllowComments == 1){ $mt_allow_comments = $content->structMem('mt_allow_comments')->scalarval(); } //26/10/2009 14.30.41 added mt_keywords ie tags //check if we have something... $tempKeywords = checkXmlElementS($content->serialize(), 'mt_keywords'); if($tempKeywords == 1){ $mt_keywords = $content->structMem('mt_keywords')->scalarval(); } //author from e107 $query = 'SELECT u.user_id FROM `#user` AS u WHERE u.user_loginname = \''.$username.'\' AND u.user_password = \''.md5($password).'\''; $sql = new db(); $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $author = $row['user_id']; if ($content->structMem('categories')->arraySize() > 0) { $categories = $content->structMem('categories')->arrayMem(0)->scalarval(); //try to read out the id of the category if ($categories != '') { $query = 'SELECT c.category_id FROM `#news_category` AS c WHERE c.category_name = \''.$categories.'\''; $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $categories = $row['category_id']; } } $published = $xmlrpcmsg->getParam(4)->scalarval(); // TODO use: // $ix = new news; // $ret = $ix->submit_item($arrayvalues); //edit data with new fuctions $data = array(); //to update we need to set news id... $data['data']['news_id'] = $postid; $data['_FIELD_TYPES']['news_id'] = 'int'; $data['data']['news_title'] = $title; $data['_FIELD_TYPES']['news_title'] = 'todb'; $data['data']['news_body'] = $description; $data['_FIELD_TYPES']['news_body'] = 'todb'; $data['data']['news_extended'] = $mt_text_more; $data['_FIELD_TYPES']['news_extended'] = 'todb'; $data['data']['news_datestamp'] = $timestamp; $data['_FIELD_TYPES']['news_datestamp'] = 'int'; $data['data']['news_author'] = $author; $data['_FIELD_TYPES']['news_author'] = 'int'; $data['data']['news_category'] = $categories; //category id is taken by a query against news categories $data['_FIELD_TYPES']['news_category'] = 'int'; $data['data']['news_allow_comments'] = $mt_allow_comments; $data['_FIELD_TYPES']['news_allow_comments'] = 'int'; $data['data']['news_start'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_start'] = 'int'; $data['data']['news_end'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_end'] = 'int'; //$data['data']['news_class'] = $news['news_class']; //$data['_FIELD_TYPES']['news_class'] = 'todb'; $data['data']['news_render_type'] = eXMLRPC_NEWS_RENDER_TYPE_LOC; //from preferences $data['_FIELD_TYPES']['news_render_type'] = 'int'; //news_comment_total $data['data']['news_summary'] = $mt_excerpt; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_summary'] = 'todb'; $data['data']['news_thumbnail'] = ''; //NOT APPLICABLE? $data['_FIELD_TYPES']['news_thumbnail'] = 'todb'; $data['data']['news_sticky'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_sticky'] = 'int'; $data['data']['news_meta_keywords'] = $mt_keywords; $data['_FIELD_TYPES']['news_meta_keywords'] = 'todb'; $data['data']['news_meta_description'] = ''; //NOT AVAIBLE MAKE A CUSTOM FIELD? $data['_FIELD_TYPES']['news_meta_description'] = 'todb'; $postid = $sql->db_Update('news', $data); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET POST ********* ************************* */ $getPost_sig = array(array($xmlrpcStruct, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getPost_doc = 'Get an item on the blog.'; function getPost($xmlrpcmsg) { $postid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { $query = 'SELECT n.*, c.category_name FROM `#news` AS n LEFT JOIN `#news_category` AS c ON c.category_id = n.news_category WHERE n.news_id=\''.$postid.'\' LIMIT 1'; //link back to the page important! $link = SITEURL.'news.php?'.$postid; $sql = e107::getDb(); $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { return new xmlrpcresp( new xmlrpcval(array( 'postid'=> new xmlrpcval($row['news_id'], 'string'), 'dateCreated'=> new xmlrpcval(iso8601_encode($row['news_datestamp']),'dateTime.iso8601'), 'title'=> new xmlrpcval($row['news_title'], 'string'), 'mt_excerpt'=> new xmlrpcval($row['news_summary'], 'string'), 'mt_keywords'=> new xmlrpcval($row['news_meta_keywords'], 'string'), 'mt_allow_comments'=> new xmlrpcval($row['news_allow_comments'], 'string'), 'description'=> new xmlrpcval(str_replace('[html]', '', str_replace('[/html]', '', $row['news_body'])), 'string'), 'mt_text_more'=> new xmlrpcval(str_replace('[html]', '', str_replace('[/html]', '', $row['news_extended'])), 'string'), 'categories'=> new xmlrpcval(array( new xmlrpcval($row['category_name'], 'string')), 'array'), 'publish'=> new xmlrpcval(1, 'boolean'), //e107 does not have this flag? 'link'=> new xmlrpcval($link, 'string'), 'permaLink'=> new xmlrpcval($link, 'string')), 'struct')); } } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** DELETE POST ******* ************************* */ function deletePost($xmlrpcmsg) { $postid = $xmlrpcmsg->getParam(1)->scalarval(); $username = $xmlrpcmsg->getParam(2)->scalarval(); $password = $xmlrpcmsg->getParam(3)->scalarval(); if (userLogin($username, $password, 'H') == true) { //TODO use: $sql->db_Delete(); $sql = e107::getDb(); //22/10/2009 15.06.16 delete news with new methods $sql->db_Delete('news', 'news_id='.$postid); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET RECENT POSTS ** ************************* */ $getRecentPosts_sig = array(array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcInt)); $getRecentPosts_doc = 'Get the recent posts on the blog.'; function getRecentPosts($xmlrpcmsg) { $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { $numposts = $xmlrpcmsg->getParam(3)->scalarval(); $structArray = array(); $query = 'SELECT n.*, c.category_name FROM `#news` AS n LEFT JOIN `#news_category` AS c ON c.category_id = n.news_category ORDER BY n.news_datestamp DESC LIMIT '.$numposts; $link = SITEURL.'news.php?'.$postid; //link back to the page important! $sql = e107::getDb(); $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array( 'postid'=> new xmlrpcval($row['news_id'], 'string'), 'dateCreated'=> new xmlrpcval(iso8601_encode($row['news_datestamp']),'dateTime.iso8601'), 'title'=> new xmlrpcval($row['news_title'], 'string'), 'mt_excerpt'=> new xmlrpcval($row['news_summary'], 'string'), 'mt_keywords'=> new xmlrpcval($row['news_meta_keywords'], 'string'), 'mt_allow_comments'=> new xmlrpcval($row['news_allow_comments'], 'string'), 'description'=> new xmlrpcval(str_replace('[html]', '', str_replace('[/html]', '', $row['news_body'])), 'string'), 'mt_text_more'=> new xmlrpcval(str_replace('[html]', '', str_replace('[/html]', '', $row['news_extended'])), 'string'), 'categories'=> new xmlrpcval(array( new xmlrpcval($row['category_name'], 'string')), 'array'), 'publish'=> new xmlrpcval(1, 'boolean'), //e107 does not have this flag? 'link'=> new xmlrpcval($link, 'string'), 'permaLink'=> new xmlrpcval($link, 'string') ), 'struct' ); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET CATEGORIES *** ************************* */ $getCategories_sig = array(array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getCategories_doc = 'Get the categories on the blog.'; function getCategories($xmlrpcmsg) { $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == 1) { $structArray = array(); $query = 'SELECT n.* FROM `#news_category` AS n'; $sql = e107::getDb(); $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array( 'categoryId' => new xmlrpcval($row['category_id'], 'string'), 'parentId' => new xmlrpcval('', 'string'), 'description' => new xmlrpcval($row['category_name'], 'string'), 'categoryDescription' => new xmlrpcval('', 'string'), 'categoryName' => new xmlrpcval($row['category_name'], 'string'), 'htmlUrl' => new xmlrpcval('', 'string'), 'rssUrl' => new xmlrpcval('', 'string')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** NEW MEDIA OBJECT ** ************************* */ $newMediaObject_sig = array(array($xmlrpcStruct, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct) ); $newMediaObject_doc = 'Upload media files onto the blog server.'; function newMediaObject($xmlrpcmsg) { $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true || userLogin($username, $password, '5') == true) { $file = $xmlrpcmsg->getParam(3); $filename = $file->structMem('name')->scalarval(); $filename = substr($filename, (strrpos($filename, '/') + 1)); $type = $file->structMem('type')->scalarval(); // The type of the file $bits = $file->structMem('bits')->serialize(); $bits = str_replace('', '', $bits); $bits = str_replace('', '', $bits); $uploaddir = eXMLRPC_FILES_UPLOAD_PATH; // Make sure this folder has been chmoded to 777. if (fwrite(fopen($uploaddir.$filename, 'xb'), base64_decode($bits)) == false) { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'File Failed to Write'); } else { return new xmlrpcresp( new xmlrpcval(array('url'=> new xmlrpcval(eXMLRPC_FILES_SITEBASE_URL.$filename, 'string')), 'struct')); } } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } //21/08/2009 10.07.36 //WORDPRESS APIs /* ************************* ***** GET PAGE ********* ************************* */ $getPage_sig = array(array($xmlrpcStruct, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getPage_doc = 'Get a page on the blog.'; function getPage($xmlrpcmsg) { $sql = e107::getDb(); $blog_id = $xmlrpcmsg->getParam(0)->scalarval(); $pageid = $xmlrpcmsg->getParam(1)->scalarval(); $username = $xmlrpcmsg->getParam(2)->scalarval(); $password = $xmlrpcmsg->getParam(3)->scalarval(); if (userLogin($username, $password, '5') == true) { $query = 'SELECT p.*, u.user_id, u.user_name FROM `#page` AS p LEFT JOIN `#user` AS u ON u.user_id = p.page_author WHERE p.page_id=\''.$pageid.'\' LIMIT 1'; $link = SITEURL.'page.php?'.$pageid; //link back to the page important! $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { return new xmlrpcresp( new xmlrpcval(array( 'dateCreated' => new xmlrpcval(iso8601_encode($row['page_datestamp']), 'dateTime.iso8601'), 'userid' => new xmlrpcval($row['user_id'], 'string'), 'page_id' => new xmlrpcval($row['page_id'], 'string'), 'page_status' => new xmlrpcval('', 'string'), 'description' => new xmlrpcval(str_replace('[html]', '', str_replace('[/html]', '', $row['page_text'])), 'string'), 'title' => new xmlrpcval($row['page_title'], 'string'), 'link' => new xmlrpcval($link, 'string'), 'permaLink' => new xmlrpcval($link, 'string'), 'categories' => new xmlrpcval('', 'string'), 'excerpt' => new xmlrpcval('', 'string'), 'text_more' => new xmlrpcval('', 'string'), 'mt_allow_comments' => new xmlrpcval($row['page_comment_flag'], 'boolean'), 'mt_allow_pings' => new xmlrpcval('', 'string'), 'wp_slug' => new xmlrpcval('', 'string'), 'wp_password' => new xmlrpcval($row['page_password'], 'string'), 'wp_author' => new xmlrpcval($row['user_name'], 'string'), 'wp_page_parent_id' => new xmlrpcval('', 'string'), 'wp_page_parent_title' => new xmlrpcval('', 'string'), 'wp_page_order' => new xmlrpcval('', 'string'), 'wp_author_id' => new xmlrpcval($row['user_id'], 'string'), 'wp_author_display_name'=> new xmlrpcval($row['user_name'], 'string'), 'date_created_gmt' => new xmlrpcval('', 'string'), 'custom_fields' => new xmlrpcval('', 'string'), 'wp_page_template' => new xmlrpcval('', 'string')), 'struct') ); } } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET PAGES ******** ************************* */ $getPages_sig = array(array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcInt)); $getPages_doc = 'Get pages on the blog.'; function getPages($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, '5') == true) { $numpages = $xmlrpcmsg->getParam(3)->scalarval(); $structArray = array(); $query = 'SELECT p.*, u.user_id, u.user_name FROM `#page` AS p LEFT JOIN `#user` AS u ON u.user_id = p.page_author ORDER BY p.page_datestamp DESC LIMIT '.$numpages; //link back to the page important! $link = SITEURL.'page.php?'.$pageid; $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array( 'dateCreated'=> new xmlrpcval(iso8601_encode($row['page_datestamp']), 'dateTime.iso8601'), 'userid'=> new xmlrpcval($row['user_id'], 'string'), 'page_id'=> new xmlrpcval($row['page_id'], 'string'), 'page_status'=> new xmlrpcval('', 'string'), 'description'=> new xmlrpcval(str_replace('[html]','', str_replace('[/html]', '', $row['page_text'])),'string'), 'title'=> new xmlrpcval($row['page_title'], 'string'), 'link'=> new xmlrpcval($link, 'string'), 'permaLink'=> new xmlrpcval($link, 'string'), 'categories'=> new xmlrpcval('', 'string'), 'excerpt'=> new xmlrpcval('', 'string'), 'text_more'=> new xmlrpcval('', 'string'), 'mt_allow_comments'=> new xmlrpcval($row['page_comment_flag'], 'boolean'), 'mt_allow_pings'=> new xmlrpcval('', 'string'), 'wp_slug'=> new xmlrpcval('', 'string'), 'wp_password'=> new xmlrpcval($row['page_password'],'string'), 'wp_author'=> new xmlrpcval($row['user_name'], 'string'), 'wp_page_parent_id'=> new xmlrpcval('', 'string'), 'wp_page_parent_title'=> new xmlrpcval('', 'string'), 'wp_page_order'=> new xmlrpcval('', 'string'), 'wp_author_id'=> new xmlrpcval($row['user_id'], 'string'), 'wp_author_display_name'=> new xmlrpcval($row['user_name'], 'string'), 'date_created_gmt'=> new xmlrpcval('', 'string'), 'custom_fields'=> new xmlrpcval('', 'string'), 'wp_page_template'=> new xmlrpcval('', 'string')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** NEW PAGE ********* ************************* */ $newPage_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct, $xmlrpcBoolean)); $newPage_doc = 'Post a new item to the blog.'; function newPage($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, '5') == true) { $content = $xmlrpcmsg->getParam(3); $title = $content->structMem('title')->scalarval(); $description = '[html]'.htmlspecialchars_decode($content->structMem('description')->scalarval()).'[/html]'; //if date is null will be replaced with current datetime (wordpress like) //check with simplexml for the parameter dateCreated? XMLRPC-PHP seems to not have such functions?? $tempDate = checkXmlElementS($content->serialize(), 'dateCreated'); if ($tempDate == 1) { $dateCreated = $content->structMem('dateCreated')->serialize(); // Not all clients send dateCreated info. So add if statement here if you want to use it. $timestamp = iso8601_decode($dateCreated); // To convert to unix timestamp } else { $timestamp = time(); } //21/10/2009 17.17.46 added $wp_password //add password page //check if we have something... $tempPassword = checkXmlElementS($content->serialize(), 'wp_password'); if($tempPassword == 1){ $wp_password = $content->structMem('wp_password')->scalarval(); } //author from e107 $query = 'SELECT u.user_id FROM `#user` AS u WHERE u.user_loginname = \''.$username.'\' AND u.user_password = \''.md5($password).'\''; $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $author = $row['user_id']; //21/08/2009 14.37.49 allow comments //add comments flag //check if we have something... $tempAllowComments = checkXmlElementS($content->serialize(), 'mt_allow_comments'); if($tempAllowComments == 1){ $comments = $content->structMem('mt_allow_comments')->scalarval(); } $published = $xmlrpcmsg->getParam(4)->scalarval(); //post data with new fuctions $data['data']['page_title'] = $title; $data['_FIELD_TYPES']['page_title'] = 'todb'; $data['data']['page_text'] = $description; $data['_FIELD_TYPES']['page_text'] = 'todb'; $data['data']['page_datestamp'] = $timestamp; $data['_FIELD_TYPES']['page_datestamp'] = 'int'; $data['data']['page_author'] = $author; $data['_FIELD_TYPES']['page_author'] = 'int'; $data['data']['page_comment_flag'] = $comments; $data['_FIELD_TYPES']['page_comment_flag'] = 'int'; $data['data']['page_password'] = $wp_password; $data['_FIELD_TYPES']['page_password'] = 'todb'; $data['data']['page_class'] = 0; $data['_FIELD_TYPES']['page_class'] = 'int'; $postid = $sql->db_Insert('page', $data); return new xmlrpcresp( new xmlrpcval($postid, 'string') ); // Return the id of the post just inserted into the DB. See mysql_insert_id() in the PHP manual. } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** DELETE PAGE ******* ************************* */ $deletePage_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcString) ); $deletePage_doc = "Delete a page from blog"; function deletePage($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); $pageid = $xmlrpcmsg->getParam(3)->scalarval(); if (userLogin($username, $password, 'H') == true) { //TODO Use db_Delete(); //23/10/2009 16.15.15 delete page with new methods $sql->db_Delete('page', 'page_id='.$pageid); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** EDIT PAGE ********* ************************* */ $editPage_sig = array (array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct, $xmlrpcBoolean)); $editPage_doc = 'Edit a page on the blog.'; function editPage($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $pageid = $xmlrpcmsg->getParam(1)->scalarval(); $username = $xmlrpcmsg->getParam(2)->scalarval(); $password = $xmlrpcmsg->getParam(3)->scalarval(); if (userLogin($username, $password, 'H') == true) { $content = $xmlrpcmsg->getParam(4); $title = $content->structMem('title')->scalarval(); $description = '[html]'.$content->structMem('description')->scalarval().'[/html]'; //if date is null will be replaced with current datetime (wordpress like) //check with simplexml for the parameter dateCreated? XMLRPC-PHP seems to not have such functions?? $tempDate = checkXmlElementS($content->serialize(), 'dateCreated'); if ($tempDate == 1) { $dateCreated = $content->structMem('dateCreated')->serialize(); // Not all clients send dateCreated info. So add if statement here if you want to use it. $timestamp = iso8601_decode($dateCreated); // To convert to unix timestamp } else { $timestamp = time(); } //author from e107 $query = 'SELECT u.user_id FROM `#user` AS u WHERE u.user_loginname = \''.$username.'\' AND u.user_password = \''.md5($password).'\''; $sql->db_Select_gen($query); $row = $sql->db_Fetch(); $author = $row['user_id']; //21/08/2009 14.37.49 allow comments //add comments flag //check if we have something... $tempAllowComments = checkXmlElementS($content->serialize(), 'mt_allow_comments'); if($tempAllowComments == 1){ $comments = $content->structMem('mt_allow_comments')->scalarval(); } $published = $xmlrpcmsg->getParam(5)->scalarval(); //edit data with new fuctions $data['data']['page_id'] = $pageid; $data['_FIELD_TYPES']['page_id'] = 'int'; $data['data']['page_title'] = $title; $data['_FIELD_TYPES']['page_title'] = 'todb'; $data['data']['page_text'] = $description; $data['_FIELD_TYPES']['page_text'] = 'todb'; $data['data']['page_datestamp'] = $timestamp; $data['_FIELD_TYPES']['page_datestamp'] = 'int'; $data['data']['page_author'] = $author; $data['_FIELD_TYPES']['page_author'] = 'int'; $data['data']['page_comment_flag'] = $comments; $data['_FIELD_TYPES']['page_comment_flag'] = 'int'; $data['data']['page_password'] = $wp_password; $data['_FIELD_TYPES']['page_password'] = 'todb'; $data['data']['page_class'] = 0; $data['_FIELD_TYPES']['page_class'] = 'int'; $pageid = $sql->db_Update('page', $data); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET PAGE LIST ***** ************************* */ //21/08/2009 15.45.15 uhm... DON'T SURE ABOUT THIS :D $getPageList_sig = array(array($xmlrpcArray, $xmlrpcString , $xmlrpcString, $xmlrpcString)); $getPageList_doc = 'Get pages list on the blog.'; function getPageList($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, '5') == true) { $structArray = array(); $query = 'SELECT p.*, u.user_id, u.user_name FROM `#page` AS p LEFT JOIN `#user` AS u ON u.user_id = p.page_author ORDER BY p.page_datestamp DESC LIMIT '.$numpages; $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array( 'page_id'=> new xmlrpcval($row['page_id'], 'string'), 'page_title'=> new xmlrpcval($row['page_title'], 'string'), 'page_parent_title'=> new xmlrpcval('', 'string'), 'date_created_gmt'=> new xmlrpcval('', 'string'), 'dateCreated'=> new xmlrpcval(iso8601_encode($row['page_datestamp']), 'dateTime.iso8601')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** NEW CATEGORY ****** ************************* */ $newCategory_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcStruct)); $newCategory_doc = 'Create a new category on the blog.'; function newCategory($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true || userLogin($username, $password, '5') == true) { $content = $xmlrpcmsg->getParam(3); $name = $content->structMem('name')->scalarval(); //21/08/2009 16.20.02 unused at this stage $slug = (checkXmlElementS($content->serialize(), 'slug') == true) ? $content->structMem('slug')->scalarval() : ''; //21/08/2009 16.20.02 unused at this stage $parentid = (checkXmlElementS($content->serialize(), 'parent_id') == true) ? $content->structMem('parent_id')->scalarval() : ''; //21/08/2009 16.20.02 unused at this stage $description = (checkXmlElementS($content->serialize(), 'description') == true) ? $content->structMem('description')->scalarval() : ''; //post data with new fuctions $data['data']['category_name'] = $name; $data['_FIELD_TYPES']['category_name'] = 'todb'; $catid = $sql->db_Insert('news_category', $data); return new xmlrpcresp( new xmlrpcval($postid, 'string')); // Return the id of the post just inserted into the DB. See mysql_insert_id() in the PHP manual. } else { return new xmlrpcresp (0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** DELETE CATEGORY *** ************************* */ $deleteCategory_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcString) ); $deleteCategory_doc = "Delete a page from blog"; function deleteCategory($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); $cateid = $xmlrpcmsg->getParam(3)->scalarval(); if (userLogin($username, $password, 'H') == true || userLogin($username, $password, '5') == true) { //23/10/2009 16.15.15 delete category with new methods $sql->db_Delete('news_category', 'category_id='.$cateid); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET AUTHORS ******* ************************* */ $getAuthors_sig = array (array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getAuthors_doc = 'Get the categories on the blog.'; function getAuthors($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(1)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, '5') == 1) { $structArray = array(); $query = 'SELECT p.page_id, u.user_id, u.user_loginname, u.user_name FROM `#page` AS p LEFT JOIN `#user` AS u ON u.user_id = p.page_author GROUP BY u.user_name'; $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array('user_id'=> new xmlrpcval($row['user_id'], 'string'), 'user_login'=> new xmlrpcval($row['user_loginname'], 'string'), 'display_name'=> new xmlrpcval($row['user_name'], 'string')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET CATEGORY LIST * ************************* */ $getCategoryList_sig = array(array($xmlrpcArray, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getCategoryList_doc = 'Get the categories on the blog.'; function getCategoryList($xmlrpcmsg) { $sql = e107::getDb(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == 1) { $structArray = array(); $query = 'SELECT n.* FROM `#news_category` AS n'; $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array('categoryId'=> new xmlrpcval($row['category_id'], 'string'), 'categoryName'=> new xmlrpcval($row['category_name'], 'string')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** POST CATEGORIES *** ************************* */ $setPostCategories_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcArray) ); $setPostCategories_doc = 'Set the categories on blog.'; function setPostCategories($xmlrpcmsg) { $sql = e107::getDb(); $postid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { $content = $xmlrpcmsg->getParam(3); if ($content->arrayMem(0)->arraySize() > 0) { $content->arrayMem(0)->structMem('categoryId')->scalarval(); } $data['data']['news_id'] = $postid; $data['_FIELD_TYPES']['news_id'] = 'int'; $data['data']['news_category'] = $categories; $data['_FIELD_TYPES']['news_category'] = 'todb'; $postid = $sql->db_Update('news', $data); $sql->db_Select_gen($query); return new xmlrpcresp( new xmlrpcval(true, 'boolean')); } else { return new xmlrpcresp(0, $xmlrpcerruser +1, 'Login Failed'); } } /* ************************* ***** GET P CATEGORIES ** ************************* */ $getPostCategories_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getPostCategories_doc = 'Set the categories on blog.'; function getPostCategories($xmlrpcmsg) { $sql = e107::getDb(); $postid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { // get set post categories $query = 'SELECT n.*, c.category_name, c.category_id FROM `#news` AS n LEFT JOIN `#news_category` AS c ON c.category_id = n.news_category WHERE news_id ='.$postid.' LIMIT 1'; $sql->db_Select_gen($query); while ($row = $sql->db_Fetch()) { $structArray[] = new xmlrpcval(array('categoryName'=> new xmlrpcval($row['category_name'], 'string'), 'categoryId'=> new xmlrpcval($row['category_id'], 'string'), 'isPrimary'=> new xmlrpcval('1', 'string')), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } /* ************************* ***** GET TAGS ********** ************************* */ $getTags_sig = array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString)); $getTags_doc = 'Set the categories on blog.'; function getTags($xmlrpcmsg) { $sql = e107::getDb(); $blogid = $xmlrpcmsg->getParam(0)->scalarval(); $username = $xmlrpcmsg->getParam(1)->scalarval(); $password = $xmlrpcmsg->getParam(2)->scalarval(); if (userLogin($username, $password, 'H') == true) { // get set post categories $query = "SELECT GROUP_CONCAT( n.news_meta_keywords SEPARATOR ',') AS meta_keys FROM `#news` AS n WHERE news_meta_keywords != '' ;"; $sql->db_Select_gen($query); $row = $sql->db_Fetch(); //explode data in array and remove duplicates $meta_tags = array(); $meta_tags = explode(',', $row['meta_keys']); $meta_tags = array_unique( $meta_tags ); foreach ($meta_tags as $key => $value) { $structArray[] = new xmlrpcval(array( 'tag_id' => new xmlrpcval($key, 'string'), 'name' => new xmlrpcval($value, 'string'), 'count' => new xmlrpcval('1', 'string'), //NOT SENSE IN e107 for now?? 'slug' => new xmlrpcval('1', 'string'), //NOT SENSE IN e107 for now?? 'html_url' => new xmlrpcval('1', 'string'), //NOT SENSE IN e107 for now?? 'rss_url' => new xmlrpcval('1', 'string') //NOT SENSE IN e107 for now?? ), 'struct'); } return new xmlrpcresp( new xmlrpcval($structArray, 'array')); // Return type is struct[] (array of struct) } else { return new xmlrpcresp(0, $xmlrpcerruser + 1, 'Login Failed'); } } // //METHODS DECLARATION // $o = new xmlrpc_server_methods_container; $a = array( 'blogger.getUsersBlogs' => array('function'=>'getUsersBlogs','docstring'=> $getUsersBlogs_doc,'signature'=> $getUsersBlogs_sig), 'metaWeblog.newPost' => array('function'=>'newPost', 'signature'=>$newPost_sig, 'docstring'=>$newPost_doc), 'metaWeblog.editPost' => array('function'=>'editPost', 'signature'=>$editPost_sig, 'docstring'=>$editPost_doc), 'metaWeblog.getPost' => array('function'=>'getPost', 'signature'=>$getPost_sig, 'docstring'=>$getPost_doc), 'metaWeblog.getRecentPosts' => array('function'=>'getRecentPosts', 'signature'=>$getRecentPosts_sig, 'docstring'=>$getRecentPosts_doc), 'metaWeblog.getCategories' => array('function'=>'getCategories', 'signature'=>$getCategories_sig, 'docstring'=>$getCategories_doc), 'metaWeblog.newMediaObject' => array('function'=>'newMediaObject', 'signature'=>$newMediaObject_sig, 'docstring'=>$newMediaObject_doc), // 'blogger.getUserInfo' => array('function' => 'getUserInfo', 'docstring' => 'Returns information about an author in the system.', 'signature' => array(array($xmlrpcStruct, $xmlrpcString, $xmlrpcString, $xmlrpcString)))*/ 'blogger.deletePost' => array('function'=>'deletePost', 'docstring'=>'Deletes a post.', 'signature'=>array(array($xmlrpcBoolean, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcString, $xmlrpcBoolean))), 'wp.getPage' => array('function'=>'getPage', 'signature'=>$getPage_sig, 'docstring'=>$getPage_doc), 'wp.getPages' => array('function'=>'getPages', 'signature'=>$getPages_sig, 'docstring'=>$getPages_doc), 'wp.newPage' => array('function'=>'newPage', 'signature'=>$newPage_sig, 'docstring'=>$newPage_doc), 'wp.deletePage' => array('function'=>'deletePage', 'signature'=>$deletePage_sig, 'docstring'=>$deletePage_doc), 'wp.editPage' => array('function'=>'editPage', 'signature'=>$editPage_sig, 'docstring'=>$editPage_doc), 'wp.getPageList' => array('function'=>'getPageList', 'signature'=>$getPageList_sig, 'docstring'=>$getPageList_doc), 'wp.getAuthors' => array('function'=>'getAuthors', 'signature'=>$getAuthors_sig, 'docstring'=>$getAuthors_doc), 'wp.getCategories' => array('function'=>'getCategories', 'signature'=>$getCategories_sig, 'docstring'=>$getCategories_doc), 'wp.getTags' => array( 'function' => 'getTags', 'signature' => $getTags_sig, 'docstring' => $getTags_doc ), 'wp.newCategory'=>array( 'function'=>'newCategory', 'signature'=>$newCategory_sig, 'docstring'=>$newCategory_doc ), 'wp.deleteCategory'=>array('function'=>'deleteCategory', 'signature'=>$deleteCategory_sig, 'docstring'=>$deleteCategory_doc ), 'wp.uploadFile'=>array( 'function'=>'newMediaObject', 'signature'=>$newMediaObject_sig, 'docstring'=>$newMediaObject_doc ), /* TO BE IMPLEMENTED 'wp.suggestCategories' => array( 'function' => 'suggestCategories', 'signature' => $suggestCategories_sig, 'docstring' => $suggestCategories_doc ), 'wp.getCommentCount' => array( 'function' => 'getCommentCount', 'signature' => $getCommentCount_sig, 'docstring' => $getCommentCount_doc ), 'wp.getPostStatusList' => array( 'function' => 'getPostStatusList', 'signature' => $getPostStatusList_sig, 'docstring' => $getPostStatusList_doc ), 'wp.getPageStatusList' => array( 'function' => 'getPageStatusList', 'signature' => $getPageStatusList_sig, 'docstring' => $getPageStatusList_doc ), 'wp.getPageTemplates' => array( 'function' => 'getPageTemplates', 'signature' => $getPageTemplates_sig, 'docstring' => $getPageTemplates_doc ), 'wp.getOptions' => array( 'function' => 'getOptions', 'signature' => $getOptions_sig, 'docstring' => $getOptions_doc ), 'wp.setOptions' => array( 'function' => 'setOptions', 'signature' => $setOptions_sig, 'docstring' => $setOptions_doc ), 'wp.getComment' => array( 'function' => 'getComment', 'signature' => $getComment_sig, 'docstring' => $getComment_doc ), 'wp.getComments' => array( 'function' => 'getComments', 'signature' => $getComments_sig, 'docstring' => $getComments_doc ), 'wp.deleteComment' => array( 'function' => 'deleteComment', 'signature' => $deleteComment_sig, 'docstring' => $deleteComment_doc ), 'wp.editComment' => array( 'function' => 'editComment', 'signature' => $editComment_sig, 'docstring' => $editComment_doc ), 'wp.newComment' => array( 'function' => 'newComment', 'signature' => $newComment_sig, 'docstring' => $newComment_doc ), 'wp.getCommentStatusList' => array( 'function' => 'getCommentStatusList', 'signature' => $getCommentStatusList_sig, 'docstring' => $getCommentStatusList_doc )*/ 'mt.getCategoryList'=>array( 'function'=>'getCategoryList', 'signature'=>$getCategoryList_sig, 'docstring'=>$getCategoryList_doc ), 'mt.setPostCategories'=>array( 'function'=>'setPostCategories', 'signature'=>$setPostCategories_sig, 'docstring'=>$setPostCategories_doc ), 'mt.getPostCategories'=>array( 'function'=>'getPostCategories', 'signature'=>$getPostCategories_sig, 'docstring'=>$getPostCategories_doc ) ); $s = new xmlrpc_server($a, false); $s->setdebug(1); $s->service(); // that should do all we need! /* ********************************************* ********** XML FUNCTIONS ******************* ********************************************* */ //19/08/2009 13.36.16 unused! function checkXmlElement($xml, $element) { // DOMElement->getElementsByTagName() -- Gets elements by tagname // nodeValue : The value of this node, depending on its type. // Load XML File. You can use loadXML if you wish to load XML data from a string $objDOM = new DOMDocument(); $objDOM->loadXML($xml); $objDOM->normalizeDocument(); echo $objDOM; $found = 0; //elements member contains all data... $member = $objDOM->getElementsByTagName('struct') ; // for each note tag, parse the document and get values for // tasks and details tag. foreach ($member as $value) { if ($member->name == $element) { $found = 1; } } if ($found == 1) { return true; } else { return false; } } //check for element exitence with simplexml function checkXmlElementS($string, $element) { $found = 0; $xml = new SimpleXMLElement($string); //search with xpath the $element name $result = $xml->xpath('/value/struct/member/name'); while (list(, $node) = each($result)) { if ($node == $element) { $found = 1; } } if ($found == 1) { return true; } else { return false; } } /* ********************************************* ********** FROM WORDPRESS SOURCE ! ********** ********************************************* */ function get_date_from_gmt($string) { // note: this only adds $time_difference to the given date preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); $string_localtime = gmdate('Y-m-d H:i:s', $string_time + get_settings('gmt_offset') * 3600); return $string_localtime; } // computes an offset in seconds from an iso8601 timezone function iso8601_timezone_to_offset($timezone) { // $timezone is either 'Z' or '[+|-]hhmm' if ($timezone == 'Z') { $offset = 0; } else { $sign = (substr($timezone, 0, 1) == '+') ? 1 : - 1; $hours = intval(substr($timezone, 1, 2)); $minutes = intval(substr($timezone, 3, 4)) / 60; $offset = $sign * 3600 * ($hours + $minutes); } return $offset; } function iso8601_to_datetime($date_string, $timezone = USER ) { if ($timezone == GMT) { preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits); if (! empty($date_bits[7])) { // we have a timezone, so let's compute an offset $offset = iso8601_timezone_to_offset($date_bits[7]); } else { // we don't have a timezone, so we assume user local timezone (not server's!) $offset = 3600 * get_settings('gmt_offset'); } $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); $timestamp -= $offset; return gmdate('Y-m-d H:i:s', $timestamp); } elseif ($timezone == USER) { return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string); } } ?>