| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.39 2005/01/15 05:38:10 youi |
| 6 |
|
* insertAccount: 文字列バッファのサイズ調整など. |
| 7 |
|
* updateAccount: 文字列バッファのサイズ調整など. |
| 8 |
|
* アイテム管理関数を定義した. |
| 9 |
|
* insertItem, getItem, getItems, dumpItemID, updateItem, deleteItemなど. |
| 10 |
|
* freeGID, freeUID: 引数の型を修正. |
| 11 |
|
* |
| 12 |
* Revision 1.38 2005/01/15 00:39:16 aga |
* Revision 1.38 2005/01/15 00:39:16 aga |
| 13 |
* ・x_xnpaccount_item_basicの構造を変更. |
* ・x_xnpaccount_item_basicの構造を変更. |
| 14 |
* |
* |
| 184 |
#include "account.h" |
#include "account.h" |
| 185 |
#include "group.h" |
#include "group.h" |
| 186 |
#include "session.h" |
#include "session.h" |
| 187 |
|
#include "item.h" |
| 188 |
|
#include "itemtype.h" |
| 189 |
#include "criteria.h" |
#include "criteria.h" |
| 190 |
#include "commonal.h" |
#include "commonal.h" |
| 191 |
#include "item.h" |
#include "item.h" |
| 225 |
return ret; |
return ret; |
| 226 |
} |
} |
| 227 |
|
|
| 228 |
|
/** |
| 229 |
|
* |
| 230 |
|
* セッションに対応付けられたユーザIDを得る |
| 231 |
|
* |
| 232 |
|
* @param sid セッションID |
| 233 |
|
* @param uid ユーザIDを受け取るポインタ引数 |
| 234 |
|
* @return RES_OK |
| 235 |
|
* @return RES_ERROR |
| 236 |
|
* |
| 237 |
|
*/ |
| 238 |
|
static result_t getUIDFromSession( sessionid_t sid, userid_t* uid ) |
| 239 |
|
{ |
| 240 |
|
const session_t* session; |
| 241 |
|
if( getSession( sid, &session ) == RES_OK ){ |
| 242 |
|
*uid = session -> getUID( ); |
| 243 |
|
freeSession( session ); |
| 244 |
|
return RES_OK; |
| 245 |
|
} |
| 246 |
|
return RES_ERROR; |
| 247 |
|
} |
| 248 |
|
|
| 249 |
|
/** |
| 250 |
|
* |
| 251 |
|
* セッションに対応付けられたユーザが,PlatformユーザとしてActivateさ |
| 252 |
|
* れているかを返す |
| 253 |
|
* |
| 254 |
|
* @param sid セッションID |
| 255 |
|
* @return true Activateされている |
| 256 |
|
* @return false Activateされている,またはエラー |
| 257 |
|
* |
| 258 |
|
*/ |
| 259 |
|
static bool isActivatedBySession( sessionid_t sid ) |
| 260 |
|
{ |
| 261 |
|
const session_t* session; |
| 262 |
|
if( getSession( sid, &session ) == RES_OK ){ |
| 263 |
|
userid_t sess_uid = session -> getUID( ); |
| 264 |
|
freeSession( session ); |
| 265 |
|
return isActivated( sid, sess_uid ); |
| 266 |
|
} |
| 267 |
|
return false; |
| 268 |
|
} |
| 269 |
|
|
| 270 |
|
/** |
| 271 |
|
* |
| 272 |
|
* セッションに対応付けられたユーザが,モデレータであるか? |
| 273 |
|
* |
| 274 |
|
* |
| 275 |
|
* @param sid セッションID |
| 276 |
|
* @return true モデレータ |
| 277 |
|
* @return false モデレータでない,またはエラー |
| 278 |
|
* |
| 279 |
|
*/ |
| 280 |
|
static bool isModeratorBySession( sessionid_t sid ) |
| 281 |
|
{ |
| 282 |
|
const session_t* session; |
| 283 |
|
if( getSession( sid, &session ) == RES_OK ){ |
| 284 |
|
userid_t sess_uid = session -> getUID( ); |
| 285 |
|
freeSession( session ); |
| 286 |
|
return isModerator( sid, sess_uid ); |
| 287 |
|
} |
| 288 |
|
return false; |
| 289 |
|
} |
| 290 |
|
|
| 291 |
/** SQLを実行する。結果は捨てる。 |
/** SQLを実行する。結果は捨てる。 |
| 292 |
* @param sql sql |
* @param sql sql |
| 293 |
* @return result_t |
* @return result_t |
| 1140 |
*/ |
*/ |
| 1141 |
|
|
| 1142 |
//1.xoopsのユーザテーブルに書き込む |
//1.xoopsのユーザテーブルに書き込む |
| 1143 |
SQLCHAR uname[ACCOUNT_UNAME_LEN], name[ACCOUNT_NAME_LEN], email[ACCOUNT_EMAIL_LEN], url[ACCOUNT_URL_LEN], user_avatar[ACCOUNT_USER_AVATAR_LEN], user_icq[ACCOUNT_USER_ICQ_LEN], user_from[ACCOUNT_USER_FROM_LEN], user_sig[ACCOUNT_USER_SIG_LEN], actkey[ACCOUNT_ACTKEY_LEN], user_aim[ACCOUNT_USER_AIM_LEN], user_yim[ACCOUNT_USER_YIM_LEN], user_msnm[ACCOUNT_USER_MSNM_LEN], pass[ACCOUNT_PASS_LEN], theme[ACCOUNT_THEME_LEN], umode[ACCOUNT_UMODE_LEN], user_occ[ACCOUNT_USER_OCC_LEN], bio[ACCOUNT_BIO_LEN], user_intrest[ACCOUNT_USER_INTREST_LEN]; |
SQLCHAR uname[ACCOUNT_UNAME_LEN+1], name[ACCOUNT_NAME_LEN+1], email[ACCOUNT_EMAIL_LEN+1], url[ACCOUNT_URL_LEN+1], user_avatar[ACCOUNT_USER_AVATAR_LEN+1], user_icq[ACCOUNT_USER_ICQ_LEN+1], user_from[ACCOUNT_USER_FROM_LEN+1], user_sig[ACCOUNT_USER_SIG_LEN+1], actkey[ACCOUNT_ACTKEY_LEN+1], user_aim[ACCOUNT_USER_AIM_LEN+1], user_yim[ACCOUNT_USER_YIM_LEN+1], user_msnm[ACCOUNT_USER_MSNM_LEN+1], pass[ACCOUNT_PASS_LEN+1], theme[ACCOUNT_THEME_LEN+1], umode[ACCOUNT_UMODE_LEN+1], user_occ[ACCOUNT_USER_OCC_LEN+1], bio[ACCOUNT_BIO_LEN+1], user_intrest[ACCOUNT_USER_INTREST_LEN+1]; |
| 1144 |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1145 |
SQLDOUBLE timezone_offset; |
SQLDOUBLE timezone_offset; |
| 1146 |
|
|
| 1318 |
ret = RES_OK; |
ret = RES_OK; |
| 1319 |
if( ret == RES_OK ){ |
if( ret == RES_OK ){ |
| 1320 |
//3.add new user to default group(not a group admin) |
//3.add new user to default group(not a group admin) |
| 1321 |
ret = insertMember( sid, DEFAULT_PLATFORM_GROUP_ID, *uid, false ); |
ret = insertMember( sid, group_t::GID_DEFAULT, *uid, false ); |
| 1322 |
}else{ |
}else{ |
| 1323 |
//xoops_usersへinsertしたレコードを削除する |
//xoops_usersへinsertしたレコードを削除する |
| 1324 |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1419 |
if( account == NULL ) return RES_ERROR; |
if( account == NULL ) return RES_ERROR; |
| 1420 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1421 |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
| 1422 |
|
|
| 1423 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 1424 |
result_t ret = RES_ERROR; |
result_t ret = RES_ERROR; |
| 1425 |
|
SQLHANDLE hstmt = NULL; |
| 1426 |
|
|
| 1427 |
//xoopsのユーザテーブルに書き込む |
//xoopsのユーザテーブルに書き込む |
| 1428 |
SQLCHAR uname[ACCOUNT_UNAME_LEN], name[ACCOUNT_NAME_LEN], email[ACCOUNT_EMAIL_LEN], url[ACCOUNT_URL_LEN], user_avatar[ACCOUNT_USER_AVATAR_LEN], user_icq[ACCOUNT_USER_ICQ_LEN], user_from[ACCOUNT_USER_FROM_LEN], user_sig[ACCOUNT_USER_SIG_LEN], actkey[ACCOUNT_ACTKEY_LEN], user_aim[ACCOUNT_USER_AIM_LEN], user_yim[ACCOUNT_USER_YIM_LEN], user_msnm[ACCOUNT_USER_MSNM_LEN], pass[ACCOUNT_PASS_LEN], theme[ACCOUNT_THEME_LEN], umode[ACCOUNT_UMODE_LEN], user_occ[ACCOUNT_USER_OCC_LEN], bio[ACCOUNT_BIO_LEN], user_intrest[ACCOUNT_USER_INTREST_LEN]; |
SQLCHAR uname[ACCOUNT_UNAME_LEN+1], name[ACCOUNT_NAME_LEN+1], email[ACCOUNT_EMAIL_LEN+1], url[ACCOUNT_URL_LEN+1], user_avatar[ACCOUNT_USER_AVATAR_LEN+1], user_icq[ACCOUNT_USER_ICQ_LEN+1], user_from[ACCOUNT_USER_FROM_LEN+1], user_sig[ACCOUNT_USER_SIG_LEN+1], actkey[ACCOUNT_ACTKEY_LEN+1], user_aim[ACCOUNT_USER_AIM_LEN+1], user_yim[ACCOUNT_USER_YIM_LEN+1], user_msnm[ACCOUNT_USER_MSNM_LEN+1], pass[ACCOUNT_PASS_LEN+1], theme[ACCOUNT_THEME_LEN+1], umode[ACCOUNT_UMODE_LEN+1], user_occ[ACCOUNT_USER_OCC_LEN+1], bio[ACCOUNT_BIO_LEN+1], user_intrest[ACCOUNT_USER_INTREST_LEN+1]; |
| 1429 |
SQLINTEGER uid, user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
SQLINTEGER uid, user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1430 |
SQLDOUBLE timezone_offset; |
SQLDOUBLE timezone_offset; |
| 1431 |
|
|
| 1432 |
SQLINTEGER cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
SQLINTEGER cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
| 1433 |
SQLINTEGER cbUid = 0, cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode, cbUser_mailok = 0, cbTimezone_offset = 0; |
SQLINTEGER cbUid = 0, cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode = 0, cbUser_mailok = 0, cbTimezone_offset = 0; |
| 1434 |
|
|
| 1435 |
SQLUINTEGER activate; |
SQLUINTEGER activate; |
| 1436 |
SQLCHAR address[XNP_ACCOUNT_ADDRESS_LEN+1]; |
SQLCHAR address[XNP_ACCOUNT_ADDRESS_LEN+1]; |
| 1441 |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1442 |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
| 1443 |
SQLCHAR base_url[XNP_ACCOUNT_BASE_URL_LEN+1]; |
SQLCHAR base_url[XNP_ACCOUNT_BASE_URL_LEN+1]; |
| 1444 |
SQLINTEGER cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS, cbBase_url = SQL_NTS; |
SQLINTEGER cbActivate = 0, cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS, cbBase_url = SQL_NTS; |
| 1445 |
SQLUINTEGER notice_mail; |
SQLUINTEGER notice_mail, notice_mail_since; |
| 1446 |
SQLUINTEGER notice_mail_since; |
SQLINTEGER cbNotice_mail = 0, cbNotice_mail_since = 0; |
|
SQLINTEGER len = 0; |
|
| 1447 |
|
|
| 1448 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1449 |
string sql; |
string sql; |
| 1450 |
|
|
| 1451 |
sql = "UPDATE " + dbprefix + "_users SET "; |
sql = "UPDATE " + dbprefix + "_users SET "; |
| 1452 |
sql += "uname=?, "; |
sql += "uname=?"; |
| 1453 |
sql += "name=?, "; |
sql += ", name=?"; |
| 1454 |
sql += "email=?, "; |
sql += ", email=?"; |
| 1455 |
sql += "url=?, "; |
sql += ", url=?"; |
| 1456 |
sql += "user_avatar=?, "; |
sql += ", user_avatar=?"; |
| 1457 |
sql += "user_regdate=?, "; |
sql += ", user_regdate=?"; |
| 1458 |
sql += "user_icq=?, "; |
sql += ", user_icq=?"; |
| 1459 |
sql += "user_from=?, "; |
sql += ", user_from=?"; |
| 1460 |
sql += "user_sig=?, "; |
sql += ", user_sig=?"; |
| 1461 |
sql += "user_viewemail=?, "; |
sql += ", user_viewemail=?"; |
| 1462 |
sql += "actkey=?, "; |
sql += ", actkey=?"; |
| 1463 |
sql += "user_aim=?, "; |
sql += ", user_aim=?"; |
| 1464 |
sql += "user_yim=?, "; |
sql += ", user_yim=?"; |
| 1465 |
sql += "user_msnm=?, "; |
sql += ", user_msnm=?"; |
| 1466 |
sql += "pass=?, "; |
sql += ", pass=?"; |
| 1467 |
sql += "posts=?, "; |
sql += ", posts=?"; |
| 1468 |
sql += "attachsig=?, "; |
sql += ", attachsig=?"; |
| 1469 |
sql += "rank=?, "; |
sql += ", rank=?"; |
| 1470 |
sql += "level=?, "; |
sql += ", level=?"; |
| 1471 |
sql += "theme=?, "; |
sql += ", theme=?"; |
| 1472 |
sql += "timezone_offset=?, "; |
sql += ", timezone_offset=?"; |
| 1473 |
sql += "last_login=?, "; |
sql += ", last_login=?"; |
| 1474 |
sql += "umode=?, "; |
sql += ", umode=?"; |
| 1475 |
sql += "uorder=?, "; |
sql += ", uorder=?"; |
| 1476 |
sql += "notify_method=?, "; |
sql += ", notify_method=?"; |
| 1477 |
sql += "notify_mode=?, "; |
sql += ", notify_mode=?"; |
| 1478 |
sql += "user_occ=?, "; |
sql += ", user_occ=?"; |
| 1479 |
sql += "bio=?, "; |
sql += ", bio=?"; |
| 1480 |
sql += "user_intrest=?, "; |
sql += ", user_intrest=?"; |
| 1481 |
sql += "user_mailok=? "; |
sql += ", user_mailok=? "; |
| 1482 |
sql += " WHERE uid = ?"; |
sql += " WHERE uid = ?"; |
| 1483 |
|
|
| 1484 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1485 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1486 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 1514 |
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 1515 |
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1516 |
SQLBindParameter(hstmt, 31, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
SQLBindParameter(hstmt, 31, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1517 |
|
|
| 1518 |
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1519 |
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1520 |
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1558 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1559 |
} |
} |
| 1560 |
}else{ |
}else{ |
| 1561 |
string s( "SQLExecute in updateAccount " ); |
string s( "SQLExecute in updateAccount 1 " ); |
| 1562 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1563 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 1564 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1568 |
ret = RES_ERROR; |
ret = RES_ERROR; |
| 1569 |
} |
} |
| 1570 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1571 |
|
hstmt = NULL; |
| 1572 |
}else{ |
}else{ |
| 1573 |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1574 |
ret = RES_ERROR; |
ret = RES_ERROR; |
| 1575 |
} |
} |
| 1576 |
|
|
| 1577 |
|
if( ret != RES_OK ){ |
| 1578 |
|
return ret; |
| 1579 |
|
} |
| 1580 |
|
|
| 1581 |
//xnpaccountのユーザテーブルに残りの情報を上書きする |
//xnpaccountのユーザテーブルに残りの情報を上書きする |
| 1582 |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1583 |
string sql; |
string sql; |
| 1584 |
|
|
| 1585 |
sql = "UPDATE " + dbprefix + "_xnpaccount_users SET "; |
sql = "UPDATE " + dbprefix + "_xnpaccount_users SET "; |
| 1598 |
|
|
| 1599 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1600 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1601 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &len); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1602 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1603 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1604 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1607 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1608 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1609 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1610 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &len); |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1611 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &len); |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1612 |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1613 |
|
|
| 1614 |
activate = account -> getActivate() ? 1 : 0; |
activate = account -> getActivate() ? 1 : 0; |
| 1635 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1636 |
} |
} |
| 1637 |
}else{ |
}else{ |
| 1638 |
string s( "SQLExecute in updateAccount " ); |
string s( "SQLExecute in updateAccount 2 " ); |
| 1639 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1640 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 1641 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2042 |
*/ |
*/ |
| 2043 |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 2044 |
{ |
{ |
| 2045 |
if( gid == DEFAULT_PLATFORM_GROUP_ID ) return RES_ERROR; |
if( gid == group_t::GID_DEFAULT ) return RES_ERROR; |
| 2046 |
return deleteMemberNoLimit( sid, gid, uid ); |
return deleteMemberNoLimit( sid, gid, uid ); |
| 2047 |
} |
} |
| 2048 |
|
|
| 2947 |
*/ |
*/ |
| 2948 |
} |
} |
| 2949 |
|
|
| 2950 |
|
|
| 2951 |
|
|
| 2952 |
|
|
| 2953 |
|
/** |
| 2954 |
|
* |
| 2955 |
|
* アイテム(Basic Information)を登録する. |
| 2956 |
|
* Platformユーザ以上の権限が必要. |
| 2957 |
|
* |
| 2958 |
|
* @param sid セッションID |
| 2959 |
|
* @param item 登録したいアイテムの情報 |
| 2960 |
|
* @param itemid 登録したアイテムのIDを受け取る引数 |
| 2961 |
|
* @return RES_OK |
| 2962 |
|
* @return RES_ERROR |
| 2963 |
|
* @return RES_NO_SUCH_SESSION |
| 2964 |
|
* @return RES_DB_QUERY_ERROR |
| 2965 |
|
* @return RES_DB_NOT_INITIALIZED |
| 2966 |
|
* @return RES_NO_WRITE_ACCESS_RIGHT |
| 2967 |
|
* |
| 2968 |
|
*/ |
| 2969 |
|
result_t insertItem( sessionid_t sid, const item_t* item, itemid_t* itemid ) |
| 2970 |
|
{ |
| 2971 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2972 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2973 |
|
if( !isActivatedBySession( sid ) ) return RES_NO_WRITE_ACCESS_RIGHT; |
| 2974 |
|
|
| 2975 |
|
string sql; |
| 2976 |
|
SQLRETURN sqlcode; |
| 2977 |
|
result_t ret = RES_ERROR; |
| 2978 |
|
SQLINTEGER uid, item_type_id, creation_date, last_update_date; |
| 2979 |
|
SQLINTEGER cbUid = 0, cbItem_type_id = 0, cbCreation_date = 0, cbLast_update_date = 0; |
| 2980 |
|
SQLCHAR title[ XNP_ITEM_TITLE_LEN + 1 ], |
| 2981 |
|
keywords[ XNP_ITEM_KEYWORDS_LEN + 1 ], |
| 2982 |
|
description[ XNP_ITEM_DESCRIPTION_LEN + 1 ], |
| 2983 |
|
doi[ XNP_ITEM_DOI_LEN + 1 ]; |
| 2984 |
|
SQLINTEGER cbTitle = SQL_NTS, |
| 2985 |
|
cbKeywords = SQL_NTS, |
| 2986 |
|
cbDescription = SQL_NTS, |
| 2987 |
|
cbDOI = SQL_NTS; |
| 2988 |
|
|
| 2989 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2990 |
|
string sql; |
| 2991 |
|
sql = "INSERT INTO " + dbprefix + "_xnpaccount_item_basic (item_type_id, title, keywords, description, doi, uid, creation_date, last_update_date) VALUES (?, ?, ?, ?, ?, ?, ?, ? )"; |
| 2992 |
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2993 |
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2994 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &item_type_id, 0, &cbItem_type_id ); |
| 2995 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_TITLE_LEN, 0, title, 0, &cbTitle ); |
| 2996 |
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_KEYWORDS_LEN, 0, keywords, 0, &cbKeywords ); |
| 2997 |
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_DESCRIPTION_LEN, 0, description, 0, &cbDescription ); |
| 2998 |
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_DOI_LEN, 0, doi, 0, &cbDOI ); |
| 2999 |
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 3000 |
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &creation_date, 0, &cbCreation_date ); |
| 3001 |
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &last_update_date, 0, &cbLast_update_date ); |
| 3002 |
|
|
| 3003 |
|
strncpy2( (char*)title, item -> getTitle(), XNP_ITEM_TITLE_LEN ); |
| 3004 |
|
strncpy2( (char*)keywords, item -> getKeywords(), XNP_ITEM_KEYWORDS_LEN ); |
| 3005 |
|
strncpy2( (char*)description, item -> getDescription(), XNP_ITEM_DESCRIPTION_LEN ); |
| 3006 |
|
strncpy2( (char*)doi, item -> getDOI(), XNP_ITEM_DOI_LEN ); |
| 3007 |
|
item_type_id = item -> getItemTypeID( ); |
| 3008 |
|
uid = item -> getContributorUID( ); |
| 3009 |
|
creation_date = item -> getCreationDate( ); |
| 3010 |
|
last_update_date = item -> getLastUpdateDate( ); |
| 3011 |
|
|
| 3012 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 3013 |
|
SQLINTEGER count = 0; |
| 3014 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 3015 |
|
//アイテムIDを取得する |
| 3016 |
|
SQLHANDLE hstmt2 = NULL; |
| 3017 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 3018 |
|
sql = "SELECT LAST_INSERT_ID()"; // MySQL |
| 3019 |
|
// sql = "SELECT LAST_INSERT_ROWID()"; // SQLite |
| 3020 |
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 3021 |
|
SQLUINTEGER last_insert_id; |
| 3022 |
|
SQLINTEGER len; |
| 3023 |
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &last_insert_id, 0, &len ); |
| 3024 |
|
if( ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS ){ |
| 3025 |
|
*itemid = last_insert_id; |
| 3026 |
|
ret = RES_OK; |
| 3027 |
|
}else{ |
| 3028 |
|
ret = RES_DB_QUERY_ERROR; |
| 3029 |
|
string s( "SQLFetch in insertItem " ); |
| 3030 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3031 |
|
setLastErrorString( s.c_str( ) ); |
| 3032 |
|
} |
| 3033 |
|
}else{ |
| 3034 |
|
string s( "SQLExecDirect in insertItem " ); |
| 3035 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3036 |
|
setLastErrorString( s.c_str( ) ); |
| 3037 |
|
ret = RES_DB_QUERY_ERROR; |
| 3038 |
|
} |
| 3039 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 3040 |
|
} |
| 3041 |
|
//TODO insert into private index |
| 3042 |
|
}else{ |
| 3043 |
|
string s( "SQLRowCount in insertItem sql=" ); |
| 3044 |
|
s += string( sql ); |
| 3045 |
|
setLastErrorString( s.c_str( ) ); |
| 3046 |
|
ret = RES_DB_QUERY_ERROR; |
| 3047 |
|
} |
| 3048 |
|
}else{ |
| 3049 |
|
string s( "SQLExecute in insertItem " ); |
| 3050 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3051 |
|
setLastErrorString( s.c_str( ) ); |
| 3052 |
|
ret = RES_DB_QUERY_ERROR; |
| 3053 |
|
} |
| 3054 |
|
}else{ |
| 3055 |
|
string s( "SQLPrepare in insertItem " ); |
| 3056 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3057 |
|
setLastErrorString( s.c_str( ) ); |
| 3058 |
|
ret = RES_ERROR; |
| 3059 |
|
} |
| 3060 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 3061 |
|
}else{ |
| 3062 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertItem" ); |
| 3063 |
|
ret = RES_ERROR; |
| 3064 |
|
} |
| 3065 |
|
|
| 3066 |
|
return ret; |
| 3067 |
|
} |
| 3068 |
|
|
| 3069 |
|
/** |
| 3070 |
|
* |
| 3071 |
|
* アイテム情報取得. |
| 3072 |
|
* 取得したアイテムは,使用後freeItemで解放する. |
| 3073 |
|
* |
| 3074 |
|
* @refer freeItem |
| 3075 |
|
* @param sid セッションID |
| 3076 |
|
* @param iid 取得したいアイテムのID |
| 3077 |
|
* @param item 結果のアイテム情報を受け取る引数 |
| 3078 |
|
* @return RES_OK |
| 3079 |
|
* @return RES_DB_NOT_INITIALIZED |
| 3080 |
|
* @return RES_NO_SUCH_SESSION |
| 3081 |
|
* @return RES_NO_SUCH_ITEM |
| 3082 |
|
* @return RES_DB_QUERY_ERROR |
| 3083 |
|
* |
| 3084 |
|
*/ |
| 3085 |
|
result_t getItem( sessionid_t sid, itemid_t iid, const item_t** item ) |
| 3086 |
|
{ |
| 3087 |
|
int len; |
| 3088 |
|
static criteria c; |
| 3089 |
|
result_t res = getItems( sid, &iid, 1, &c, item, &len ); |
| 3090 |
|
if( len == 0 ){ |
| 3091 |
|
freeItem( *item ); |
| 3092 |
|
item = 0; |
| 3093 |
|
return RES_NO_SUCH_ITEM; |
| 3094 |
|
} |
| 3095 |
|
return res; |
| 3096 |
|
} |
| 3097 |
|
|
| 3098 |
|
/** |
| 3099 |
|
* |
| 3100 |
|
* アイテム情報取得. |
| 3101 |
|
* 取得したアイテムは,使用後freeItemで解放する. |
| 3102 |
|
* |
| 3103 |
|
* @refer freeItem |
| 3104 |
|
* @param sid セッションID |
| 3105 |
|
* @param iids 取得したいアイテムのIDの配列 |
| 3106 |
|
* @param iidsLen iids配列の要素数 |
| 3107 |
|
* @param cri 結果の範囲指定,ソート条件指定 |
| 3108 |
|
* @param items 検索結果の配列のポインタを書き込む引数 |
| 3109 |
|
* @param itemsLen 検索結果の数(配列*itemsの要素数) |
| 3110 |
|
* @return RES_OK |
| 3111 |
|
* @return RES_DB_NOT_INITIALIZED |
| 3112 |
|
* @return RES_NO_SUCH_SESSION |
| 3113 |
|
* @return RES_DB_QUERY_ERROR |
| 3114 |
|
* |
| 3115 |
|
*/ |
| 3116 |
|
result_t getItems( sessionid_t sid, const itemid_t* iids, int iidsLen, criteria_t* cri, const item_t** items, int* itemsLen ) |
| 3117 |
|
{ |
| 3118 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 3119 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 3120 |
|
if( iidsLen <= 0 ){ |
| 3121 |
|
*items = new item_t[ 0 ]; |
| 3122 |
|
*itemsLen = 0; |
| 3123 |
|
return RES_OK; |
| 3124 |
|
} |
| 3125 |
|
|
| 3126 |
|
result_t ret = RES_ERROR; |
| 3127 |
|
SQLRETURN sqlcode; |
| 3128 |
|
SQLHANDLE hstmt = NULL; |
| 3129 |
|
string sql; |
| 3130 |
|
item_t* dst = new item_t[ iidsLen ]; |
| 3131 |
|
|
| 3132 |
|
sql = "SELECT item_id, item_type_id, title, keywords, description, doi, uid, creation_date, last_update_date "; |
| 3133 |
|
sql += "FROM " + dbprefix + "_xnpaccount_item_basic "; |
| 3134 |
|
sql += "WHERE "; |
| 3135 |
|
if( !isModeratorBySession( sid ) ){ |
| 3136 |
|
userid_t uid; |
| 3137 |
|
if( getUIDFromSession( sid, &uid ) == RES_OK ){ |
| 3138 |
|
sql += "uid=" + unsignedIntToString( uid ); |
| 3139 |
|
sql += " AND"; |
| 3140 |
|
}else{ |
| 3141 |
|
return RES_ERROR; |
| 3142 |
|
} |
| 3143 |
|
} |
| 3144 |
|
if( iidsLen > 0 ){ |
| 3145 |
|
sql += " ( item_id=" + string( unsignedIntToString( iids[ 0 ] ) ); |
| 3146 |
|
for( int i = 1; i < iidsLen; i++ ){ |
| 3147 |
|
sql += " OR item_id=" + string( unsignedIntToString( iids[ i ] ) ); |
| 3148 |
|
} |
| 3149 |
|
sql += " ) "; |
| 3150 |
|
} |
| 3151 |
|
sql += criteria2str( cri ); |
| 3152 |
|
|
| 3153 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 3154 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 3155 |
|
userid_t uid = 0; |
| 3156 |
|
itemid_t item_id = 0; |
| 3157 |
|
itemtypeid_t item_type_id = 0; |
| 3158 |
|
time_t creation_date = 0; |
| 3159 |
|
time_t last_update_date = 0; |
| 3160 |
|
SQLINTEGER cbUid = 0, cbItem_id = 0, cbItem_type_id = 0, cbCreation_date = 0, cbLast_update_date = 0; |
| 3161 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &item_id, 0, &cbItem_id ); |
| 3162 |
|
SQLBindCol( hstmt, 2, SQL_C_ULONG, &item_type_id, 0, &cbItem_type_id ); |
| 3163 |
|
SQLBindCol( hstmt, 7, SQL_C_ULONG, &uid, 0, &cbUid ); |
| 3164 |
|
SQLBindCol( hstmt, 8, SQL_C_SLONG, &creation_date, 0, &cbCreation_date ); |
| 3165 |
|
SQLBindCol( hstmt, 9, SQL_C_SLONG, &last_update_date, 0, &cbLast_update_date ); |
| 3166 |
|
|
| 3167 |
|
*itemsLen = 0; |
| 3168 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < iidsLen ; i++ ){ |
| 3169 |
|
dst[ i ].setItemID( item_id ); |
| 3170 |
|
dst[ i ].setItemTypeID( item_type_id ); |
| 3171 |
|
dst[ i ].setTitle( getResultCol( hstmt, 3 ).c_str() ); |
| 3172 |
|
dst[ i ].setKeywords( getResultCol( hstmt, 4 ).c_str() ); |
| 3173 |
|
dst[ i ].setDescription( getResultCol( hstmt, 5 ).c_str() ); |
| 3174 |
|
dst[ i ].setDOI( getResultCol( hstmt, 6 ).c_str() ); |
| 3175 |
|
dst[ i ].setContributorUID( uid ); |
| 3176 |
|
dst[ i ].setCreationDate( creation_date ); |
| 3177 |
|
dst[ i ].setLastUpdateDate( last_update_date ); |
| 3178 |
|
( *itemsLen )++; |
| 3179 |
|
} |
| 3180 |
|
*items = dst; |
| 3181 |
|
ret = RES_OK; |
| 3182 |
|
}else{ |
| 3183 |
|
string s( "SQLExecDirect in getItems" ); |
| 3184 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3185 |
|
s += string( ", sql=" ) + string( sql ); |
| 3186 |
|
setLastErrorString( s.c_str( ) ); |
| 3187 |
|
ret = RES_DB_QUERY_ERROR; |
| 3188 |
|
} |
| 3189 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 3190 |
|
}else{ |
| 3191 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getItems" ); |
| 3192 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 3193 |
|
setLastErrorString( s.c_str( ) ); |
| 3194 |
|
ret = RES_DB_QUERY_ERROR; |
| 3195 |
|
} |
| 3196 |
|
return ret; |
| 3197 |
|
} |
| 3198 |
|
|
| 3199 |
|
/** |
| 3200 |
|
* |
| 3201 |
|
* アイテムIDの一覧取得. |
| 3202 |
|
* アクセス可能なアイテムのIDを返す. |
| 3203 |
|
* |
| 3204 |
|
* @refer freeItemID |
| 3205 |
|
* @param sid セッションID |
| 3206 |
|
* @param cri 結果の範囲指定,ソート条件指定 |
| 3207 |
|
* @param iids 取得結果の配列のポインタを書き込む引数 |
| 3208 |
|
* @param iidssLen 検索結果の数 |
| 3209 |
|
* @return RES_OK |
| 3210 |
|
* @return RES_DB_NOT_INITIALIZED |
| 3211 |
|
* @return RES_NO_SUCH_SESSION |
| 3212 |
|
* @return RES_DB_QUERY_ERROR |
| 3213 |
|
* |
| 3214 |
|
*/ |
| 3215 |
|
result_t dumpItemID(sessionid_t sid, criteria_t* c, itemid_t** iids, int* iidsLen ) |
| 3216 |
|
{ |
| 3217 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 3218 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 3219 |
|
|
| 3220 |
|
result_t ret = RES_ERROR; |
| 3221 |
|
SQLRETURN sqlcode; |
| 3222 |
|
SQLHANDLE hstmt = NULL; |
| 3223 |
|
SQLINTEGER count = 0; |
| 3224 |
|
string sql; |
| 3225 |
|
itemid_t* dst = 0; |
| 3226 |
|
|
| 3227 |
|
sql = "SELECT item_id "; |
| 3228 |
|
sql += "FROM " + dbprefix + "_xnpaccount_item_basic "; |
| 3229 |
|
if( !isModeratorBySession( sid ) ){ |
| 3230 |
|
sql += "WHERE "; |
| 3231 |
|
userid_t uid; |
| 3232 |
|
if( getUIDFromSession( sid, &uid ) == RES_OK ){ |
| 3233 |
|
sql += "uid=" + unsignedIntToString( uid ); |
| 3234 |
|
}else{ |
| 3235 |
|
return RES_ERROR; |
| 3236 |
|
} |
| 3237 |
|
} |
| 3238 |
|
sql += criteria2str( c ); |
| 3239 |
|
|
| 3240 |
|
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 3241 |
|
dst = new itemid_t[ count ]; |
| 3242 |
|
*iids = dst; |
| 3243 |
|
}else{ |
| 3244 |
|
return RES_ERROR; |
| 3245 |
|
} |
| 3246 |
|
|
| 3247 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 3248 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 3249 |
|
SQLINTEGER len; |
| 3250 |
|
userid_t itemid = 0; |
| 3251 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &itemid, 0, &len ); |
| 3252 |
|
*iidsLen = 0; |
| 3253 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < count ; i++ ){ |
| 3254 |
|
dst[ i ] = itemid; |
| 3255 |
|
*iidsLen++; |
| 3256 |
|
} |
| 3257 |
|
ret = RES_OK; |
| 3258 |
|
}else{ |
| 3259 |
|
string s( "SQLExecDirect in dumpItemID" ); |
| 3260 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3261 |
|
s += string( ", sql=" ) + string( sql ); |
| 3262 |
|
setLastErrorString( s.c_str( ) ); |
| 3263 |
|
ret = RES_DB_QUERY_ERROR; |
| 3264 |
|
} |
| 3265 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 3266 |
|
}else{ |
| 3267 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpItemID" ); |
| 3268 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 3269 |
|
setLastErrorString( s.c_str( ) ); |
| 3270 |
|
ret = RES_DB_QUERY_ERROR; |
| 3271 |
|
} |
| 3272 |
|
return ret; |
| 3273 |
|
} |
| 3274 |
|
|
| 3275 |
|
/** |
| 3276 |
|
* |
| 3277 |
|
* アイテム(Basic Information)を更新する. |
| 3278 |
|
* Platformユーザ以上の権限が必要. |
| 3279 |
|
* itemのitem_idを正しくセットすること. |
| 3280 |
|
* |
| 3281 |
|
* @param sid セッションID |
| 3282 |
|
* @param item 更新したいアイテムの情報 |
| 3283 |
|
* @return RES_OK |
| 3284 |
|
* @return RES_ERROR |
| 3285 |
|
* @return RES_NO_SUCH_SESSION |
| 3286 |
|
* @return RES_DB_QUERY_ERROR |
| 3287 |
|
* @return RES_DB_NOT_INITIALIZED |
| 3288 |
|
* |
| 3289 |
|
*/ |
| 3290 |
|
result_t updateItem( sessionid_t sid, const item_t* item ) |
| 3291 |
|
{ |
| 3292 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 3293 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 3294 |
|
if( !isActivatedBySession( sid ) ) return RES_NO_WRITE_ACCESS_RIGHT; |
| 3295 |
|
|
| 3296 |
|
string sql; |
| 3297 |
|
SQLRETURN sqlcode; |
| 3298 |
|
result_t ret = RES_ERROR; |
| 3299 |
|
|
| 3300 |
|
userid_t sess_uid; |
| 3301 |
|
if( getUIDFromSession( sid, &sess_uid ) == RES_OK ){ |
| 3302 |
|
if( sess_uid != item -> getContributorUID( ) && !isModeratorBySession( sid ) ) |
| 3303 |
|
return RES_NO_WRITE_ACCESS_RIGHT;//no permissions to delete this item |
| 3304 |
|
}else{ |
| 3305 |
|
return RES_ERROR; |
| 3306 |
|
} |
| 3307 |
|
|
| 3308 |
|
SQLINTEGER uid, item_type_id, creation_date, last_update_date, item_id; |
| 3309 |
|
SQLINTEGER cbUid = 0, cbItem_type_id = 0, cbCreation_date = 0, cbLast_update_date = 0, cbItem_id = 0; |
| 3310 |
|
SQLCHAR title[ XNP_ITEM_TITLE_LEN + 1 ], |
| 3311 |
|
keywords[ XNP_ITEM_KEYWORDS_LEN + 1 ], |
| 3312 |
|
description[ XNP_ITEM_DESCRIPTION_LEN + 1 ], |
| 3313 |
|
doi[ XNP_ITEM_DOI_LEN + 1 ]; |
| 3314 |
|
SQLINTEGER cbTitle = SQL_NTS, |
| 3315 |
|
cbKeywords = SQL_NTS, |
| 3316 |
|
cbDescription = SQL_NTS, |
| 3317 |
|
cbDOI = SQL_NTS; |
| 3318 |
|
|
| 3319 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 3320 |
|
string sql; |
| 3321 |
|
sql = "UPDATE " + dbprefix + "_xnpaccount_item_basic SET "; |
| 3322 |
|
sql += "item_type_id=?"; |
| 3323 |
|
sql += ", title=?"; |
| 3324 |
|
sql += ", keywords=?"; |
| 3325 |
|
sql += ", description=?"; |
| 3326 |
|
sql += ", doi=?"; |
| 3327 |
|
sql += ", uid=?"; |
| 3328 |
|
sql += ", creation_date=?"; |
| 3329 |
|
sql += ", last_update_date=?"; |
| 3330 |
|
sql += " WHERE item_id=?"; |
| 3331 |
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 3332 |
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 3333 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &item_type_id, 0, &cbItem_type_id ); |
| 3334 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_TITLE_LEN, 0, title, 0, &cbTitle ); |
| 3335 |
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_KEYWORDS_LEN, 0, keywords, 0, &cbKeywords ); |
| 3336 |
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_DESCRIPTION_LEN, 0, description, 0, &cbDescription ); |
| 3337 |
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ITEM_DOI_LEN, 0, doi, 0, &cbDOI ); |
| 3338 |
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 3339 |
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &creation_date, 0, &cbCreation_date ); |
| 3340 |
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &last_update_date, 0, &cbLast_update_date ); |
| 3341 |
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &item_id, 0, &cbItem_id ); |
| 3342 |
|
|
| 3343 |
|
strncpy2( (char*)title, item -> getTitle(), XNP_ITEM_TITLE_LEN ); |
| 3344 |
|
strncpy2( (char*)keywords, item -> getKeywords(), XNP_ITEM_KEYWORDS_LEN ); |
| 3345 |
|
strncpy2( (char*)description, item -> getDescription(), XNP_ITEM_DESCRIPTION_LEN ); |
| 3346 |
|
strncpy2( (char*)doi, item -> getDOI(), XNP_ITEM_DOI_LEN ); |
| 3347 |
|
item_type_id = item -> getItemTypeID( ); |
| 3348 |
|
uid = item -> getContributorUID( ); |
| 3349 |
|
creation_date = item -> getCreationDate( ); |
| 3350 |
|
last_update_date = item -> getLastUpdateDate( ); |
| 3351 |
|
item_id = item -> getItemID( ); |
| 3352 |
|
|
| 3353 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 3354 |
|
SQLINTEGER count = 0; |
| 3355 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 3356 |
|
ret = RES_OK; |
| 3357 |
|
//TODO update certify state |
| 3358 |
|
}else{ |
| 3359 |
|
string s( "SQLRowCount in updateItem sql=" ); |
| 3360 |
|
s += string( sql ); |
| 3361 |
|
setLastErrorString( s.c_str( ) ); |
| 3362 |
|
ret = RES_DB_QUERY_ERROR; |
| 3363 |
|
} |
| 3364 |
|
}else{ |
| 3365 |
|
string s( "SQLExecute in updateItem " ); |
| 3366 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3367 |
|
setLastErrorString( s.c_str( ) ); |
| 3368 |
|
ret = RES_DB_QUERY_ERROR; |
| 3369 |
|
} |
| 3370 |
|
}else{ |
| 3371 |
|
string s( "SQLPrepare in updateItem " ); |
| 3372 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3373 |
|
setLastErrorString( s.c_str( ) ); |
| 3374 |
|
ret = RES_ERROR; |
| 3375 |
|
} |
| 3376 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 3377 |
|
}else{ |
| 3378 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateItem" ); |
| 3379 |
|
ret = RES_ERROR; |
| 3380 |
|
} |
| 3381 |
|
|
| 3382 |
|
return ret; |
| 3383 |
|
} |
| 3384 |
|
|
| 3385 |
|
result_t deleteItem( sessionid_t sid, itemid_t itemid ) |
| 3386 |
|
{ |
| 3387 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 3388 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 3389 |
|
if( !isActivatedBySession( sid ) ) return RES_NO_WRITE_ACCESS_RIGHT; |
| 3390 |
|
|
| 3391 |
|
result_t ret = RES_ERROR; |
| 3392 |
|
criteria_t c; |
| 3393 |
|
string sql; |
| 3394 |
|
groupid_t* gids; |
| 3395 |
|
int gidsLen; |
| 3396 |
|
SQLRETURN sqlcode; |
| 3397 |
|
SQLHANDLE hstmt = NULL; |
| 3398 |
|
const item_t* pitem; |
| 3399 |
|
userid_t item_uid; |
| 3400 |
|
const session_t* psess; |
| 3401 |
|
|
| 3402 |
|
// retrive an item id |
| 3403 |
|
if( getItem( sid, itemid, &pitem ) != RES_OK ) |
| 3404 |
|
return RES_NO_WRITE_ACCESS_RIGHT;//no permissions to delete this item |
| 3405 |
|
item_uid = pitem -> getContributorUID(); |
| 3406 |
|
freeItem( pitem ); |
| 3407 |
|
|
| 3408 |
|
/* |
| 3409 |
|
1. delete item from index keywords |
| 3410 |
|
2. delete item from binders |
| 3411 |
|
3. delete item |
| 3412 |
|
*/ |
| 3413 |
|
|
| 3414 |
|
//TODO 1. delete item from index keywords |
| 3415 |
|
|
| 3416 |
|
//TODO 2. delete item from binders |
| 3417 |
|
|
| 3418 |
|
// 3. delete item |
| 3419 |
|
sql = "DELETE FROM " + dbprefix + "_xnpaccount_item_basic "; |
| 3420 |
|
sql += "WHERE item_id = " + string( unsignedIntToString( itemid ) ); |
| 3421 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 3422 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 3423 |
|
SQLINTEGER count = 0; |
| 3424 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 3425 |
|
ret = RES_OK; |
| 3426 |
|
}else{ |
| 3427 |
|
string s( "SQLRowCount in deleteItem" ); |
| 3428 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3429 |
|
s += string( ", sql=" ) + string( sql ); |
| 3430 |
|
setLastErrorString( s.c_str( ) ); |
| 3431 |
|
ret = RES_NO_SUCH_USER; |
| 3432 |
|
} |
| 3433 |
|
}else{ |
| 3434 |
|
string s( "SQLExecDirect in deleteItem" ); |
| 3435 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 3436 |
|
s += ", sql="; |
| 3437 |
|
s += string( sql ); |
| 3438 |
|
setLastErrorString( s.c_str( ) ); |
| 3439 |
|
ret = RES_DB_QUERY_ERROR; |
| 3440 |
|
} |
| 3441 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 3442 |
|
}else{ |
| 3443 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteItem" ); |
| 3444 |
|
ret = RES_ERROR; |
| 3445 |
|
} |
| 3446 |
|
|
| 3447 |
|
return ret; |
| 3448 |
|
} |
| 3449 |
|
|
| 3450 |
|
result_t getItemIDByIndexID( sessionid_t sid, indexid_t xid, itemid_t** iids, int* iidsLen ){ return RES_ERROR; } |
| 3451 |
|
|
| 3452 |
|
result_t getCertifyState( sessionid_t sid, itemid_t iid, indexid_t xid, certify_t* certify ){ return RES_ERROR; } |
| 3453 |
|
|
| 3454 |
|
result_t setCertifyState( sessionid_t sid, itemid_t iid, indexid_t xid, certify_t state ){ return RES_ERROR; } |
| 3455 |
|
|
| 3456 |
|
bool getCertifyPermission( sessionid_t sid, itemid_t iid, indexid_t xid, certify_t state ){ return RES_ERROR; } |
| 3457 |
|
|
| 3458 |
|
result_t getOverlappedItems( sessionid_t sid, indexid_t xid, item_t* item, itemid_t** iids, int* iidsLen ){ return RES_ERROR; } |
| 3459 |
|
|
| 3460 |
|
result_t registerItem( sessionid_t sid, indexid_t xid, itemid_t iid ){ return RES_ERROR; } |
| 3461 |
|
|
| 3462 |
|
result_t unregisterItem( sessionid_t sid, indexid_t xid, itemid_t iid ){ return RES_ERROR; } |
| 3463 |
|
|
| 3464 |
|
bool getItemPermission( sessionid_t sid, itemid_t iid, itemop_t op ){ return RES_ERROR; } |
| 3465 |
|
|
| 3466 |
|
result_t insertChangeLog( sessionid_t sid, itemid_t iid, time_t insertTime, const char* log ){ return RES_ERROR; } |
| 3467 |
|
|
| 3468 |
|
result_t insertChangeLog( sessionid_t sid, itemid_t iid, changelog_t** logs, int logsLen ){ return RES_ERROR; } |
| 3469 |
|
|
| 3470 |
|
|
| 3471 |
|
|
| 3472 |
/** |
/** |
| 3473 |
* |
* |
| 3474 |
* セッションの正当性をチェックする. |
* セッションの正当性をチェックする. |
| 4641 |
return result; |
return result; |
| 4642 |
} |
} |
| 4643 |
|
|
|
|
|
|
|
|
| 4644 |
void freeIndex( const index_t* ptr ){ delete[] ptr; } |
void freeIndex( const index_t* ptr ){ delete[] ptr; } |
| 4645 |
void freeIndexID( const indexid_t* ptr ){ delete[] ptr; } |
void freeIndexID( const indexid_t* ptr ){ delete[] ptr; } |
|
|
|
|
|
|
| 4646 |
void freeAccount( const account_t* ptr ){ delete[] ( account_t* )ptr; } |
void freeAccount( const account_t* ptr ){ delete[] ( account_t* )ptr; } |
| 4647 |
void freeGroup( const group_t* ptr ){ delete[] ( group_t* )ptr; } |
void freeGroup( const group_t* ptr ){ delete[] ( group_t* )ptr; } |
| 4648 |
void freeSession( const session_t* ptr ){ delete[] ( session_t* )ptr; } |
void freeSession( const session_t* ptr ){ delete[] ( session_t* )ptr; } |
| 4649 |
void freeUID( const int* ptr ){ delete[] ( int* )ptr; } |
void freeUID( const userid_t* ptr ){ delete[] ( userid_t* )ptr; } |
| 4650 |
void freeGID( const int* ptr ){ delete[] ( int* )ptr; } |
void freeGID( const groupid_t* ptr ){ delete[] ( groupid_t* )ptr; } |
| 4651 |
|
void freeItem( const item_t* ptr ){ delete[] ( item_t* )ptr; } |
| 4652 |
|
void freeItemID( const itemid_t* ptr ){ delete[] ( itemid_t* )ptr; } |
| 4653 |
|
|
| 4654 |
static string errstr; |
static string errstr; |
| 4655 |
const char* getLastErrorString() |
const char* getLastErrorString() |