| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.7 2004/11/26 04:51:47 youi |
| 6 |
|
* dbprefixを定義した. |
| 7 |
|
* insertAccountを定義した. |
| 8 |
|
* isValidSessionIDを定義した. |
| 9 |
|
* |
| 10 |
* Revision 1.6 2004/11/26 04:35:55 aga |
* Revision 1.6 2004/11/26 04:35:55 aga |
| 11 |
* ・loginUser(), logoutUser()を作成. |
* ・loginUser(), logoutUser()を作成. |
| 12 |
* |
* |
| 28 |
* |
* |
| 29 |
* |
* |
| 30 |
*/ |
*/ |
|
|
|
| 31 |
#include <stdio.h> |
#include <stdio.h> |
| 32 |
#include <stdlib.h> |
#include <stdlib.h> |
| 33 |
#include <string.h> |
#include <string.h> |
| 34 |
#include <mysql.h> |
#include <mysql.h> |
| 35 |
#include <string> |
#include <string> |
| 36 |
|
using namespace std; |
| 37 |
|
|
| 38 |
#include "common.h" |
#include "common.h" |
| 39 |
#include "account.h" |
#include "account.h" |
| 42 |
#include "criteria.h" |
#include "criteria.h" |
| 43 |
#include "commonal.h" |
#include "commonal.h" |
| 44 |
|
|
| 45 |
|
|
| 46 |
static MYSQL* mysql = NULL; //!< MySQLのハンドル |
static MYSQL* mysql = NULL; //!< MySQLのハンドル |
| 47 |
|
static string dbprefix; //!< XOOPSデータベーステーブルのPREFIX |
| 48 |
|
|
| 49 |
/** |
/** |
| 50 |
* |
* |
| 81 |
if ( mysql != NULL ) |
if ( mysql != NULL ) |
| 82 |
mysql_close( mysql ); |
mysql_close( mysql ); |
| 83 |
|
|
| 84 |
|
dbprefix = prefix; |
| 85 |
|
|
| 86 |
// 初期化と接続 |
// 初期化と接続 |
| 87 |
mysql = mysql_init(NULL); |
mysql = mysql_init(NULL); |
| 88 |
if ( mysql == NULL ){ |
if ( mysql == NULL ){ |
| 180 |
* |
* |
| 181 |
* アカウント登録 |
* アカウント登録 |
| 182 |
* |
* |
| 183 |
|
* @param sid セッション |
| 184 |
* @param |
* @param |
| 185 |
* @return |
* @return |
| 186 |
* |
* |
| 187 |
*/ |
*/ |
| 188 |
result_t insertAccount( sessionid_t sid, const account_t* account ) |
result_t insertAccount( sessionid_t sid, const account_t* account ) |
| 189 |
{ |
{ |
| 190 |
return RES_ERROR; |
// if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 191 |
|
string sql; |
| 192 |
|
string tmp; |
| 193 |
|
char buf[ 12 ]; |
| 194 |
|
|
| 195 |
|
//xoopsのユーザテーブルに書き込む |
| 196 |
|
sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES ("; |
| 197 |
|
sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', "; |
| 198 |
|
sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', "; |
| 199 |
|
sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', "; |
| 200 |
|
sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', "; |
| 201 |
|
sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', "; |
| 202 |
|
snprintf( buf, 12, "%d", time( NULL ) ); |
| 203 |
|
sql += string( buf ) + ", "; |
| 204 |
|
sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', "; |
| 205 |
|
sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', "; |
| 206 |
|
sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', "; |
| 207 |
|
snprintf( buf, 12, "%d", account -> getUserViewemail( ) ); |
| 208 |
|
sql += string( buf ) + ", "; |
| 209 |
|
sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', "; |
| 210 |
|
sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', "; |
| 211 |
|
sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', "; |
| 212 |
|
sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', "; |
| 213 |
|
sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', "; |
| 214 |
|
snprintf( buf, 12, "%d", account -> getPosts( ) ); |
| 215 |
|
sql += string( buf ) + ", "; |
| 216 |
|
snprintf( buf, 12, "%d", account -> getAttachsig( ) ); |
| 217 |
|
sql += string( buf ) + ", "; |
| 218 |
|
snprintf( buf, 12, "%d", account -> getRank( ) ); |
| 219 |
|
sql += string( buf ) + ", "; |
| 220 |
|
snprintf( buf, 12, "%d", account -> getLevel( ) ); |
| 221 |
|
sql += string( buf ) + ", "; |
| 222 |
|
sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', "; |
| 223 |
|
snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) ); |
| 224 |
|
sql += string( buf ) + ", "; |
| 225 |
|
sql += "0, "; //last login |
| 226 |
|
sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', "; |
| 227 |
|
snprintf( buf, 12, "%d", account -> getUorder( ) ); |
| 228 |
|
sql += string( buf ) + ", "; |
| 229 |
|
snprintf( buf, 12, "%d", account -> getNotifyMethod( ) ); |
| 230 |
|
sql += string( buf ) + ", "; |
| 231 |
|
snprintf( buf, 12, "%d", account -> getNotifyMode( ) ); |
| 232 |
|
sql += string( buf ) + ", "; |
| 233 |
|
sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', "; |
| 234 |
|
sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', "; |
| 235 |
|
sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', "; |
| 236 |
|
snprintf( buf, 12, "%d", account -> getUserMailok( ) ); |
| 237 |
|
sql += string( buf ) + ")"; |
| 238 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 239 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 240 |
|
return RES_DB_QUERY_ERROR; |
| 241 |
|
} |
| 242 |
|
|
| 243 |
|
//ユーザIDを取得する |
| 244 |
|
userid_t uid; |
| 245 |
|
if( getUid( account -> getUname( ), &uid ) != RES_OK ){ |
| 246 |
|
return RES_ERROR; |
| 247 |
|
} |
| 248 |
|
|
| 249 |
|
//vpaccountのユーザテーブルに残りの情報を書き込む |
| 250 |
|
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, datetime) VALUES ("; |
| 251 |
|
snprintf( buf, 12, "%d", uid ); |
| 252 |
|
sql += string( buf ) + ", "; |
| 253 |
|
if( account -> getActivate() ){ |
| 254 |
|
sql += "1, "; |
| 255 |
|
}else{ |
| 256 |
|
sql += "0, "; |
| 257 |
|
} |
| 258 |
|
sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', "; |
| 259 |
|
sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', "; |
| 260 |
|
sql += "'" + string( addSlashes( account -> getTel() ) ) + "', "; |
| 261 |
|
sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', "; |
| 262 |
|
sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', "; |
| 263 |
|
sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', "; |
| 264 |
|
sql += "'" + string( addSlashes( account -> getFax() ) ) + "', "; |
| 265 |
|
sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', "; |
| 266 |
|
snprintf( buf, 12, "%d", account -> getNoticeMail( ) ); |
| 267 |
|
sql += string( buf ) + ", "; |
| 268 |
|
snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) ); |
| 269 |
|
sql += string( buf ) + ")"; |
| 270 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 271 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 272 |
|
//xoops_usersへinsertしたレコードを削除する |
| 273 |
|
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 274 |
|
snprintf( buf, 12, "%d", uid ); |
| 275 |
|
sql += string( buf ); |
| 276 |
|
return RES_DB_QUERY_ERROR; |
| 277 |
|
} |
| 278 |
|
|
| 279 |
|
return RES_OK; |
| 280 |
} |
} |
| 281 |
|
|
| 282 |
/** |
/** |
| 491 |
* |
* |
| 492 |
* ユーザID取得 |
* ユーザID取得 |
| 493 |
* |
* |
| 494 |
* @param |
* @param uname IDを取得したいユーザー名 |
| 495 |
* @return |
* @param uid IDを代入したい変数のポインタ |
| 496 |
|
* @return RES_ERROR | RES_OK |
| 497 |
|
* @refer result_t |
| 498 |
* |
* |
| 499 |
*/ |
*/ |
| 500 |
result_t getUid( const char* uname, userid_t* uid ) |
result_t getUid( const char* uname, userid_t* uid ) |
| 501 |
{ |
{ |
| 502 |
string sql; |
string sql; |
| 503 |
|
|
| 504 |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname + "'"; |
if( uname == NULL ) return RES_ERROR; |
| 505 |
|
|
| 506 |
|
string uname2 = addSlashes( uname ); |
| 507 |
|
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "'"; |
| 508 |
if( mysql_query( mysql, sql.c_str( ) ) ){ |
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 509 |
return RES_DB_QUERY_ERROR; |
return RES_DB_QUERY_ERROR; |
| 510 |
} |
} |
| 624 |
return RES_ERROR; |
return RES_ERROR; |
| 625 |
} |
} |
| 626 |
|
|
| 627 |
|
/** |
| 628 |
|
* |
| 629 |
|
* セッションの正当性をチェックする. |
| 630 |
|
* |
| 631 |
|
* @param sid チェックしたいsession |
| 632 |
|
* @return true 正当 |
| 633 |
|
* @return false 不正 |
| 634 |
|
* |
| 635 |
|
*/ |
| 636 |
|
bool isValidSessionID( sessionid_t sid ) |
| 637 |
|
{ |
| 638 |
|
string sql; |
| 639 |
|
string sidstr; |
| 640 |
|
char buf[ 12 ]; |
| 641 |
|
snprintf( buf, 12, "%d", sid ); |
| 642 |
|
|
| 643 |
|
sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE session_id=" + string( buf ); |
| 644 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 645 |
|
return false; |
| 646 |
|
} |
| 647 |
|
MYSQL_RES* result = mysql_use_result( mysql ) ; |
| 648 |
|
MYSQL_ROW row = mysql_fetch_row(result); |
| 649 |
|
if( row ){ |
| 650 |
|
return true; |
| 651 |
|
}else{ |
| 652 |
|
return false; |
| 653 |
|
} |
| 654 |
|
} |
| 655 |
|
|
| 656 |
void freeResult( account_t* ptr ){ delete[] ptr; } |
void freeResult( account_t* ptr ){ delete[] ptr; } |
| 657 |
|
|
| 658 |
void freeResult( group_t* ptr ){ delete[] ptr; } |
void freeResult( group_t* ptr ){ delete[] ptr; } |
| 661 |
|
|
| 662 |
void freeResult( int* ptr ){ delete[] ptr; } |
void freeResult( int* ptr ){ delete[] ptr; } |
| 663 |
|
|
|
using namespace std; |
|
| 664 |
static string errstr; |
static string errstr; |
| 665 |
const char* getLastErrorString() |
const char* getLastErrorString() |
| 666 |
{ |
{ |