[pLog-svn] xmlrpc file change?

Paul Westbrook paul at westbrooks.org
Mon Jun 4 16:48:07 EDT 2007


Hello,
    This works for me.

--Paul


On Jun 4, 2007, at 12:59 PM, Jon Daley wrote:

> Do people have objections to changing the /class/net/xmlrpc/ directory
> like this?
>
> I thought it would be a lot cleaner than this, which is why I  
> started on
> it.
>
> The advantage is that each api is separate from each other, and seems
> easier to add new apis.  But, it didn't end up as clean as I  
> thought it
> would be, so I'd understand if people didn't like it.
>
> I am looking into porting the new gdata api, or maybe the atom api,  
> not
> sure what.
>
>
> Index: xmlrpcserver.class.php
> ===================================================================
> ...
>      // include APIs
>      $GLOBALS["methods"] = array();
>      lt_include(PLOG_CLASS_PATH."class/net/xmlrpc/apis/blogger.php");
>      lt_include(PLOG_CLASS_PATH."class/net/xmlrpc/apis/ 
> metaweblog.php");
>      lt_include(PLOG_CLASS_PATH."class/net/xmlrpc/apis/ 
> movabletype.php");
>
>
>      class XmlRpcServer extends IXR_Server
>      {
>          function XmlRpcServer()
>          {
>              $config =& Config::getConfig();
>              if ($config->getValue("xmlrpc_api_enabled"))
>              {
>                  $this->IXR_Server($GLOBALS["methods"]);
>              }
>              else {
>                      // xmlrpc_api disabled, no methods configured
>                  $this->IXR_Server( Array ());
>              }
>          }
>      }
>
>
>      /**
>       * sets the character set for responses
>       */
>      function setResponseCharset( $blog )
>      {
>          $locale = $blog->getLocale();
>          $this->defencoding = $locale->getCharset();
>      }
>
>      /**
>       * Extra helper method to check permissions
>       *
>       * @param user A UserInfo object
>       * @param blog A BlogInfo object
>       * @param permName Name of the permission
>       * @param mode Either BLOG_PERMISSION or ADMIN_PERMISSION,  
> depending on whether
>       * we're checking the user's permissions in this blog or an  
> admin permission
>       */
>      function userHasPermission( $userInfo, $blogInfo, $permName,  
> $mode = BLOG_PERMISSION )
>      {
>              // check for the permission, whether the user is the  
> blog owner or
>              // whether the user is a site administrator
>          $hasPermission = false;
>          if( $mode == BLOG_PERMISSION ) {
>              $hasPermission = (
>                  $userInfo->hasPermissionByName( $permName,  
> $blogInfo->getId()) ||
>                  $blogInfo->getOwnerId() == $userInfo->getId() ||
>                  $userInfo->hasPermissionByName 
> ( "edit_blog_admin_mode", 0 )
>                  );
>          }
>          else {
>              $hasPermission = ( $userInfo->hasPermissionByName 
> ( $permName, 0 ));
>          }
>
>          return( $hasPermission );
>      }
>
> ?>
>
>
>
>
>
> Index: apis/blogger.php
> ===================================================================
> <?php
>
> $GLOBALS["methods"] = array_merge($GLOBALS["methods"],
>                                    array(
>                                        "blogger.newPost"            
> => "Blogger_NewPost",
>                                        "blogger.getPost"            
> => "Blogger_GetPost",
>                                        "blogger.editPost"           
> => "Blogger_EditPost",
>                                        "blogger.deletePost"         
> => "Blogger_DeletePost",
>                                        "blogger.getRecentPosts"     
> => "Blogger_GetRecentPosts",
>                                        "blogger.getUserInfo"        
> => "Blogger_GetUserInfo",
>                                        "blogger.getUsersBlogs"      
> => "Blogger_GetUsersBlogs"));
>
>
> function Blogger_NewPost($args){
>      $users = new Users();
>      $articles = new Articles();
>      $category = new ArticleCategories();
>      $blogsG = new Blogs();
>
>      $appkey     = $args[0];
>      $blogid     = $args[1];
>      $username   = $args[2];
>      $password   = $args[3];
>      $content    = $args[4];
>      $publish    = $args[5]; // true post&publish | false post only
>          /*
>  	         int postid
>          */
>
>          // -mhe todo security
>
>      $userInfo = $users->getUserInfo( $username, $password );
>
>      if (!$userInfo) {
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>
>      if(!$blogId){
>          $blogs = $userInfo->getBlogs();
>          if(!$blogs){
>              return new IXR_Error(-1, "This user doesn't have  
> access to any blogs.");
>          }
>          $blogid = $blogs[0]->getId();
>      }
>
>      $blogInfo = $blogsG->getBlogInfo( $blogid );
>      if( !$blogInfo ) {
>          return new IXR_Error(-1, 'Error loading blog' );
>      }
>
>          // check this user's permissions before proceeding
>      if( !userHasPermission( $userInfo, $blogInfo, "add_post" )) {
>          return new IXR_Error(-1, 'This user does not have enough  
> permissions' );
>      }
>
>      if ($publish) {
>          $status = POST_STATUS_PUBLISHED;
>      }
>      else {
>          $status = POST_STATUS_DRAFT;
>      }
>
>          // Get the default category
>      $cats = $category->getBlogCategories($blogid);
>
>          // some protection again blogs without categories
>      if( !$cats ) {
>          return new IXR_Error(-1, 'This blog does not have any  
> categories!');
>      }
>
>      foreach($cats as $cat) {
>          $idCategory = $cat->getId();
>              // Stop here, we have a category
>          break;
>      }
>
>          // ecto sends the topic as <title>blah blah</title>rest of  
> the body
>      if( preg_match( "/<title>(.*)<\/title>(.*)/i", $content,  
> $matches )) {
>          $title = $matches[1];
>          $content = $matches[2];
>      }
>      else {
>          $dummy = explode("\n", $content);
>          if( count( $dummy ) == 1 ) {
>              $title = substr( $content, 0, 60 );
>          }
>          else {
>              $title = $dummy[0];
>              unset($dummy[0]);
>              $content = implode("\n", $dummy);
>              unset($dummy);
>          }
>      }
>
>      $article = new Article(
>          $title,
>          $content, // text
>          Array( $idCategory ), // catid
>          $userInfo->getId(), // userid
>          $blogid, // blogid
>          $status,
>          0, // numread
>          Array( "comments_enabled" => true ) // enable comments
>          );
>
>      $article->setDate(date("YmdHis"));
>
>          // Get the plugin manager
>      $plugMgr =& PluginManager::getPluginManager();
>      $plugMgr->setBlogInfo( $blogInfo);
>      $plugMgr->setUserInfo( $userInfo );
>      $plugMgr->loadPlugins();
>          // Send the PRE_POST_POST_ADD message
>      $plugMgr->notifyEvent( EVENT_PRE_POST_ADD, Array( "article" =>  
> &$article ));
>
>      $postid = $articles->addArticle($article);
>
>      if ($postid == 0) {
>          return new IXR_Error(-1, 'Internal error occurred while  
> creating your post!');
>      }
>          // The post was successful
>          // Send the EVENT_POST_POST_ADD messages to the plugins
>      $plugMgr->notifyEvent( EVENT_POST_POST_ADD, Array( "article"  
> => &$article ));
>      CacheControl::resetBlogCache( $blogid );
>
>      $blogSettings = $blogInfo->getSettings();
>
>          // Add article notifcations if this is specified by the  
> default setting.
>      if ($blogSettings->getValue( "default_send_notification" ))
>      {
>          lt_include( PLOG_CLASS_PATH."class/dao/ 
> articlenotifications.class.php" );
>
>          $artNotifications = new ArticleNotifications();
>          $artNotifications->addNotification( $postid, $blogid,  
> $userInfo->getId());
>      }
>
>      setResponseCharset( $blogInfo );
>
>      return sprintf( "%d", $postid );
> }
>
>
> function Blogger_GetPost($args){
>      lt_include( PLOG_CLASS_PATH."class/data/timestamp.class.php" );
>
>      $users = new Users();
>      $articles = new Articles();
>
>      $appkey     = $args[0];
>      $postid     = $args[1];
>      $username   = $args[2];
>      $password   = $args[3];
>
>          /*
>  	            "userid" =>
>  	            "dateCreated" =>
>  	            "content" =>
>  	            "postid" =>
>          */
>
>      $userInfo = $users->getUserInfo($username,$password);
>      if( !$userInfo ) {
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>      $item = $articles->getBlogArticle($postid,
>                                        -1, // blogId
>                                        true, // includeHiddenFields
>                                        -1, // date
>                                        -1, // categoryId
>                                        $userInfo->getId());
>      $dateObject = $item->getDateObject();
>          // Get the unix time stamp
>      $time = $dateObject->getTimestamp(DATE_FORMAT_UNIXTIME);
>
>      $dummy                  = array();
>      $userInfo               = $item->getUserInfo();
>      $dummy["userid"]        = $userInfo->getId();
>      $dummy["dateCreated"]   = new IXR_Date($time);
>      $dummy["content"]       = $item->getTopic() . "\r\n" . $item- 
> >getText(false) . " ";
>      $dummy["postid"]        = $item->getId();
>
>      $blogInfo = $item->getBlogInfo();
>
>          // check the permissions
>      if( !userHasPermission( $userInfo, $blogInfo, "view_posts" )) {
>          return new IXR_Error(-1, 'This user does not have enough  
> permissions' );
>      }
>
>      setResponseCharset( $blogInfo );
>
>      return $dummy;
> }
>
>
> function Blogger_EditPost($args){
>      $users = new Users();
>      $articles = new Articles();
>      $blogsG = new Blogs();
>
>      $appkey     = $args[0];
>      $postid     = $args[1];
>      $username   = $args[2];
>      $password   = $args[3];
>      $content    = $args[4];
>      $publish    = $args[5];
>
>          /*
>  	            boolean, true or false
>          */
>
>      $userInfo = $users->getUserInfo( $username, $password );
>      if( !$userInfo ) {
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>
>          // fake topic
>      $dummy = explode("\n", $content);
>      if( count($dummy) == 1 ) {
>          $title = substr( $content, 0, 60 );
>      }
>      else {
>          $title = $dummy[0];
>          unset($dummy[0]);
>          $content = implode("\n", $dummy);
>          unset($dummy);
>      }
>
>      $article = $articles->getBlogArticle($postid,
>                                           -1, // blogId
>                                           true, // includeHiddenFields
>                                           -1, // date
>                                           -1, // categoryId
>                                           $userInfo->getId());
>
>      if( !$article ) {
>          return( new IXR_Error(-1, 'The article id is not correct' ));
>      }
>
>      $blogInfo = $article->getBlogInfo();
>
>          // check the permissions
>      if( !userHasPermission( $userInfo, $blogInfo, "update_post" )) {
>          return new IXR_Error(-1, 'This user does not have enough  
> permissions' );
>      }
>
>      if ($publish) {
>          $status = POST_STATUS_PUBLISHED;
>      }
>      else {
>          $status = POST_STATUS_DRAFT;
>      }
>
>      $article->setText($content);
>      $article->setTopic($title);
>      $article->setStatus($status);
>
>          // Get the plugin manager
>      $plugMgr =& PluginManager::getPluginManager();
>      $plugMgr->setBlogInfo( $blogInfo );
>      $plugMgr->setUserInfo( $userInfo );
>      $plugMgr->loadPlugins();
>          // Send the EVENT_PRE_POST_UPDATE message
>      $plugMgr->notifyEvent( EVENT_PRE_POST_UPDATE, Array( "article"  
> => &$article ));
>
>      $articles->updateArticle($article);
>
>          // Send the EVENT_POST_POST_UPDATE messages to the plugins
>      $plugMgr->notifyEvent( EVENT_POST_POST_UPDATE, Array 
> ( "article" => &$article ));
>
>      CacheControl::resetBlogCache( $blogInfo->getId());
>
>      setResponseCharset( $blogInfo );
>
>      return true;
> }
>
>
> function Blogger_DeletePost($args){
>      $users = new Users();
>      $articles = new Articles();
>      $blogsG = new Blogs();
>
>      $appkey     = $args[0];
>      $postid     = $args[1];
>      $username   = $args[2];
>      $password   = $args[3];
>      $publish    = $args[4];
>
>      $userInfo = $users->getUserInfo( $username, $password );
>      if( !$userInfo ) {
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>      $article = $articles->getBlogArticle($postid,
>                                           -1, // blogId
>                                           true, // includeHiddenFields
>                                           -1, // date
>                                           -1, // categoryId
>                                           $userInfo->getId());
>
>          // check if the article that was pulled is valid at all
>      if( !$article ) {
>          return( new IXR_Error(-1, 'The article id is not correct' ));
>      }
>
>          // check the permissions
>      $blogInfo = $article->getBlogInfo();
>      if( !userHasPermission( $userInfo, $blogInfo, "update_post" )) {
>          return( new IXR_Error(-1, 'This user does not have enough  
> permissions' ));
>      }
>
>          // Get the plugin manager
>      $plugMgr =& PluginManager::getPluginManager();
>      $plugMgr->setBlogInfo( $blogInfo );
>      $plugMgr->setUserInfo( $userInfo );
>      $plugMgr->loadPlugins();
>          // Send the EVENT_PRE_POST_DELETE message
>      $plugMgr->notifyEvent( EVENT_PRE_POST_DELETE, Array( "article"  
> => &$article ));
>
>      $articles->deleteArticle(
>          $postid,
>          $userInfo->getId(), // userid
>          $article->getBlog()
>          );
>
>          // Send the EVENT_POST_POST_DELETE messages to the plugins
>      $plugMgr->notifyEvent( EVENT_POST_POST_DELETE, Array 
> ( "article" => &$article ));
>
>      CacheControl::resetBlogCache( $blogInfo->getId());
>
>      setResponseCharset( $blogInfo );
>
>      return true;
> }
>
>
> function Blogger_GetRecentPosts($args){
>      $users = new Users();
>      $articles = new Articles();
>      $blogs = new Blogs();
>
>          /*
>  	            "userid" =>
>  	            "dateCreated" =>
>  	            "content" =>
>  	            "postid" =>
>          */
>      $appkey     = $args[0];
>      $blogid     = $args[1];
>      $username   = $args[2];
>      $password   = $args[3];
>      $number     = $args[4];
>
>      $userInfo = $users->getUserInfo($username,$password);
>      if( !$userInfo ){
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>      $blogInfo = $blogs->getBlogInfo( $blogid );
>      if( !$blogInfo ) {
>          return new IXR_Error(-1, 'Incorrect blog id');
>      }
>
>          // check this user's permissions
>      if( !userHasPermission( $userInfo, $blogInfo, "view_posts" )) {
>          return new IXR_Error(-1, 'This user does not have enough  
> permissions' );
>      }
>
>      $ret = array();
>      $list = $articles->getBlogArticles(
>          $blogid,
>          -1, // date
>          $number,  // amount
>          -1  // any category id
>          );
>
>      foreach( $list as $item ) {
>          $dateObject = $item->getDateObject();
>          lt_include( PLOG_CLASS_PATH."class/data/ 
> timestamp.class.php" );
>              // Get the unix time stamp
>          $time = $dateObject->getTimestamp(DATE_FORMAT_UNIXTIME);
>
>          $dummy                  = array();
>          $userInfo               = $item->getUserInfo();
>          $dummy["userid"]        = $userInfo->getId();
>          $dummy["dateCreated"]   = new IXR_Date($time);
>          $dummy["content"]       = $item->getTopic() . "\r\n" .  
> $item->getText(false) . " ";
>          $dummy["postid"]        = $item->getId();
>
>          $ret[]                  = $dummy;
>      }
>
>      setResponseCharset( $blogInfo );
>
>      return $ret;
> }
>
>
> function Blogger_GetUserInfo($args){
>      $appkeyp    = $args[0];
>      $username   = $args[1];
>      $password   = $args[2];
>
>      $users = new Users();
>
>      $userInfo = $users->getUserInfo( $username, $password );
>
>      if (!$userInfo){
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>
>      $ret                = array();
>      $ret["nickname"]    = $userInfo->getUsername();
>      $ret["firstname"]   = $userInfo->getUsername();
>      $ret["lastname"]    = "";
>      $ret["email"]       = $userInfo->getEmail();
>      $ret["userid"]      = $userInfo->getId();
>      $ret["url"]         = "";
>
>          // set the response encoding according to one of the blogs  
> owned by this user
>      $userBlogs = $users->getUsersBlogs( $userInfo->getId(),  
> BLOG_STATUS_ACTIVE );
>      if( count($userBlogs) > 0 ) {
>          $blogInfo = array_pop( $userBlogs );
>          setResponseCharset( $blogInfo );
>      }
>
>      return $ret;
> }
>
>
> function Blogger_GetUsersBlogs($args){
>      $users = new Users();
>      $category = new ArticleCategories();
>
>      $appkey     = $args[0];
>      $username   = $args[1];
>      $password   = $args[2];
>          /*
>  	            "blogName" =>
>  	            "url" =>
>  	            "blogid" =>
>          */
>
>      $userInfo = $users->getUserInfo( $username, $password );
>
>      if (!$userInfo){
>          return new IXR_Error(-1, 'You did not provide the correct  
> username and/or password');
>      }
>      $blogs = $users->getUsersBlogs($userInfo->getId(),  
> BLOG_STATUS_ACTIVE );
>      $ret = array();
>      foreach($blogs as $blog)
>      {
>          $dummy              = array();
>          $dummy["blogid"]    = $blog->_id;
>          $dummy["blogName"]  = $blog->_blog;
>          $url = $blog->getBlogRequestGenerator();
>          $dummy["url"]       = $url->blogLink();
>          $ret[]              = $dummy;
>      }
>
>          // set the encoding as long as we've got at least one blog
>      if( count( $blogs ) > 0 ) {
>          $blogInfo = $blogs[0];
>          setResponseCharset( $blogInfo );
>      }
>
>      return $ret;
> }
>
> ?>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://limedaley.com/mailman/listinfo/plog-svn

--
Paul Westbrook
paul at westbrooks.org
<http://www.westbrooks.org>




More information about the pLog-svn mailing list