I've got it figured out, for those who don't use prefix's for their tables here are the two changes
forum.php
PHP Code:
<?php
/**
* forum.php
*
* This file contains user relevant functions.
*
* @author Sword^Fish <swordfish@nsuers.com>
* @version 1
* @since Release 1
* @package vbulletin-xml-rpc-server
*
*/
require_once("server.php");
/**
* returns detail of latest thread
*
* @global Database $GLOBALS['DB'] database connection object
* @param string $args[0] token
* @return array
* @todo check usergroup permission
*/
function forum_latest_thread($method_name, $args, $app_data)
{
$obj_token = new Token($args[0]);
/* check: token is assigned to an user */
if($obj_token->userid == null)
{
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_INVALID']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_INVALID']['string']);
}
/* check: token is alive (not expired) */
if($obj_token->is_alive == 0)
{
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_EXPIRED']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_EXPIRED']['string']);
}
/* we shall use this token, so increase usages counter */
$obj_token->update_count($obj_token->token);
/* prepare query string */
$query="SELECT
f.forumid AS forum_id, f.title AS forum_name,
t.threadid AS topic_id, t.title AS topic_title,
p.postid AS post_id, p.dateline AS post_time,
u.userid AS user_id, u.username
FROM thread t, forum f, post p, user u
WHERE t.threadid = p.threadid
AND f.forumid = t.forumid
AND p.postid = t.lastpostid
AND p.userid = u.userid
ORDER BY t.lastpostid DESC LIMIT 1";
/* run query string */
$rows = $GLOBALS['DB']->run($query);
if($rows)
{
return $rows[0];
}
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_FAIL']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_FAIL']['string']);
}
?>
user.php
PHP Code:
<?php
/**
* user.php
*
* This file contains user relevant functions.
*
* @author Sword^Fish <swordfish@nsuers.com>
* @version 1
* @since Release 1
* @package vbulletin-xml-rpc-server
*/
require_once("server.php");
/**
* authenticates a user and returns user id
* Check for valid username and password.
* Username must be associated with a registered account in vBulletin database.
* User account must be verified one.
*
* @global Database $GLOBALS['DB'] database connection object
* @param string $args[0] username
* @param string $args[1] password
* @return mixed returns int userid or array on login failure
* @todo check for verified account
* @todo check for banned account
*/
function user_login($method_name, $args, $app_data)
{
//checkpost: valid username
if(_is_valid_username($args[0]) == false)
{
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['USER_SERVICE_USERNAME_DNE']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['USER_SERVICE_USERNAME_DNE']['string']);
}
/* TODO: checkpost: email verified */
/* TODO: checkpost: userid is not in banned group */
/* checkpost: valid password */
$GLOBALS['DB']->set_entity("user"," ");
$resource = $GLOBALS['DB']->fetch(array("userid"),
$filter = array("username LIKE '{$args[0]}'",
" AND ",
"password LIKE MD5(CONCAT(MD5('" . $args[1] . "'), salt))"),
null,
0,
1);
if($resource) /* valid query returned valid user id */
{
/* create token */
$token = $GLOBALS['OBJ_TOKEN']->create($resource[0]['userid']);
if($token) /* return token string */
{
return (string)$token;
} else {
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_GENERATION']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_TOKEN_GENERATION']['string']);
}
} elseif($resource === false) { /* query error */
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_FAIL']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['SERVICE_FAIL']['string']);
}
/* login is invalid */
return array('faultCode' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['USER_SERVICE_LOGIN']['code'],
'faultString' => $GLOBALS['VBULLETIN_XML_RPC_ERROR_DB']['USER_SERVICE_LOGIN']['string']);
}
/**
* verifies userid existence
*
* @global Database $GLOBALS['DB'] database connection object
* @param int $userid userid
* @return boolean
*/
function _is_valid_username($username)
{
$GLOBALS['DB']->set_entity("user"," ");
return $GLOBALS['DB']->check_record($username, 'username');
}
?>