| 1 |
youi |
1.1 |
/* |
| 2 |
|
|
* |
| 3 |
youi |
1.35 |
* $Revision: 1.34 $ |
| 4 |
youi |
1.2 |
* $Log: commonal.cc,v $ |
| 5 |
youi |
1.35 |
* Revision 1.34 2004/12/28 04:38:14 aga |
| 6 |
|
|
* ??ogoutUser()??信罩? |
| 7 |
|
|
* |
| 8 |
aga |
1.34 |
* Revision 1.33 2004/12/27 05:56:23 youi |
| 9 |
|
|
* odbcDiagString: STMT篁ュ?????潟??????????????????????眼????. |
| 10 |
|
|
* syslog?<???祉?若?吾????????菴遵??????. |
| 11 |
|
|
* |
| 12 |
youi |
1.33 |
* Revision 1.32 2004/12/25 09:46:47 youi |
| 13 |
|
|
* MySQL+MyODBC?у??篏???????????信罩c????. |
| 14 |
|
|
* |
| 15 |
youi |
1.32 |
* Revision 1.31 2004/12/21 11:42:59 youi |
| 16 |
|
|
* ?潟?<?潟??????逸??祉???ゃ???????????菴遵??. |
| 17 |
|
|
* |
| 18 |
youi |
1.31 |
* Revision 1.30 2004/12/18 10:24:54 youi |
| 19 |
|
|
* IMPORT_MYSQLDLL??絎?臂?????????鐚?MYSQL??LL?????????潟?????????????帥?ゃ??絎h??? |
| 20 |
|
|
* ???鴻????????????信罩c????. |
| 21 |
|
|
* |
| 22 |
youi |
1.30 |
* Revision 1.29 2004/12/18 01:12:29 youi |
| 23 |
|
|
* freeResult???∽?医????free<???若?水??>????眼????. |
| 24 |
|
|
* |
| 25 |
youi |
1.29 |
* Revision 1.28 2004/12/14 12:02:08 youi |
| 26 |
|
|
* __WIN__??絎?臂???????????indows??ll篏??????荀?????????茵?????. |
| 27 |
|
|
* USE_SYSLOG??絎?臂???????????yslogd?吾?<???祉?若?吾???阪??????. |
| 28 |
|
|
* getAccounts: uidsLen??0??????????????菴遵??????. |
| 29 |
|
|
* |
| 30 |
youi |
1.28 |
* Revision 1.27 2004/12/06 11:34:47 aga |
| 31 |
|
|
* ??ninitializeDB()??菴遵??. |
| 32 |
|
|
* |
| 33 |
aga |
1.27 |
* Revision 1.26 2004/12/06 10:17:36 youi |
| 34 |
|
|
* mysql_use_result????腟?????罧??????????冴??????鐚? |
| 35 |
|
|
* while( row = mysql_fetch_row(result) );???水?ワ? |
| 36 |
|
|
* |
| 37 |
youi |
1.26 |
* Revision 1.25 2004/12/06 07:24:33 youi |
| 38 |
|
|
* insertAccount, insertGroup: |
| 39 |
|
|
* ?域?菴遵?????????宴???綽????????若??D鐚??違???若??ID??膃??綣??違???吾??莨若??. |
| 40 |
|
|
* |
| 41 |
youi |
1.25 |
* Revision 1.24 2004/12/06 01:45:50 aga |
| 42 |
|
|
* ?祉?潟?<?潟???ゃ??. |
| 43 |
|
|
* ?脂???上???篆??. |
| 44 |
|
|
* |
| 45 |
aga |
1.24 |
* Revision 1.23 2004/12/04 09:21:10 aga |
| 46 |
|
|
* ??p_config ?? vpaccount_config. |
| 47 |
|
|
* |
| 48 |
aga |
1.23 |
* Revision 1.22 2004/12/03 07:17:21 youi |
| 49 |
|
|
* isModerator?с?≪???祉?鴻???????若?帥???若?鴻???若????????篆??. |
| 50 |
|
|
* |
| 51 |
youi |
1.22 |
* Revision 1.21 2004/12/01 10:28:58 youi |
| 52 |
|
|
* DB????????????眼??軸??篆?? |
| 53 |
|
|
* institute -> division |
| 54 |
|
|
* organizaion -> company_name |
| 55 |
|
|
* |
| 56 |
youi |
1.21 |
* Revision 1.20 2004/12/01 04:37:04 youi |
| 57 |
|
|
* freeResult: unsigned int* ?? int* ?娯信罩? |
| 58 |
|
|
* ?潟?<?潟???????∽?違???????菴処?. |
| 59 |
|
|
* |
| 60 |
youi |
1.20 |
* Revision 1.19 2004/11/30 06:40:11 youi |
| 61 |
|
|
* ?∽?違??菴遵??(gidExists, uidExists) |
| 62 |
|
|
* getGroupCount??絎?臂? |
| 63 |
|
|
* getGroupsByUid??絎?臂? |
| 64 |
|
|
* isGroupAdmin??篆??. |
| 65 |
|
|
* dumpGroupAdmins??絎?臂? |
| 66 |
|
|
* deleteMember??絎?臂? |
| 67 |
|
|
* insertMember??絎?臂? |
| 68 |
|
|
* getMembers??絎?臂? |
| 69 |
|
|
* isModerator??絎?臂? |
| 70 |
|
|
* |
| 71 |
youi |
1.19 |
* Revision 1.18 2004/11/30 05:46:32 aga |
| 72 |
|
|
* ??ession????remoteHost?????? |
| 73 |
|
|
* |
| 74 |
aga |
1.18 |
* Revision 1.17 2004/11/27 09:35:49 youi |
| 75 |
|
|
* isActivated??絎?臂? |
| 76 |
|
|
* activate??絎?臂? |
| 77 |
|
|
* dumpUid??絎?臂? |
| 78 |
|
|
* |
| 79 |
youi |
1.17 |
* Revision 1.16 2004/11/27 06:29:29 youi |
| 80 |
|
|
* getAccountCount??絎?臂? |
| 81 |
|
|
* dumpGids??絎?臂? |
| 82 |
|
|
* insertGroup, deleteGroup, updateGroup??絎?臂? |
| 83 |
|
|
* getGroup, getGroups??絎?臂? |
| 84 |
|
|
* ???若?帥???若?劫?????????弱?冴?????鐚?RES_DB_NOT_INITIALIZED??菴????????????∽?違??申?? |
| 85 |
|
|
* (???綽????∽?違??罧??c??????) |
| 86 |
|
|
* |
| 87 |
youi |
1.16 |
* Revision 1.15 2004/11/27 02:22:22 aga |
| 88 |
|
|
* ??nitializeDB????ddSlashes()???若?吟???純?<??????篆??. |
| 89 |
|
|
* |
| 90 |
aga |
1.15 |
* Revision 1.14 2004/11/27 01:07:31 youi |
| 91 |
|
|
* criteria2str: LIMIT??RDER BY?????????ャ???帥????. |
| 92 |
|
|
* |
| 93 |
youi |
1.14 |
* Revision 1.13 2004/11/27 00:35:39 youi |
| 94 |
|
|
* getAccounts??絎?臂? |
| 95 |
|
|
* getAccount??篆??鐚???????etAccounts???若?喝?冴??. |
| 96 |
|
|
* criteria2str??絎?臂? |
| 97 |
|
|
* |
| 98 |
youi |
1.13 |
* Revision 1.12 2004/11/26 09:45:28 youi |
| 99 |
|
|
* getAccount??絎?臂? |
| 100 |
|
|
* |
| 101 |
youi |
1.12 |
* Revision 1.11 2004/11/26 08:16:26 aga |
| 102 |
|
|
* ??etSession, loginUser, createSession, freeResult(const session_t*) 篆??. |
| 103 |
|
|
* |
| 104 |
aga |
1.11 |
* Revision 1.10 2004/11/26 07:57:42 youi |
| 105 |
|
|
* updateAccount, deleteAccount??絎?臂? |
| 106 |
|
|
* mysql_query紊掩??????tderr?吾?????若?潟?若?????????若?<???祉?若?吾???阪??. |
| 107 |
|
|
* |
| 108 |
youi |
1.10 |
* Revision 1.9 2004/11/26 07:38:02 aga |
| 109 |
|
|
* ??AILUE -> FAILURE. |
| 110 |
|
|
* |
| 111 |
aga |
1.9 |
* Revision 1.8 2004/11/26 06:36:55 aga |
| 112 |
|
|
* ??reateSession, getSession ??篏???. |
| 113 |
|
|
* |
| 114 |
aga |
1.8 |
* Revision 1.7 2004/11/26 04:51:47 youi |
| 115 |
|
|
* dbprefix??絎?臂?????. |
| 116 |
|
|
* insertAccount??絎?臂?????. |
| 117 |
|
|
* isValidSessionID??絎?臂?????. |
| 118 |
|
|
* |
| 119 |
youi |
1.7 |
* Revision 1.6 2004/11/26 04:35:55 aga |
| 120 |
|
|
* ??oginUser(), logoutUser()??篏???. |
| 121 |
|
|
* |
| 122 |
aga |
1.6 |
* Revision 1.5 2004/11/26 01:08:25 aga |
| 123 |
|
|
* ??ddSlashes()篏???. |
| 124 |
|
|
* |
| 125 |
aga |
1.5 |
* Revision 1.4 2004/11/25 12:14:29 youi |
| 126 |
|
|
* getUid????????絎?臂?????. |
| 127 |
|
|
* |
| 128 |
youi |
1.4 |
* Revision 1.3 2004/11/25 11:13:59 youi |
| 129 |
|
|
* getLastErrorString/setLastErrorString??絎?臂? |
| 130 |
|
|
* |
| 131 |
youi |
1.3 |
* Revision 1.2 2004/11/25 08:55:19 youi |
| 132 |
|
|
* 綣??違??????篆??. |
| 133 |
|
|
* freeResult??菴遵??. |
| 134 |
|
|
* |
| 135 |
youi |
1.2 |
* Revision 1.1 2004/11/25 05:14:58 youi |
| 136 |
|
|
* initial version |
| 137 |
|
|
* |
| 138 |
youi |
1.1 |
* |
| 139 |
|
|
*/ |
| 140 |
youi |
1.35 |
#ifdef WIN32 |
| 141 |
|
|
#include <windows.h> |
| 142 |
youi |
1.28 |
#endif |
| 143 |
|
|
|
| 144 |
|
|
#ifdef USE_SYSLOG |
| 145 |
|
|
#include <syslog.h> |
| 146 |
|
|
#endif |
| 147 |
|
|
|
| 148 |
youi |
1.1 |
#include <stdio.h> |
| 149 |
aga |
1.6 |
#include <stdlib.h> |
| 150 |
youi |
1.1 |
#include <string.h> |
| 151 |
youi |
1.3 |
#include <string> |
| 152 |
aga |
1.27 |
#include <assert.h> |
| 153 |
youi |
1.32 |
#include <sql.h> |
| 154 |
|
|
#include <sqlext.h> |
| 155 |
youi |
1.7 |
using namespace std; |
| 156 |
youi |
1.1 |
|
| 157 |
|
|
#include "common.h" |
| 158 |
|
|
#include "account.h" |
| 159 |
|
|
#include "group.h" |
| 160 |
|
|
#include "session.h" |
| 161 |
|
|
#include "criteria.h" |
| 162 |
|
|
#include "commonal.h" |
| 163 |
|
|
|
| 164 |
youi |
1.32 |
static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX |
| 165 |
|
|
|
| 166 |
|
|
static SQLHANDLE henv = NULL; |
| 167 |
|
|
static SQLHANDLE hdbc = NULL; |
| 168 |
|
|
static SQLHANDLE hstmt = NULL; |
| 169 |
|
|
|
| 170 |
youi |
1.33 |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ); |
| 171 |
youi |
1.35 |
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ); |
| 172 |
youi |
1.32 |
|
| 173 |
|
|
static result_t countResultRows( const char* sql, SQLINTEGER* count ) |
| 174 |
|
|
{ |
| 175 |
|
|
result_t ret = RES_ERROR; |
| 176 |
|
|
SQLRETURN sqlcode; |
| 177 |
|
|
SQLHANDLE hstmt = NULL; |
| 178 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 179 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql, strlen( sql ) ) ) == SQL_SUCCESS ){ |
| 180 |
|
|
*count = 0; |
| 181 |
|
|
while( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ) ( *count )++; |
| 182 |
|
|
ret = RES_OK; |
| 183 |
|
|
}else{ |
| 184 |
|
|
string s( "SQLExecDirect in countResultRows " ); |
| 185 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 186 |
youi |
1.32 |
s += "sql="; |
| 187 |
|
|
s += string( sql ); |
| 188 |
|
|
setLastErrorString( s.c_str( ) ); |
| 189 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 190 |
|
|
} |
| 191 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 192 |
|
|
} |
| 193 |
|
|
return ret; |
| 194 |
|
|
} |
| 195 |
|
|
|
| 196 |
|
|
/** |
| 197 |
|
|
* |
| 198 |
|
|
* ??絖????潟???種? |
| 199 |
|
|
* ??絎???絖??違???潟???若??鐚????????<????緇???NULL腟?腴?????鐚?/span> |
| 200 |
|
|
* ( dst???泣?ゃ? >= len + 1 )?с????????/span> |
| 201 |
|
|
* |
| 202 |
|
|
*/ |
| 203 |
|
|
static char* strncpy2( char* dst, const char* src, int len ) |
| 204 |
|
|
{ |
| 205 |
|
|
strncpy( dst, src, len ); |
| 206 |
|
|
dst[ len ] = '\0'; |
| 207 |
|
|
// fprintf( stderr, "strncpy2 '%s'\n", dst ); |
| 208 |
|
|
return dst; |
| 209 |
|
|
} |
| 210 |
|
|
|
| 211 |
|
|
/** |
| 212 |
|
|
* |
| 213 |
|
|
* SQL???茵?腟????????????惹??絖????????????? |
| 214 |
|
|
* |
| 215 |
|
|
* @param hstmt SQL??????潟????/span> |
| 216 |
|
|
* @param sqlcode SQLExecDirect,SQLExecute???祉????/span> |
| 217 |
|
|
* @return ?????惹??絖??? |
| 218 |
|
|
*/ |
| 219 |
youi |
1.33 |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ) |
| 220 |
youi |
1.32 |
{ |
| 221 |
|
|
string s; |
| 222 |
|
|
if( sqlcode == SQL_ERROR || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 223 |
|
|
SQLCHAR SQLState[6]; |
| 224 |
|
|
SQLINTEGER NativeError; |
| 225 |
|
|
SQLCHAR MessageText[ 1024 ]; |
| 226 |
|
|
SQLSMALLINT BufferLength; |
| 227 |
|
|
SQLSMALLINT TextLength; |
| 228 |
youi |
1.33 |
SQLGetDiagRec( HandleType, hstmt, 1, SQLState, &NativeError, MessageText, 1024, &TextLength ); |
| 229 |
youi |
1.32 |
|
| 230 |
|
|
s += string( (char*)MessageText ); |
| 231 |
|
|
s += " SQLSTATE="; |
| 232 |
|
|
s += string( (char*)SQLState ); |
| 233 |
|
|
|
| 234 |
|
|
} |
| 235 |
|
|
s += " sqlcode="; |
| 236 |
|
|
s += intToString( sqlcode ); |
| 237 |
|
|
return s; |
| 238 |
|
|
} |
| 239 |
|
|
|
| 240 |
|
|
/** |
| 241 |
|
|
* |
| 242 |
|
|
* ??絎??????????ゃ???????冴??????????絖?????菴??? |
| 243 |
|
|
* |
| 244 |
|
|
*/ |
| 245 |
|
|
string getResultCol( SQLHANDLE hstmt, int col ) |
| 246 |
|
|
{ |
| 247 |
|
|
string s; |
| 248 |
|
|
SQLRETURN sqlcode; |
| 249 |
|
|
SQLCHAR BinaryPtr[5000]; |
| 250 |
|
|
SQLUINTEGER PartID; |
| 251 |
|
|
SQLINTEGER PartIDInd, BinaryLenOrInd, NumBytes; |
| 252 |
|
|
SQLRETURN rc; |
| 253 |
|
|
|
| 254 |
|
|
while ( ( sqlcode = SQLGetData(hstmt, col, SQL_C_CHAR, BinaryPtr, sizeof(BinaryPtr), |
| 255 |
|
|
&BinaryLenOrInd)) != SQL_NO_DATA) { |
| 256 |
|
|
NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd; |
| 257 |
youi |
1.33 |
if( NumBytes >= 0 ){ |
| 258 |
|
|
s += string( (char*)BinaryPtr, NumBytes ); |
| 259 |
|
|
} |
| 260 |
youi |
1.32 |
} |
| 261 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 262 |
|
|
// openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 263 |
|
|
// syslog( LOG_DEBUG, "getResultCol col=%d ret='%s'\n", col, s.c_str()); |
| 264 |
|
|
// closelog( ); |
| 265 |
|
|
#endif |
| 266 |
youi |
1.32 |
return s; |
| 267 |
|
|
} |
| 268 |
youi |
1.7 |
|
| 269 |
aga |
1.5 |
|
| 270 |
|
|
/** |
| 271 |
|
|
* |
| 272 |
youi |
1.32 |
* ?????若????????\荐??激?с???鴻?宴?若?????? |
| 273 |
aga |
1.5 |
* |
| 274 |
youi |
1.32 |
* @param str addslashes???鴻????絖?????NULL??絎?筝????? |
| 275 |
|
|
* @return 紊???緇?????絖??? |
| 276 |
aga |
1.5 |
*/ |
| 277 |
|
|
string addSlashes( const char *str ) |
| 278 |
|
|
{ |
| 279 |
youi |
1.32 |
if ( hdbc == NULL ){ |
| 280 |
aga |
1.15 |
string s; |
| 281 |
|
|
return s; |
| 282 |
youi |
1.32 |
}else{ |
| 283 |
|
|
string s( str ); |
| 284 |
|
|
return s; |
| 285 |
|
|
} |
| 286 |
|
|
|
| 287 |
|
|
int len = strlen(str) * 3; |
| 288 |
|
|
char* dst = new char[ len ]; |
| 289 |
|
|
const char* from = str; |
| 290 |
|
|
char* to = dst; |
| 291 |
|
|
while( *from != '\0' ){ |
| 292 |
|
|
switch( *from ){ |
| 293 |
|
|
case '\'': |
| 294 |
|
|
case '\"': |
| 295 |
|
|
case ';': |
| 296 |
|
|
*to = '\\'; to++; |
| 297 |
|
|
break; |
| 298 |
|
|
} |
| 299 |
|
|
*to = *from; to++; |
| 300 |
|
|
from++; |
| 301 |
|
|
} |
| 302 |
|
|
*to = '\0'; |
| 303 |
|
|
string s( dst ); |
| 304 |
|
|
delete[] dst; |
| 305 |
aga |
1.5 |
return s; |
| 306 |
|
|
} |
| 307 |
|
|
|
| 308 |
youi |
1.13 |
/** |
| 309 |
|
|
* |
| 310 |
youi |
1.19 |
* gid??????????с???? |
| 311 |
|
|
* DB???≪???祉?劫け????????false??????鐚?/span> |
| 312 |
|
|
* |
| 313 |
|
|
* @param gid ???с??????????GID |
| 314 |
|
|
* @return true 絖??????? |
| 315 |
|
|
* @return false 絖????????? |
| 316 |
|
|
* |
| 317 |
|
|
*/ |
| 318 |
|
|
static bool gidExists( groupid_t gid ) |
| 319 |
|
|
{ |
| 320 |
|
|
string sql; |
| 321 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 322 |
|
|
SQLHANDLE hstmt = NULL; |
| 323 |
youi |
1.19 |
|
| 324 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) != SQL_SUCCESS ) { |
| 325 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in gidExists" ); |
| 326 |
|
|
return false; |
| 327 |
|
|
} |
| 328 |
|
|
|
| 329 |
youi |
1.19 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups "; |
| 330 |
|
|
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 331 |
youi |
1.32 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) != SQL_SUCCESS ){ |
| 332 |
|
|
setLastErrorString( "SQLExecDirect in gidExists" ); |
| 333 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 334 |
youi |
1.19 |
return false; |
| 335 |
|
|
} |
| 336 |
youi |
1.32 |
|
| 337 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) != SQL_SUCCESS ){ |
| 338 |
|
|
setLastErrorString( "SQLFetch in gidExists" ); |
| 339 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 340 |
youi |
1.19 |
return false; |
| 341 |
|
|
} |
| 342 |
youi |
1.32 |
|
| 343 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 344 |
youi |
1.19 |
return true; |
| 345 |
|
|
} |
| 346 |
|
|
|
| 347 |
|
|
|
| 348 |
|
|
/** |
| 349 |
|
|
* |
| 350 |
youi |
1.20 |
* Platform???若?倶???宴??id??絖??????????????с???? |
| 351 |
youi |
1.19 |
* DB???≪???祉?劫け????????false??????鐚?/span> |
| 352 |
|
|
* |
| 353 |
|
|
* @param uid ???с??????????UID |
| 354 |
|
|
* @return true 絖??????? |
| 355 |
|
|
* @return false 絖????????? |
| 356 |
|
|
* |
| 357 |
|
|
*/ |
| 358 |
|
|
static bool uidExists( userid_t uid ) |
| 359 |
|
|
{ |
| 360 |
youi |
1.32 |
bool ret = false; |
| 361 |
youi |
1.19 |
string sql; |
| 362 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 363 |
|
|
SQLINTEGER count = 0; |
| 364 |
youi |
1.19 |
|
| 365 |
|
|
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
| 366 |
|
|
sql += "WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 367 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 368 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 369 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 370 |
|
|
ret = true; |
| 371 |
|
|
}else{ |
| 372 |
|
|
string s( "SQLFetch in uidExists "); |
| 373 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 374 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 375 |
|
|
setLastErrorString( s.c_str( ) ); |
| 376 |
|
|
ret = false; |
| 377 |
|
|
} |
| 378 |
|
|
}else{ |
| 379 |
|
|
string s( "SQLExecDirect in uidExists "); |
| 380 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 381 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 382 |
|
|
setLastErrorString( s.c_str( ) ); |
| 383 |
|
|
ret = false; |
| 384 |
|
|
} |
| 385 |
|
|
}else{ |
| 386 |
|
|
string s( "SQLAllocHandle in uidExists "); |
| 387 |
youi |
1.35 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 388 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 389 |
|
|
ret = false; |
| 390 |
youi |
1.19 |
} |
| 391 |
youi |
1.32 |
return ret; |
| 392 |
youi |
1.19 |
} |
| 393 |
|
|
|
| 394 |
|
|
|
| 395 |
|
|
/** |
| 396 |
|
|
* |
| 397 |
youi |
1.13 |
* criteria ?? SQL????????? |
| 398 |
|
|
* |
| 399 |
|
|
* |
| 400 |
|
|
* |
| 401 |
|
|
*/ |
| 402 |
|
|
string criteria2str( criteria* cri ) |
| 403 |
|
|
{ |
| 404 |
|
|
string sql; |
| 405 |
|
|
|
| 406 |
|
|
const orderby* odrby = cri -> headOrderBy( ); |
| 407 |
|
|
if( odrby != 0 ){ |
| 408 |
|
|
sql += " ORDER BY " + string( odrby -> getColumn( ) ); |
| 409 |
|
|
sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " "; |
| 410 |
|
|
while( ( odrby = cri -> nextOrderBy( ) ) != 0 ){ |
| 411 |
|
|
sql += ", " + string( odrby -> getColumn( ) ); |
| 412 |
|
|
sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " "; |
| 413 |
|
|
} |
| 414 |
youi |
1.14 |
} |
| 415 |
|
|
|
| 416 |
|
|
if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){ |
| 417 |
|
|
sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) ) |
| 418 |
|
|
+ ", " + string( intToString( cri -> getLimitRows( ) ) ); |
| 419 |
youi |
1.13 |
} |
| 420 |
|
|
return sql; |
| 421 |
|
|
} |
| 422 |
youi |
1.1 |
|
| 423 |
youi |
1.32 |
|
| 424 |
youi |
1.1 |
/** |
| 425 |
|
|
* |
| 426 |
|
|
* ???若?帥???若?鴻???????? |
| 427 |
|
|
* |
| 428 |
youi |
1.32 |
* @param dsn DSN |
| 429 |
youi |
1.1 |
* @param user ???若?帥???若?鴻???≪???祉?鴻???????若?九?? |
| 430 |
|
|
* @param password 筝?荐????若?吟?????鴻???若?? |
| 431 |
youi |
1.32 |
* @param dbname ??????/span> |
| 432 |
youi |
1.1 |
* @param prefix XOOPS???若?帥???若?鴻???若??????REFIX |
| 433 |
youi |
1.31 |
* @return RES_OK |
| 434 |
|
|
* @return RES_DB_INITIALIZE_ERROR |
| 435 |
|
|
* @return RES_DB_CONNECT_ERROR |
| 436 |
youi |
1.1 |
* @refer result_t |
| 437 |
|
|
*/ |
| 438 |
youi |
1.32 |
result_t initializeDB( const char* dsn, const char* user, const char* password, const char* dbname, const char* prefix ) |
| 439 |
youi |
1.1 |
{ |
| 440 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 441 |
|
|
|
| 442 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 443 |
|
|
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 444 |
|
|
#endif |
| 445 |
youi |
1.1 |
// ?≪??・膓?筝???????筝???????/span> |
| 446 |
youi |
1.32 |
if ( hdbc != NULL ) |
| 447 |
|
|
SQLDisconnect( hdbc ); |
| 448 |
youi |
1.1 |
|
| 449 |
youi |
1.7 |
dbprefix = prefix; |
| 450 |
|
|
|
| 451 |
youi |
1.32 |
// ????????・膓? |
| 452 |
|
|
// if( SQLAllocEnv( &henv ) != SQL_SUCCESS ) { |
| 453 |
|
|
if( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) != SQL_SUCCESS ) { |
| 454 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_ENV,...) in initializeDB" ); |
| 455 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 456 |
|
|
syslog( LOG_DEBUG, "initializeDB %s", getLastErrorString( ) ); |
| 457 |
|
|
closelog( ); |
| 458 |
|
|
#endif |
| 459 |
youi |
1.32 |
return RES_DB_INITIALIZE_ERROR; |
| 460 |
|
|
} |
| 461 |
|
|
//ODBC Ver.3 ????????????????????с??荐?? |
| 462 |
|
|
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); |
| 463 |
aga |
1.27 |
|
| 464 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ) != SQL_SUCCESS ) { |
| 465 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_DBC,...) in initializeDB" ); |
| 466 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 467 |
|
|
syslog( LOG_DEBUG, "initializeDB %s", getLastErrorString( ) ); |
| 468 |
|
|
closelog( ); |
| 469 |
|
|
#endif |
| 470 |
youi |
1.1 |
return RES_DB_INITIALIZE_ERROR; |
| 471 |
|
|
} |
| 472 |
youi |
1.32 |
//???違?ゃ?潟??腱?篁ヤ?荀????????帥?ゃ???≪????????荐?? |
| 473 |
|
|
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); |
| 474 |
youi |
1.33 |
|
| 475 |
youi |
1.32 |
if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){ |
| 476 |
youi |
1.33 |
string s( "SQLConnect in initializeDB " ); |
| 477 |
|
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 478 |
|
|
setLastErrorString( s.c_str( ) ); |
| 479 |
|
|
#ifdef USE_SYSLOG |
| 480 |
|
|
syslog( LOG_DEBUG, "initializeDB %s", getLastErrorString( ) ); |
| 481 |
|
|
closelog( ); |
| 482 |
|
|
#endif |
| 483 |
youi |
1.1 |
return RES_DB_CONNECT_ERROR; |
| 484 |
aga |
1.27 |
} |
| 485 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 486 |
|
|
syslog( LOG_DEBUG, "initializeDB succeed" ); |
| 487 |
|
|
closelog( ); |
| 488 |
|
|
#endif |
| 489 |
aga |
1.27 |
return RES_OK; |
| 490 |
|
|
} |
| 491 |
|
|
|
| 492 |
|
|
/** |
| 493 |
|
|
* |
| 494 |
|
|
* DB?ョ????????違???????????障?????? |
| 495 |
|
|
* |
| 496 |
|
|
* @param ???? |
| 497 |
|
|
* @return RES_OK |
| 498 |
|
|
*/ |
| 499 |
|
|
result_t uninitializeDB() |
| 500 |
|
|
{ |
| 501 |
youi |
1.32 |
if ( hdbc != NULL ){ |
| 502 |
|
|
SQLDisconnect( hdbc ); |
| 503 |
|
|
hdbc = NULL; |
| 504 |
youi |
1.1 |
} |
| 505 |
youi |
1.2 |
return RES_OK; |
| 506 |
youi |
1.1 |
} |
| 507 |
|
|
|
| 508 |
|
|
/** |
| 509 |
|
|
* |
| 510 |
|
|
* Platform???若?倶?粋??倶????緇? |
| 511 |
|
|
* |
| 512 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 513 |
|
|
* @param uid ?倶??????緇??????????若?吟??ID |
| 514 |
|
|
* @return true ?粋?羝???/span> |
| 515 |
|
|
* @return false ???粋? |
| 516 |
youi |
1.1 |
* |
| 517 |
|
|
*/ |
| 518 |
youi |
1.2 |
bool isActivated( sessionid_t sid, userid_t uid ) |
| 519 |
youi |
1.1 |
{ |
| 520 |
youi |
1.32 |
if( hdbc == NULL ) return false; |
| 521 |
youi |
1.17 |
if( !isValidSessionID( sid ) ) return false; |
| 522 |
|
|
|
| 523 |
youi |
1.32 |
bool ret = false; |
| 524 |
youi |
1.17 |
string sql; |
| 525 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 526 |
|
|
SQLHANDLE hstmt = NULL; |
| 527 |
youi |
1.17 |
|
| 528 |
|
|
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
| 529 |
|
|
sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) ); |
| 530 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 531 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 532 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 533 |
|
|
ret = true; |
| 534 |
|
|
}else{ |
| 535 |
|
|
string s( "SQLFetch in isActivated " ); |
| 536 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 537 |
youi |
1.32 |
s += ", sql=" + sql; |
| 538 |
|
|
setLastErrorString( s.c_str() ); |
| 539 |
|
|
ret = false; |
| 540 |
|
|
} |
| 541 |
|
|
}else{ |
| 542 |
|
|
string s( "SQLExecDirect in isActivated " ); |
| 543 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 544 |
youi |
1.32 |
s += ", sql=" + sql; |
| 545 |
|
|
setLastErrorString( s.c_str() ); |
| 546 |
|
|
ret = false; |
| 547 |
|
|
} |
| 548 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 549 |
|
|
}else{ |
| 550 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isActivated" ); |
| 551 |
|
|
ret = false; |
| 552 |
youi |
1.17 |
} |
| 553 |
youi |
1.32 |
return ret; |
| 554 |
youi |
1.1 |
} |
| 555 |
|
|
|
| 556 |
|
|
/** |
| 557 |
|
|
* |
| 558 |
|
|
* Platform???若?倶?粋??倶??紊???/span> |
| 559 |
|
|
* |
| 560 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 561 |
|
|
* @param uid 紊??眼?????????若?吟??ID |
| 562 |
|
|
* @param activate ?粋?(true) / ???粋?(false)????絎? |
| 563 |
|
|
* @return RES_OK |
| 564 |
|
|
* @return RES_DB_QUERY_ERROR |
| 565 |
|
|
* @return RES_NO_SUCH_USER |
| 566 |
youi |
1.1 |
*/ |
| 567 |
youi |
1.2 |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
| 568 |
youi |
1.1 |
{ |
| 569 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 570 |
youi |
1.17 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 571 |
|
|
|
| 572 |
|
|
string sql; |
| 573 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 574 |
|
|
result_t ret = RES_ERROR; |
| 575 |
youi |
1.17 |
|
| 576 |
|
|
sql = "UPDATE " + dbprefix + "_vpaccount_users "; |
| 577 |
|
|
sql += "SET activate=" + string( activate ? "1" : "0" ); |
| 578 |
|
|
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 579 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 580 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 581 |
|
|
SQLINTEGER count = 0; |
| 582 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 583 |
|
|
ret = RES_OK; |
| 584 |
|
|
}else{ |
| 585 |
|
|
string s( "SQLRowCount in activate "); |
| 586 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 587 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 588 |
|
|
setLastErrorString( s.c_str( ) ); |
| 589 |
|
|
ret = RES_NO_SUCH_USER; |
| 590 |
|
|
} |
| 591 |
|
|
}else{ |
| 592 |
|
|
string s( "SQLExecDirect in activate " ); |
| 593 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 594 |
youi |
1.32 |
s += ", sql="; |
| 595 |
|
|
s += string( sql ); |
| 596 |
|
|
setLastErrorString( s.c_str( ) ); |
| 597 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 598 |
|
|
} |
| 599 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 600 |
|
|
}else{ |
| 601 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in activate" ); |
| 602 |
|
|
ret = RES_ERROR; |
| 603 |
youi |
1.17 |
} |
| 604 |
youi |
1.32 |
return ret; |
| 605 |
youi |
1.1 |
} |
| 606 |
|
|
|
| 607 |
|
|
/** |
| 608 |
|
|
* |
| 609 |
youi |
1.31 |
* ?≪?????潟???違????緇?????鐚?/span> |
| 610 |
youi |
1.1 |
* |
| 611 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 612 |
|
|
* @return ?≪?????潟????/span> |
| 613 |
youi |
1.1 |
* |
| 614 |
|
|
*/ |
| 615 |
youi |
1.2 |
int getAccountCount( sessionid_t sid ) |
| 616 |
youi |
1.1 |
{ |
| 617 |
youi |
1.32 |
if( hdbc == NULL ) return 0; |
| 618 |
youi |
1.16 |
if( !isValidSessionID( sid ) ) return 0; |
| 619 |
|
|
|
| 620 |
|
|
int ret = 0; |
| 621 |
|
|
string sql; |
| 622 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 623 |
|
|
SQLHANDLE hstmt = NULL; |
| 624 |
youi |
1.16 |
|
| 625 |
|
|
//?≪?????潟???違??羆????? |
| 626 |
|
|
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users "; |
| 627 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 628 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 629 |
|
|
SQLUINTEGER count = 0; |
| 630 |
|
|
SQLINTEGER len; |
| 631 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 632 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 633 |
|
|
ret = count; |
| 634 |
|
|
}else { |
| 635 |
|
|
string s( "SQLFetch in getAccountCount sql=" ); |
| 636 |
|
|
s += string( sql ); |
| 637 |
|
|
setLastErrorString( s.c_str( ) ); |
| 638 |
|
|
ret = 0; |
| 639 |
|
|
} |
| 640 |
|
|
}else{ |
| 641 |
|
|
setLastErrorString( "SQLExecDirect in getAccountCount" ); |
| 642 |
|
|
ret = 0; |
| 643 |
|
|
} |
| 644 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 645 |
youi |
1.16 |
}else{ |
| 646 |
youi |
1.32 |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccountCount" ); |
| 647 |
|
|
ret = 0; |
| 648 |
youi |
1.16 |
} |
| 649 |
|
|
return ret; |
| 650 |
youi |
1.1 |
} |
| 651 |
|
|
|
| 652 |
|
|
/** |
| 653 |
|
|
* |
| 654 |
|
|
* ?≪?????潟??????/span> |
| 655 |
youi |
1.35 |
* ?違???若???????????ゃ?????若?倶???宴?????ゃ??茵??????障??鐚?/span> |
| 656 |
youi |
1.1 |
* |
| 657 |
|
|
* @param |
| 658 |
youi |
1.20 |
* @return RES_OK |
| 659 |
youi |
1.35 |
* @return RES_ERROR |
| 660 |
youi |
1.31 |
* @return RES_DB_NOT_INITIALIZED |
| 661 |
youi |
1.20 |
* @return RES_NO_SUCH_SESSION |
| 662 |
|
|
* @return RES_DB_QUERY_ERROR |
| 663 |
youi |
1.1 |
* |
| 664 |
|
|
*/ |
| 665 |
youi |
1.2 |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
| 666 |
youi |
1.1 |
{ |
| 667 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 668 |
youi |
1.10 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 669 |
youi |
1.32 |
|
| 670 |
|
|
result_t ret1 = RES_ERROR, ret2 = RES_ERROR; |
| 671 |
youi |
1.35 |
criteria_t c; |
| 672 |
youi |
1.32 |
string sql; |
| 673 |
youi |
1.35 |
groupid_t* gids; |
| 674 |
|
|
int gidsLen; |
| 675 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 676 |
|
|
SQLHANDLE hstmt = NULL; |
| 677 |
youi |
1.10 |
|
| 678 |
youi |
1.35 |
/* |
| 679 |
|
|
1. delete user from default platform group |
| 680 |
|
|
2. delete user profile from xoops_users |
| 681 |
|
|
3. delete platform user from vpaccount_users |
| 682 |
|
|
*/ |
| 683 |
|
|
|
| 684 |
|
|
//1. delete user from platform groups |
| 685 |
|
|
c.clearAll(); |
| 686 |
|
|
if( getGroupsByUid( sid, uid, &c, &gids, &gidsLen ) == RES_OK ){ |
| 687 |
|
|
for( int i = 0; i < gidsLen; i++ ) |
| 688 |
|
|
deleteMemberNoLimit( sid, gids[ i ], uid ); |
| 689 |
|
|
freeGID( gids ); |
| 690 |
|
|
} |
| 691 |
|
|
|
| 692 |
|
|
//2. delete user profile from xoops_users |
| 693 |
youi |
1.10 |
sql = "DELETE FROM " + dbprefix + "_users "; |
| 694 |
|
|
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 695 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 696 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 697 |
|
|
SQLINTEGER count = 0; |
| 698 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 699 |
|
|
ret1 = RES_OK; |
| 700 |
|
|
}else{ |
| 701 |
|
|
string s( "SQLRowCount in deleteAccount" ); |
| 702 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 703 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 704 |
|
|
setLastErrorString( s.c_str( ) ); |
| 705 |
|
|
ret1 = RES_NO_SUCH_USER; |
| 706 |
|
|
} |
| 707 |
|
|
}else{ |
| 708 |
|
|
string s( "SQLExecDirect in deleteAccount" ); |
| 709 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 710 |
youi |
1.32 |
s += ", sql="; |
| 711 |
|
|
s += string( sql ); |
| 712 |
|
|
setLastErrorString( s.c_str( ) ); |
| 713 |
|
|
ret1 = RES_DB_QUERY_ERROR; |
| 714 |
|
|
} |
| 715 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 716 |
|
|
}else{ |
| 717 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 718 |
|
|
ret1 = RES_ERROR; |
| 719 |
youi |
1.10 |
} |
| 720 |
|
|
|
| 721 |
youi |
1.35 |
//3. delete platform user from vpaccount_users |
| 722 |
youi |
1.10 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_users "; |
| 723 |
|
|
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 724 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 725 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 726 |
|
|
SQLINTEGER count = 0; |
| 727 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 728 |
|
|
ret2 = RES_OK; |
| 729 |
|
|
}else{ |
| 730 |
|
|
string s( "SQLRowCount in deleteAccount" ); |
| 731 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 732 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 733 |
|
|
setLastErrorString( s.c_str( ) ); |
| 734 |
|
|
ret2 = RES_NO_SUCH_USER; |
| 735 |
|
|
} |
| 736 |
|
|
}else{ |
| 737 |
|
|
string s( "SQLExecDirect in deleteAccount" ); |
| 738 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 739 |
youi |
1.32 |
s += ", sql="; |
| 740 |
|
|
s += string( sql ); |
| 741 |
|
|
setLastErrorString( s.c_str( ) ); |
| 742 |
|
|
ret2 = RES_DB_QUERY_ERROR; |
| 743 |
|
|
} |
| 744 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 745 |
|
|
}else{ |
| 746 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 747 |
|
|
ret2 = RES_ERROR; |
| 748 |
youi |
1.10 |
} |
| 749 |
|
|
|
| 750 |
youi |
1.32 |
//筝??鴻?с???????若?????????若??菴??? |
| 751 |
|
|
return ret1 != RES_OK ? ret1 : ret2; |
| 752 |
youi |
1.1 |
} |
| 753 |
|
|
|
| 754 |
|
|
/** |
| 755 |
|
|
* |
| 756 |
|
|
* ?≪?????潟?????怨?? |
| 757 |
|
|
* |
| 758 |
youi |
1.13 |
* @param sid ?祉???激?с??D |
| 759 |
|
|
* @param uid ??緇??????????若?吟??ID |
| 760 |
|
|
* @param acc ??緇??????≪?????潟??????account_t)?????ゃ?潟?帥???吾??莨若??綣???/span> |
| 761 |
youi |
1.20 |
* @return RES_OK |
| 762 |
youi |
1.31 |
* @return RES_DB_NOT_INITIALIZED |
| 763 |
youi |
1.20 |
* @return RES_NO_SUCH_USER |
| 764 |
|
|
* @return RES_NO_SUCH_SESSION |
| 765 |
|
|
* @return RES_DB_QUERY_ERROR |
| 766 |
youi |
1.1 |
* |
| 767 |
|
|
*/ |
| 768 |
youi |
1.12 |
result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc ) |
| 769 |
youi |
1.1 |
{ |
| 770 |
youi |
1.13 |
int len; |
| 771 |
|
|
static criteria c; |
| 772 |
|
|
result_t res = getAccounts( sid, &uid, 1, &c, acc, &len ); |
| 773 |
|
|
if( len == 0 ) return RES_NO_SUCH_USER; |
| 774 |
|
|
return res; |
| 775 |
|
|
} |
| 776 |
|
|
|
| 777 |
|
|
/** |
| 778 |
|
|
* |
| 779 |
|
|
* ?≪?????潟?????怨?? |
| 780 |
|
|
* |
| 781 |
|
|
* @param sid ?祉???激?с??D |
| 782 |
|
|
* @param uids ??緇??????????若?吟??ID?????? |
| 783 |
|
|
* @param uidsLen uids???????膣???/span> |
| 784 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 785 |
|
|
* @param accounts 罎?膣∝??????????????ゃ?潟?帥???吾??莨若??綣???/span> |
| 786 |
|
|
* @param accountsLen 罎?膣∝???????????*accounts???膣??? |
| 787 |
youi |
1.31 |
* @return RES_OK |
| 788 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 789 |
|
|
* @return RES_NO_SUCH_SESSION |
| 790 |
youi |
1.20 |
* @return RES_DB_QUERY_ERROR |
| 791 |
youi |
1.13 |
* |
| 792 |
|
|
*/ |
| 793 |
|
|
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
| 794 |
|
|
{ |
| 795 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 796 |
youi |
1.12 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 797 |
youi |
1.28 |
if( uidsLen <= 0 ){ |
| 798 |
|
|
*accounts = new account_t[ 0 ]; |
| 799 |
|
|
*accountsLen = 0; |
| 800 |
|
|
#ifdef USE_SYSLOG |
| 801 |
youi |
1.33 |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 802 |
|
|
syslog( LOG_DEBUG, "getAccounts succeed len=0" ); |
| 803 |
|
|
closelog( ); |
| 804 |
youi |
1.28 |
#endif |
| 805 |
|
|
return RES_OK; |
| 806 |
|
|
} |
| 807 |
youi |
1.12 |
|
| 808 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 809 |
|
|
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 810 |
|
|
syslog( LOG_DEBUG, "begin of getAccounts" ); |
| 811 |
|
|
#endif |
| 812 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 813 |
|
|
SQLRETURN sqlcode; |
| 814 |
|
|
SQLHANDLE hstmt = NULL; |
| 815 |
youi |
1.12 |
string sql; |
| 816 |
youi |
1.13 |
account_t* dst = new account_t[ uidsLen ]; |
| 817 |
youi |
1.12 |
|
| 818 |
youi |
1.21 |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.base_url, u2.notice_mail, u2.notice_mail_since "; |
| 819 |
youi |
1.13 |
sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_vpaccount_users AS u2 "; |
| 820 |
youi |
1.28 |
sql += "WHERE u1.uid = u2.uid "; |
| 821 |
|
|
if( uidsLen > 0 ){ |
| 822 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 823 |
|
|
syslog( LOG_DEBUG, "set uid[%d] value=%d to ...", 0, uids[0] ); |
| 824 |
|
|
#endif |
| 825 |
youi |
1.28 |
sql += "AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) ); |
| 826 |
|
|
for( int i = 1; i < uidsLen; i++ ){ |
| 827 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 828 |
|
|
syslog( LOG_DEBUG, "set uid[%d] value=%d to ...", i, uids[i] ); |
| 829 |
|
|
#endif |
| 830 |
youi |
1.28 |
sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) ); |
| 831 |
|
|
} |
| 832 |
|
|
sql += " ) "; |
| 833 |
youi |
1.12 |
} |
| 834 |
youi |
1.13 |
sql += criteria2str( cri ); |
| 835 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 836 |
|
|
syslog( LOG_DEBUG, "sql=%s", sql.c_str() ); |
| 837 |
|
|
#endif |
| 838 |
youi |
1.32 |
|
| 839 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 840 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 841 |
|
|
SQLINTEGER len; |
| 842 |
|
|
userid_t uid = 0; |
| 843 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 844 |
|
|
*accountsLen=0; |
| 845 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){ |
| 846 |
|
|
dst[ i ].setUID( uid ); |
| 847 |
|
|
dst[ i ].setName( getResultCol( hstmt, 2 ).c_str() ); |
| 848 |
|
|
dst[ i ].setUname( getResultCol( hstmt, 3 ).c_str() ); |
| 849 |
|
|
dst[ i ].setEmail( getResultCol( hstmt, 4 ).c_str() ); |
| 850 |
|
|
dst[ i ].setURL( getResultCol( hstmt, 5 ).c_str() ); |
| 851 |
|
|
dst[ i ].setUserAvatar( getResultCol( hstmt, 6 ).c_str() ); |
| 852 |
|
|
dst[ i ].setUserRegdate( atoi( getResultCol( hstmt, 7 ).c_str() ) ); |
| 853 |
|
|
dst[ i ].setUserIcq( getResultCol( hstmt, 8 ).c_str() ); |
| 854 |
|
|
dst[ i ].setUserFrom( getResultCol( hstmt, 9 ).c_str() ); |
| 855 |
|
|
dst[ i ].setUserSig( getResultCol( hstmt, 10 ).c_str() ); |
| 856 |
|
|
dst[ i ].setUserViewemail( atoi( getResultCol( hstmt, 11 ).c_str() )); |
| 857 |
|
|
dst[ i ].setActkey( getResultCol( hstmt, 12 ).c_str() ); |
| 858 |
|
|
dst[ i ].setUserAim( getResultCol( hstmt, 13 ).c_str() ); |
| 859 |
|
|
dst[ i ].setUserYim( getResultCol( hstmt, 14 ).c_str() ); |
| 860 |
|
|
dst[ i ].setUserMsnm( getResultCol( hstmt, 15 ).c_str() ); |
| 861 |
|
|
dst[ i ].setPass( getResultCol( hstmt, 16 ).c_str() ); |
| 862 |
|
|
dst[ i ].setPosts( atoi( getResultCol( hstmt, 17 ).c_str() )); |
| 863 |
|
|
dst[ i ].setAttachsig( atoi( getResultCol( hstmt, 18 ).c_str() )); |
| 864 |
|
|
dst[ i ].setRank( atoi( getResultCol( hstmt, 19 ).c_str() )); |
| 865 |
|
|
dst[ i ].setLevel( atoi( getResultCol( hstmt, 20 ).c_str() )); |
| 866 |
|
|
dst[ i ].setTheme( getResultCol( hstmt, 21 ).c_str() ); |
| 867 |
|
|
dst[ i ].setTimezoneOffset( atof( getResultCol( hstmt, 22 ).c_str() ) ); |
| 868 |
|
|
dst[ i ].setLastLogin( atoi( getResultCol( hstmt, 23 ).c_str() )); |
| 869 |
|
|
dst[ i ].setUmode( getResultCol( hstmt, 24 ).c_str() ); |
| 870 |
|
|
dst[ i ].setUorder( atoi( getResultCol( hstmt, 25 ).c_str() )); |
| 871 |
|
|
dst[ i ].setNotifyMethod( atoi( getResultCol( hstmt, 26 ).c_str() )); |
| 872 |
|
|
dst[ i ].setNotifyMode( atoi( getResultCol( hstmt, 27 ).c_str() )); |
| 873 |
|
|
dst[ i ].setUserOcc( getResultCol( hstmt, 28 ).c_str() ); |
| 874 |
|
|
dst[ i ].setBio( getResultCol( hstmt, 29 ).c_str() ); |
| 875 |
|
|
dst[ i ].setUserIntrest( getResultCol( hstmt, 30 ).c_str() ); |
| 876 |
|
|
dst[ i ].setUserMailok( atoi( getResultCol( hstmt, 31 ).c_str() )); |
| 877 |
|
|
dst[ i ].setActivate( atoi( getResultCol( hstmt, 32 ).c_str() )); |
| 878 |
|
|
dst[ i ].setAddress( getResultCol( hstmt, 33 ).c_str() ); |
| 879 |
|
|
dst[ i ].setDivision( getResultCol( hstmt, 34 ).c_str() ); |
| 880 |
|
|
dst[ i ].setTel( getResultCol( hstmt, 35 ).c_str() ); |
| 881 |
|
|
dst[ i ].setCompanyName( getResultCol( hstmt, 36 ).c_str() ); |
| 882 |
|
|
dst[ i ].setCountry( getResultCol( hstmt, 37 ).c_str() ); |
| 883 |
|
|
dst[ i ].setZipcode( getResultCol( hstmt, 38 ).c_str() ); |
| 884 |
|
|
dst[ i ].setFax( getResultCol( hstmt, 39 ).c_str() ); |
| 885 |
|
|
dst[ i ].setBaseURL( getResultCol( hstmt, 40 ).c_str() ); |
| 886 |
|
|
dst[ i ].setNoticeMail( atoi( getResultCol( hstmt, 41 ).c_str() )); |
| 887 |
|
|
dst[ i ].setNoticeMailSince( atoi( getResultCol( hstmt, 42 ).c_str() )); |
| 888 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 889 |
|
|
syslog( LOG_DEBUG, "set to account_t %d", i ); |
| 890 |
|
|
#endif |
| 891 |
youi |
1.32 |
( *accountsLen )++; |
| 892 |
|
|
} |
| 893 |
|
|
*accounts = dst; |
| 894 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 895 |
|
|
syslog( LOG_DEBUG, "getAccounts succeed" ); |
| 896 |
|
|
#endif |
| 897 |
youi |
1.32 |
ret = RES_OK; |
| 898 |
|
|
}else{ |
| 899 |
youi |
1.33 |
string s( "SQLExecDirect in getAccounts" ); |
| 900 |
|
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 901 |
|
|
s += string( ", sql=" ) + string( sql ); |
| 902 |
|
|
setLastErrorString( s.c_str( ) ); |
| 903 |
|
|
#ifdef USE_SYSLOG |
| 904 |
|
|
syslog( LOG_DEBUG, "getAccounts %s", getLastErrorString( ) ); |
| 905 |
|
|
#endif |
| 906 |
youi |
1.32 |
ret = RES_DB_QUERY_ERROR; |
| 907 |
|
|
} |
| 908 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 909 |
|
|
}else{ |
| 910 |
youi |
1.33 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
| 911 |
|
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 912 |
|
|
setLastErrorString( s.c_str( ) ); |
| 913 |
|
|
#ifdef USE_SYSLOG |
| 914 |
|
|
syslog( LOG_DEBUG, "getAccounts %s", getLastErrorString( ) ); |
| 915 |
|
|
#endif |
| 916 |
youi |
1.32 |
ret = RES_DB_QUERY_ERROR; |
| 917 |
youi |
1.12 |
} |
| 918 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 919 |
|
|
closelog( ); |
| 920 |
|
|
#endif |
| 921 |
youi |
1.32 |
return ret; |
| 922 |
youi |
1.1 |
} |
| 923 |
|
|
|
| 924 |
|
|
/** |
| 925 |
|
|
* |
| 926 |
youi |
1.25 |
* ?≪?????潟???脂?? |
| 927 |
youi |
1.35 |
* |
| 928 |
youi |
1.25 |
* ???若?倶???宴?????若?帥???若?鴻???脂?蚊???障??鐚?/span> |
| 929 |
youi |
1.35 |
* ?脂?蚊???????若?倶???宴???綽????????若??D??uid???主????障??鐚?/span> |
| 930 |
youi |
1.1 |
* |
| 931 |
youi |
1.7 |
* @param sid ?祉???激?с??/span> |
| 932 |
youi |
1.10 |
* @param account ?脂?蚊?????≪?????潟??????/span> |
| 933 |
youi |
1.25 |
* @param uid ?脂?蚊?????≪?????潟?????宴???綽????????若??D |
| 934 |
youi |
1.20 |
* @return RES_OK |
| 935 |
|
|
* @return RES_NO_SUCH_SESSION |
| 936 |
|
|
* @return RES_DB_QUERY_ERROR |
| 937 |
youi |
1.31 |
* @return RES_DB_NOT_INITIALIZED |
| 938 |
youi |
1.1 |
* |
| 939 |
|
|
*/ |
| 940 |
youi |
1.25 |
result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid ) |
| 941 |
youi |
1.1 |
{ |
| 942 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 943 |
youi |
1.10 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 944 |
|
|
|
| 945 |
youi |
1.7 |
string sql; |
| 946 |
|
|
string tmp; |
| 947 |
|
|
char buf[ 12 ]; |
| 948 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 949 |
|
|
result_t ret = RES_ERROR; |
| 950 |
youi |
1.7 |
|
| 951 |
youi |
1.35 |
/* |
| 952 |
|
|
1. insert user profile into xoops_users |
| 953 |
|
|
2. insert platform user profile into vpaccount_users |
| 954 |
|
|
3. add user to default platform group |
| 955 |
|
|
*/ |
| 956 |
|
|
|
| 957 |
|
|
//1.xoops?????若?吟???若???????吾??莨若?? |
| 958 |
youi |
1.32 |
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]; |
| 959 |
|
|
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 960 |
|
|
SQLDOUBLE timezone_offset; |
| 961 |
|
|
|
| 962 |
|
|
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; |
| 963 |
|
|
SQLINTEGER 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; |
| 964 |
|
|
|
| 965 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 966 |
|
|
string sql; |
| 967 |
|
|
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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
| 968 |
|
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 969 |
|
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 970 |
|
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 971 |
|
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 972 |
|
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 973 |
|
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 974 |
|
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 975 |
|
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 976 |
|
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 977 |
|
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 978 |
|
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 979 |
|
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 980 |
|
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 981 |
|
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 982 |
|
|
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 983 |
|
|
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 984 |
|
|
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 985 |
|
|
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 986 |
|
|
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 987 |
|
|
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 988 |
|
|
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 989 |
|
|
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 990 |
|
|
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 991 |
|
|
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 992 |
|
|
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 993 |
|
|
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 994 |
|
|
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 995 |
|
|
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 996 |
|
|
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 997 |
|
|
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 998 |
|
|
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 999 |
|
|
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1000 |
|
|
|
| 1001 |
|
|
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1002 |
|
|
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1003 |
|
|
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1004 |
|
|
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 1005 |
|
|
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 1006 |
|
|
user_regdate = time( NULL ); |
| 1007 |
|
|
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 1008 |
|
|
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 1009 |
|
|
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 1010 |
|
|
user_viewemail = account -> getUserViewemail( ); |
| 1011 |
|
|
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 1012 |
|
|
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 1013 |
|
|
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 1014 |
|
|
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 1015 |
|
|
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 1016 |
|
|
posts = account -> getPosts( ); |
| 1017 |
|
|
attachsig = account -> getAttachsig( ); |
| 1018 |
|
|
rank = account -> getRank( ); |
| 1019 |
|
|
level = account -> getLevel( ); |
| 1020 |
|
|
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 1021 |
|
|
timezone_offset = account -> getTimezoneOffset( ); |
| 1022 |
|
|
last_login = 0; |
| 1023 |
|
|
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 1024 |
|
|
uorder = account -> getUorder( ); |
| 1025 |
|
|
notify_method = account -> getNotifyMethod( ); |
| 1026 |
|
|
notify_mode = account -> getNotifyMode( ); |
| 1027 |
|
|
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 1028 |
|
|
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 1029 |
|
|
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 1030 |
|
|
user_mailok = account -> getUserMailok( ); |
| 1031 |
|
|
|
| 1032 |
|
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1033 |
|
|
SQLINTEGER count = 0; |
| 1034 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1035 |
|
|
//???若??D????緇????? |
| 1036 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 1037 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1038 |
|
|
sql = "SELECT LAST_INSERT_ID()"; // MySQL |
| 1039 |
|
|
// sql = "SELECT LAST_INSERT_ROWID()"; // SQLite |
| 1040 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1041 |
|
|
SQLUINTEGER last_insert_id; |
| 1042 |
|
|
SQLINTEGER len; |
| 1043 |
|
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &last_insert_id, 0, &len ); |
| 1044 |
|
|
if( ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS ){ |
| 1045 |
|
|
*uid = last_insert_id; |
| 1046 |
|
|
ret = RES_OK; |
| 1047 |
|
|
}else{ |
| 1048 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1049 |
|
|
string s( "SQLFetch in insertAccount " ); |
| 1050 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1051 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1052 |
|
|
} |
| 1053 |
|
|
}else{ |
| 1054 |
|
|
string s( "SQLExecDirect in insertAccount " ); |
| 1055 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1056 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1057 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1058 |
|
|
} |
| 1059 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1060 |
|
|
} |
| 1061 |
|
|
}else{ |
| 1062 |
|
|
string s( "SQLRowCount in insertAccount sql=" ); |
| 1063 |
|
|
s += string( sql ); |
| 1064 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1065 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1066 |
|
|
} |
| 1067 |
|
|
}else{ |
| 1068 |
|
|
string s( "SQLExecute in insertAccount " ); |
| 1069 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1070 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1071 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1072 |
|
|
} |
| 1073 |
|
|
}else{ |
| 1074 |
|
|
string s( "SQLPrepare in insertAccount " ); |
| 1075 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1076 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1077 |
|
|
ret = RES_ERROR; |
| 1078 |
|
|
} |
| 1079 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1080 |
|
|
}else{ |
| 1081 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1082 |
|
|
ret = RES_ERROR; |
| 1083 |
youi |
1.7 |
} |
| 1084 |
|
|
|
| 1085 |
youi |
1.35 |
if( ret == RES_OK ){ |
| 1086 |
|
|
//2.vpaccount?????若?吟???若??????????????宴???吾??莨若?? |
| 1087 |
|
|
SQLUINTEGER activate; |
| 1088 |
|
|
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
| 1089 |
|
|
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
| 1090 |
|
|
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
| 1091 |
|
|
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1092 |
|
|
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
| 1093 |
|
|
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1094 |
|
|
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
| 1095 |
|
|
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
| 1096 |
|
|
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; |
| 1097 |
|
|
SQLINTEGER cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0; |
| 1098 |
|
|
SQLUINTEGER notice_mail; |
| 1099 |
|
|
SQLUINTEGER notice_mail_since; |
| 1100 |
|
|
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1101 |
|
|
string sql; |
| 1102 |
|
|
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
| 1103 |
|
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1104 |
|
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1105 |
|
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
| 1106 |
|
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1107 |
|
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1108 |
|
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1109 |
|
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1110 |
|
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1111 |
|
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1112 |
|
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1113 |
|
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1114 |
|
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1115 |
|
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1116 |
|
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1117 |
youi |
1.32 |
|
| 1118 |
youi |
1.35 |
activate = account -> getActivate() ? 1 : 0; |
| 1119 |
|
|
strncpy2( (char*)address, account -> getAddress(), VP_ACCOUNT_ADDRESS_LEN ); |
| 1120 |
|
|
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
| 1121 |
|
|
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
| 1122 |
|
|
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1123 |
|
|
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
| 1124 |
|
|
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
| 1125 |
|
|
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
| 1126 |
|
|
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
| 1127 |
|
|
notice_mail = account -> getNoticeMail( ); |
| 1128 |
|
|
notice_mail_since = account -> getNoticeMailSince( ); |
| 1129 |
youi |
1.32 |
|
| 1130 |
youi |
1.35 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1131 |
|
|
SQLINTEGER count = 0; |
| 1132 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1133 |
|
|
ret = RES_OK; |
| 1134 |
|
|
if( ret == RES_OK ){ |
| 1135 |
|
|
//3.add new user to default group(not a group admin) |
| 1136 |
|
|
ret = insertMember( sid, DEFAULT_PLATFORM_GROUP_ID, *uid, false ); |
| 1137 |
|
|
}else{ |
| 1138 |
|
|
//xoops_users??nsert???????潟?若???????ゃ???? |
| 1139 |
|
|
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1140 |
|
|
sql += unsignedIntToString( *uid ); |
| 1141 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 1142 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1143 |
|
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1144 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1145 |
|
|
} |
| 1146 |
|
|
setLastErrorString( "insertMember in insertAccount" ); |
| 1147 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1148 |
|
|
} |
| 1149 |
|
|
}else{ |
| 1150 |
|
|
string s( "SQLRowCount in insertAccount sql=" ); |
| 1151 |
|
|
s += string( sql ); |
| 1152 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1153 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1154 |
|
|
} |
| 1155 |
youi |
1.32 |
}else{ |
| 1156 |
youi |
1.35 |
string s( "SQLExecute in insertAccount " ); |
| 1157 |
|
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1158 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1159 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1160 |
|
|
} |
| 1161 |
|
|
}else{ |
| 1162 |
youi |
1.35 |
//xoops_users??nsert???????潟?若???????ゃ???? |
| 1163 |
|
|
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1164 |
|
|
sql += unsignedIntToString( *uid ); |
| 1165 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 1166 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1167 |
|
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1168 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1169 |
|
|
} |
| 1170 |
|
|
string s( "SQLExecDirect in insertAccount sql=" ); |
| 1171 |
|
|
s += string( sql ); |
| 1172 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1173 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1174 |
|
|
} |
| 1175 |
youi |
1.35 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1176 |
youi |
1.32 |
}else{ |
| 1177 |
youi |
1.35 |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1178 |
|
|
ret = RES_ERROR; |
| 1179 |
youi |
1.32 |
} |
| 1180 |
youi |
1.7 |
} |
| 1181 |
youi |
1.32 |
return ret; |
| 1182 |
youi |
1.1 |
} |
| 1183 |
|
|
|
| 1184 |
|
|
/** |
| 1185 |
|
|
* |
| 1186 |
youi |
1.20 |
* ?≪?????潟?????宴??紊??眼????. |
| 1187 |
|
|
* |
| 1188 |
youi |
1.1 |
* |
| 1189 |
youi |
1.20 |
* @param sid ?祉???激?с??D |
| 1190 |
|
|
* @param account 紊??眼???????≪?????潟??????/span> |
| 1191 |
|
|
* @return RES_OK |
| 1192 |
youi |
1.31 |
* @return RES_DB_NOT_INITIALIZED |
| 1193 |
youi |
1.20 |
* @return RES_NO_SUCH_SESSION |
| 1194 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1195 |
|
|
* @return RES_NO_SUCH_USER |
| 1196 |
youi |
1.31 |
* @return RES_ERROR |
| 1197 |
youi |
1.1 |
* |
| 1198 |
|
|
*/ |
| 1199 |
youi |
1.2 |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
| 1200 |
youi |
1.1 |
{ |
| 1201 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1202 |
youi |
1.20 |
if( account == NULL ) return RES_ERROR; |
| 1203 |
youi |
1.10 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1204 |
youi |
1.20 |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
| 1205 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1206 |
|
|
result_t ret = RES_ERROR; |
| 1207 |
youi |
1.10 |
|
| 1208 |
|
|
//xoops?????若?吟???若???????吾??莨若?? |
| 1209 |
youi |
1.32 |
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]; |
| 1210 |
|
|
SQLINTEGER uid, user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1211 |
|
|
SQLDOUBLE timezone_offset; |
| 1212 |
|
|
|
| 1213 |
|
|
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; |
| 1214 |
|
|
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; |
| 1215 |
|
|
|
| 1216 |
|
|
SQLUINTEGER activate; |
| 1217 |
|
|
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
| 1218 |
|
|
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
| 1219 |
|
|
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
| 1220 |
|
|
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1221 |
|
|
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
| 1222 |
|
|
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1223 |
|
|
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
| 1224 |
|
|
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
| 1225 |
|
|
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; |
| 1226 |
|
|
SQLUINTEGER notice_mail; |
| 1227 |
|
|
SQLUINTEGER notice_mail_since; |
| 1228 |
|
|
SQLINTEGER len = 0; |
| 1229 |
|
|
|
| 1230 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1231 |
|
|
string sql; |
| 1232 |
|
|
|
| 1233 |
|
|
sql = "UPDATE " + dbprefix + "_users SET "; |
| 1234 |
|
|
sql += "uname=?, "; |
| 1235 |
|
|
sql += "name=?, "; |
| 1236 |
|
|
sql += "email=?, "; |
| 1237 |
|
|
sql += "url=?, "; |
| 1238 |
|
|
sql += "user_avatar=?, "; |
| 1239 |
|
|
sql += "user_regdate=?, "; |
| 1240 |
|
|
sql += "user_icq=?, "; |
| 1241 |
|
|
sql += "user_from=?, "; |
| 1242 |
|
|
sql += "user_sig=?, "; |
| 1243 |
|
|
sql += "user_viewemail=?, "; |
| 1244 |
|
|
sql += "actkey=?, "; |
| 1245 |
|
|
sql += "user_aim=?, "; |
| 1246 |
|
|
sql += "user_yim=?, "; |
| 1247 |
|
|
sql += "user_msnm=?, "; |
| 1248 |
|
|
sql += "pass=?, "; |
| 1249 |
|
|
sql += "posts=?, "; |
| 1250 |
|
|
sql += "attachsig=?, "; |
| 1251 |
|
|
sql += "rank=?, "; |
| 1252 |
|
|
sql += "level=?, "; |
| 1253 |
|
|
sql += "theme=?, "; |
| 1254 |
|
|
sql += "timezone_offset=?, "; |
| 1255 |
|
|
sql += "last_login=?, "; |
| 1256 |
|
|
sql += "umode=?, "; |
| 1257 |
|
|
sql += "uorder=?, "; |
| 1258 |
|
|
sql += "notify_method=?, "; |
| 1259 |
|
|
sql += "notify_mode=?, "; |
| 1260 |
|
|
sql += "user_occ=?, "; |
| 1261 |
|
|
sql += "bio=?, "; |
| 1262 |
|
|
sql += "user_intrest=?, "; |
| 1263 |
|
|
sql += "user_mailok=? "; |
| 1264 |
|
|
sql += " WHERE uid = ?"; |
| 1265 |
|
|
|
| 1266 |
|
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1267 |
|
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1268 |
|
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 1269 |
|
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 1270 |
|
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 1271 |
|
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 1272 |
|
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 1273 |
|
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 1274 |
|
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 1275 |
|
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 1276 |
|
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 1277 |
|
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 1278 |
|
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 1279 |
|
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 1280 |
|
|
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 1281 |
|
|
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 1282 |
|
|
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 1283 |
|
|
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 1284 |
|
|
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 1285 |
|
|
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 1286 |
|
|
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 1287 |
|
|
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 1288 |
|
|
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 1289 |
|
|
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 1290 |
|
|
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 1291 |
|
|
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 1292 |
|
|
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 1293 |
|
|
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 1294 |
|
|
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 1295 |
|
|
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 1296 |
|
|
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 1297 |
|
|
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1298 |
|
|
SQLBindParameter(hstmt, 31, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1299 |
|
|
|
| 1300 |
|
|
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1301 |
|
|
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1302 |
|
|
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1303 |
|
|
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 1304 |
|
|
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 1305 |
|
|
user_regdate = time( NULL ); |
| 1306 |
|
|
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 1307 |
|
|
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 1308 |
|
|
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 1309 |
|
|
user_viewemail = account -> getUserViewemail( ); |
| 1310 |
|
|
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 1311 |
|
|
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 1312 |
|
|
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 1313 |
|
|
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 1314 |
|
|
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 1315 |
|
|
posts = account -> getPosts( ); |
| 1316 |
|
|
attachsig = account -> getAttachsig( ); |
| 1317 |
|
|
rank = account -> getRank( ); |
| 1318 |
|
|
level = account -> getLevel( ); |
| 1319 |
|
|
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 1320 |
|
|
timezone_offset = account -> getTimezoneOffset( ); |
| 1321 |
|
|
last_login = 0; |
| 1322 |
|
|
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 1323 |
|
|
uorder = account -> getUorder( ); |
| 1324 |
|
|
notify_method = account -> getNotifyMethod( ); |
| 1325 |
|
|
notify_mode = account -> getNotifyMode( ); |
| 1326 |
|
|
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 1327 |
|
|
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 1328 |
|
|
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 1329 |
|
|
user_mailok = account -> getUserMailok( ); |
| 1330 |
|
|
uid = account -> getUID( ); |
| 1331 |
|
|
|
| 1332 |
|
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1333 |
|
|
SQLINTEGER count = 0; |
| 1334 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1335 |
|
|
ret = RES_OK; |
| 1336 |
|
|
}else{ |
| 1337 |
|
|
string s( "SQLRowCount in updateAccount sql=" ); |
| 1338 |
|
|
s += string( sql ); |
| 1339 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1340 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1341 |
|
|
} |
| 1342 |
|
|
}else{ |
| 1343 |
|
|
string s( "SQLExecute in updateAccount " ); |
| 1344 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1345 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1346 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1347 |
|
|
} |
| 1348 |
|
|
}else{ |
| 1349 |
|
|
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1350 |
|
|
ret = RES_ERROR; |
| 1351 |
|
|
} |
| 1352 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1353 |
|
|
}else{ |
| 1354 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1355 |
|
|
ret = RES_ERROR; |
| 1356 |
youi |
1.10 |
} |
| 1357 |
|
|
|
| 1358 |
|
|
//vpaccount?????若?吟???若??????????????宴??筝??吾?????? |
| 1359 |
youi |
1.32 |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1360 |
|
|
string sql; |
| 1361 |
|
|
|
| 1362 |
|
|
sql = "UPDATE " + dbprefix + "_vpaccount_users SET "; |
| 1363 |
|
|
sql += "activate=?, "; |
| 1364 |
|
|
sql += "address=?, "; |
| 1365 |
|
|
sql += "division=?, "; |
| 1366 |
|
|
sql += "tel=?, "; |
| 1367 |
|
|
sql += "company_name=?, "; |
| 1368 |
|
|
sql += "country=?, "; |
| 1369 |
|
|
sql += "zipcode=?, "; |
| 1370 |
|
|
sql += "fax=?, "; |
| 1371 |
|
|
sql += "base_url=?, "; |
| 1372 |
|
|
sql += "notice_mail=?, "; |
| 1373 |
|
|
sql += "notice_mail_since=? "; |
| 1374 |
|
|
sql += "WHERE uid=?"; |
| 1375 |
|
|
|
| 1376 |
|
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1377 |
|
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1378 |
|
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &len); |
| 1379 |
|
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1380 |
|
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1381 |
|
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1382 |
|
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1383 |
|
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1384 |
|
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1385 |
|
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1386 |
|
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1387 |
|
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &len); |
| 1388 |
|
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &len); |
| 1389 |
|
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1390 |
|
|
|
| 1391 |
|
|
activate = account -> getActivate() ? 1 : 0; |
| 1392 |
|
|
strncpy2( (char*)address, account -> getAddress( ) , VP_ACCOUNT_ADDRESS_LEN ); |
| 1393 |
|
|
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
| 1394 |
|
|
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
| 1395 |
|
|
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1396 |
|
|
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
| 1397 |
|
|
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
| 1398 |
|
|
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
| 1399 |
|
|
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
| 1400 |
|
|
notice_mail = account -> getNoticeMail( ); |
| 1401 |
|
|
notice_mail_since = account -> getNoticeMailSince( ); |
| 1402 |
|
|
uid = account -> getUID( ); |
| 1403 |
|
|
|
| 1404 |
|
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1405 |
|
|
SQLINTEGER count = 0; |
| 1406 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1407 |
|
|
ret = RES_OK; |
| 1408 |
|
|
}else{ |
| 1409 |
|
|
string s( "SQLRowCount in updateAccount sql=" ); |
| 1410 |
|
|
s += string( sql ); |
| 1411 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1412 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1413 |
|
|
} |
| 1414 |
|
|
}else{ |
| 1415 |
|
|
string s( "SQLExecute in updateAccount " ); |
| 1416 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1417 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 1418 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1419 |
|
|
} |
| 1420 |
|
|
}else{ |
| 1421 |
|
|
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1422 |
|
|
ret = RES_ERROR; |
| 1423 |
|
|
} |
| 1424 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1425 |
|
|
}else{ |
| 1426 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1427 |
|
|
ret = RES_ERROR; |
| 1428 |
youi |
1.10 |
} |
| 1429 |
youi |
1.32 |
return ret; |
| 1430 |
youi |
1.1 |
} |
| 1431 |
|
|
|
| 1432 |
|
|
/** |
| 1433 |
|
|
* |
| 1434 |
youi |
1.17 |
* criteria_t?ф??絎???????膀??蚊?????若??D??菴???. |
| 1435 |
|
|
* ???若??D????????腆坂????????????吾??莨若?随????????≪?????鴻??*uids???吾??莨若??. |
| 1436 |
|
|
* ???????泣?ゃ?冴??*uidsLen???吾??莨若?? |
| 1437 |
youi |
1.1 |
* |
| 1438 |
youi |
1.17 |
* @param sid ?祉???激?с??D |
| 1439 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 1440 |
youi |
1.31 |
* @param uids ???若?吟??ID?????????阪???? |
| 1441 |
|
|
* @param uidsLen uids???????膣??違???阪???? |
| 1442 |
|
|
* @return RES_OK |
| 1443 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1444 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1445 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1446 |
youi |
1.1 |
* |
| 1447 |
|
|
*/ |
| 1448 |
youi |
1.13 |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1449 |
youi |
1.1 |
{ |
| 1450 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1451 |
youi |
1.17 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1452 |
|
|
|
| 1453 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 1454 |
|
|
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 1455 |
|
|
#endif |
| 1456 |
|
|
|
| 1457 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1458 |
|
|
userid_t* dst = 0; |
| 1459 |
youi |
1.17 |
string sql; |
| 1460 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1461 |
|
|
SQLINTEGER count = 0; |
| 1462 |
|
|
|
| 1463 |
|
|
|
| 1464 |
youi |
1.19 |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users "; |
| 1465 |
youi |
1.17 |
sql += criteria2str( cri ); |
| 1466 |
youi |
1.32 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1467 |
|
|
*uidsLen = count; |
| 1468 |
|
|
dst = new userid_t[ *uidsLen ]; |
| 1469 |
|
|
*uids = dst; |
| 1470 |
|
|
}else{ |
| 1471 |
|
|
return RES_ERROR; |
| 1472 |
|
|
} |
| 1473 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1474 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1475 |
|
|
userid_t uid; |
| 1476 |
|
|
SQLINTEGER len = 0; |
| 1477 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1478 |
|
|
|
| 1479 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 1480 |
|
|
dst[ i ] = uid; |
| 1481 |
|
|
} |
| 1482 |
|
|
|
| 1483 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 1484 |
|
|
syslog( LOG_DEBUG, "dumpUids succeed" ); |
| 1485 |
|
|
#endif |
| 1486 |
youi |
1.32 |
ret = RES_OK; |
| 1487 |
|
|
}else{ |
| 1488 |
|
|
string s( "SQLExecDirect in dumpUids " ); |
| 1489 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1490 |
youi |
1.32 |
s += "sql="; |
| 1491 |
|
|
s += string( sql ); |
| 1492 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1493 |
youi |
1.33 |
#ifdef USE_SYSLOG |
| 1494 |
|
|
syslog( LOG_DEBUG, "dumpUids %s", getLastErrorString( ) ); |
| 1495 |
|
|
#endif |
| 1496 |
youi |
1.32 |
ret = RES_DB_QUERY_ERROR; |
| 1497 |
|
|
} |
| 1498 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1499 |
|
|
}else{ |
| 1500 |
youi |
1.33 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids" ); |
| 1501 |
|
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1502 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1503 |
|
|
#ifdef USE_SYSLOG |
| 1504 |
|
|
syslog( LOG_DEBUG, "dumpUids %s", getLastErrorString( ) ); |
| 1505 |
|
|
#endif |
| 1506 |
youi |
1.32 |
ret = RES_DB_QUERY_ERROR; |
| 1507 |
youi |
1.17 |
} |
| 1508 |
youi |
1.32 |
return ret; |
| 1509 |
youi |
1.1 |
} |
| 1510 |
|
|
|
| 1511 |
|
|
/** |
| 1512 |
|
|
* |
| 1513 |
youi |
1.19 |
* ?違???若???違??菴???. |
| 1514 |
|
|
* 筝?罩c???祉???激?с??D????0??菴???. |
| 1515 |
youi |
1.1 |
* |
| 1516 |
youi |
1.19 |
* @param sid ?祉???激?с??D |
| 1517 |
|
|
* @return ?違???若????/span> |
| 1518 |
youi |
1.1 |
* |
| 1519 |
|
|
*/ |
| 1520 |
youi |
1.2 |
int getGroupCount( sessionid_t sid ) |
| 1521 |
youi |
1.1 |
{ |
| 1522 |
youi |
1.32 |
if( hdbc == NULL ) return 0; |
| 1523 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return 0; |
| 1524 |
|
|
|
| 1525 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1526 |
|
|
SQLHANDLE hstmt = NULL; |
| 1527 |
youi |
1.19 |
string sql; |
| 1528 |
youi |
1.32 |
int ret = 0; |
| 1529 |
youi |
1.19 |
|
| 1530 |
|
|
//?違???若???違??羆????? |
| 1531 |
|
|
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups"; |
| 1532 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1533 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1534 |
|
|
SQLUINTEGER count = 0; |
| 1535 |
|
|
SQLINTEGER len; |
| 1536 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1537 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1538 |
|
|
ret = count; |
| 1539 |
|
|
}else { |
| 1540 |
|
|
string s( "SQLFetch in getGroupCount sql=" ); |
| 1541 |
|
|
s += string( sql ); |
| 1542 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1543 |
|
|
ret = 0; |
| 1544 |
|
|
} |
| 1545 |
|
|
}else{ |
| 1546 |
|
|
setLastErrorString( "SQLExecDirect in getGroupCount" ); |
| 1547 |
|
|
ret = 0; |
| 1548 |
|
|
} |
| 1549 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1550 |
|
|
}else{ |
| 1551 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroupCount" ); |
| 1552 |
|
|
ret = 0; |
| 1553 |
youi |
1.19 |
} |
| 1554 |
youi |
1.32 |
return ret; |
| 1555 |
youi |
1.1 |
} |
| 1556 |
|
|
|
| 1557 |
|
|
/** |
| 1558 |
|
|
* |
| 1559 |
youi |
1.31 |
* ??絮??違???若??筝?荀у??. |
| 1560 |
|
|
* ???若?吟????絮??????????違???若????D????緇????? |
| 1561 |
youi |
1.1 |
* |
| 1562 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 1563 |
|
|
* @param uid ???若?吟??ID |
| 1564 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 1565 |
|
|
* @param gids ?違???若??ID?????????阪???? |
| 1566 |
|
|
* @param gidsLen gids???????膣??違???阪???? |
| 1567 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1568 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1569 |
|
|
* @return RES_NO_SUCH_USER |
| 1570 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1571 |
|
|
* @return RES_OK |
| 1572 |
youi |
1.1 |
* |
| 1573 |
|
|
*/ |
| 1574 |
youi |
1.13 |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 1575 |
youi |
1.1 |
{ |
| 1576 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1577 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1578 |
|
|
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span> |
| 1579 |
|
|
|
| 1580 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1581 |
youi |
1.19 |
string sql; |
| 1582 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1583 |
|
|
SQLHANDLE hstmt = NULL; |
| 1584 |
|
|
SQLINTEGER count = 0; |
| 1585 |
youi |
1.19 |
groupid_t* dst = 0; |
| 1586 |
|
|
int len = 0; |
| 1587 |
|
|
|
| 1588 |
youi |
1.32 |
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups_users_link"; |
| 1589 |
youi |
1.19 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 1590 |
|
|
sql += criteria2str( cri ); |
| 1591 |
youi |
1.32 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1592 |
|
|
*gidsLen = count; |
| 1593 |
|
|
dst = new groupid_t[ *gidsLen ]; |
| 1594 |
|
|
*gids = dst; |
| 1595 |
|
|
}else{ |
| 1596 |
|
|
return RES_ERROR; |
| 1597 |
youi |
1.19 |
} |
| 1598 |
|
|
|
| 1599 |
youi |
1.32 |
//??絮??????違???若??????紊у???違??羆????? |
| 1600 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1601 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1602 |
|
|
if( count > 0 ){ |
| 1603 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 1604 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1605 |
|
|
sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link"; |
| 1606 |
|
|
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 1607 |
|
|
sql += criteria2str( cri ); |
| 1608 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1609 |
|
|
SQLINTEGER len; |
| 1610 |
|
|
groupid_t gid = 0; |
| 1611 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 1612 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 1613 |
|
|
dst[ i ] = gid; |
| 1614 |
|
|
} |
| 1615 |
|
|
ret = RES_OK; |
| 1616 |
|
|
}else{ |
| 1617 |
|
|
string s( "SQLExecDirect in getGroupsByUid " ); |
| 1618 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1619 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 1620 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1621 |
|
|
} |
| 1622 |
|
|
}else{ |
| 1623 |
|
|
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 1624 |
youi |
1.35 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1625 |
youi |
1.32 |
ret = RES_DB_QUERY_ERROR; |
| 1626 |
|
|
} |
| 1627 |
|
|
}else{ |
| 1628 |
|
|
ret = RES_OK; |
| 1629 |
|
|
} |
| 1630 |
|
|
}else{ |
| 1631 |
|
|
string s( "SQLExecDirect in getGroupsByUid " ); |
| 1632 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1633 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 1634 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1635 |
|
|
} |
| 1636 |
|
|
}else{ |
| 1637 |
|
|
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 1638 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1639 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1640 |
youi |
1.19 |
} |
| 1641 |
youi |
1.32 |
return ret; |
| 1642 |
youi |
1.1 |
} |
| 1643 |
|
|
|
| 1644 |
|
|
/** |
| 1645 |
|
|
* |
| 1646 |
youi |
1.31 |
* ?違???若??膊∞??罔????????. |
| 1647 |
|
|
* ???若?吟?????若???????罔???????????(?違???若??膊∞?????с??????)????????????. |
| 1648 |
|
|
* ???若?吟???違???若????絖????????????????医幻???翫??鐚?false??菴???. |
| 1649 |
youi |
1.1 |
* |
| 1650 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 1651 |
|
|
* @param gid ?違???若????ID |
| 1652 |
|
|
* @param uid ???若?吟??ID |
| 1653 |
|
|
* @return true 膊∞??罔??????? |
| 1654 |
|
|
* @return false 膊∞??罔???????鐚??障???????/span> |
| 1655 |
youi |
1.1 |
* |
| 1656 |
|
|
*/ |
| 1657 |
youi |
1.2 |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1658 |
youi |
1.1 |
{ |
| 1659 |
youi |
1.32 |
if( hdbc == NULL ) return false; |
| 1660 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return false; |
| 1661 |
|
|
if( !uidExists( uid ) ) return false; |
| 1662 |
|
|
if( !gidExists( gid ) ) return false; |
| 1663 |
|
|
|
| 1664 |
youi |
1.32 |
bool ret = false; |
| 1665 |
youi |
1.19 |
string sql; |
| 1666 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1667 |
|
|
SQLINTEGER count = 0; |
| 1668 |
youi |
1.19 |
|
| 1669 |
|
|
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1670 |
|
|
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1671 |
|
|
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 1672 |
|
|
sql += " AND is_admin=1"; |
| 1673 |
youi |
1.32 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1674 |
|
|
if( count > 0 ){ |
| 1675 |
|
|
ret = true; |
| 1676 |
|
|
}else{ |
| 1677 |
|
|
ret = false; |
| 1678 |
|
|
} |
| 1679 |
|
|
}else{ |
| 1680 |
|
|
ret = false; |
| 1681 |
youi |
1.19 |
} |
| 1682 |
youi |
1.32 |
return ret; |
| 1683 |
youi |
1.1 |
} |
| 1684 |
|
|
|
| 1685 |
|
|
/** |
| 1686 |
|
|
* |
| 1687 |
youi |
1.31 |
* ?違???若??ID筝?荀? |
| 1688 |
|
|
* ?脂?蚊???????????違???若????D筝?荀с????緇?????. |
| 1689 |
youi |
1.1 |
* |
| 1690 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 1691 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 1692 |
|
|
* @param gids ?違???若??ID?????????阪???? |
| 1693 |
|
|
* @param gidsLen gids???????膣??違???阪???? |
| 1694 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1695 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1696 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1697 |
|
|
* @return RES_OK |
| 1698 |
youi |
1.1 |
* |
| 1699 |
|
|
*/ |
| 1700 |
youi |
1.13 |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 1701 |
youi |
1.1 |
{ |
| 1702 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1703 |
youi |
1.16 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1704 |
|
|
|
| 1705 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1706 |
|
|
groupid_t* dst = 0; |
| 1707 |
youi |
1.16 |
string sql; |
| 1708 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1709 |
|
|
SQLINTEGER count = 0; |
| 1710 |
|
|
|
| 1711 |
youi |
1.19 |
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups "; |
| 1712 |
|
|
sql += criteria2str( cri ); |
| 1713 |
youi |
1.32 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1714 |
|
|
*gidsLen = count; |
| 1715 |
youi |
1.16 |
dst = new groupid_t[ *gidsLen ]; |
| 1716 |
youi |
1.32 |
*gids = dst; |
| 1717 |
youi |
1.16 |
}else{ |
| 1718 |
|
|
return RES_ERROR; |
| 1719 |
|
|
} |
| 1720 |
|
|
|
| 1721 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1722 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1723 |
|
|
groupid_t gid; |
| 1724 |
|
|
SQLINTEGER len = 0; |
| 1725 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 1726 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 1727 |
|
|
dst[ i ] = gid; |
| 1728 |
|
|
} |
| 1729 |
|
|
|
| 1730 |
|
|
ret = RES_OK; |
| 1731 |
|
|
}else{ |
| 1732 |
|
|
string s( "SQLExecDirect in dumpGids " ); |
| 1733 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1734 |
youi |
1.32 |
s += "sql="; |
| 1735 |
|
|
s += string( sql ); |
| 1736 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1737 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1738 |
|
|
} |
| 1739 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1740 |
youi |
1.16 |
} |
| 1741 |
youi |
1.32 |
return ret; |
| 1742 |
youi |
1.1 |
} |
| 1743 |
|
|
|
| 1744 |
|
|
/** |
| 1745 |
|
|
* |
| 1746 |
youi |
1.31 |
* ?違???若??膊∞????ID????緇?????. |
| 1747 |
|
|
* ?????違???若??????????????若??D????緇?????. |
| 1748 |
youi |
1.1 |
* |
| 1749 |
youi |
1.19 |
* @param sid ?祉???激?с??D |
| 1750 |
|
|
* @param gid ???????????違???若????ID?ф??絎????? |
| 1751 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 1752 |
|
|
* @param uids 膊∞??????ID???????????????????ゃ?潟??/span> |
| 1753 |
|
|
* @param uidsLen uids???????膣???/span> |
| 1754 |
youi |
1.20 |
* @return RES_OK |
| 1755 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1756 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1757 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1758 |
|
|
* @return RES_ERROR |
| 1759 |
youi |
1.1 |
* |
| 1760 |
|
|
*/ |
| 1761 |
youi |
1.13 |
result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1762 |
youi |
1.1 |
{ |
| 1763 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1764 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1765 |
|
|
|
| 1766 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1767 |
|
|
groupid_t* dst = 0; |
| 1768 |
youi |
1.19 |
string sql; |
| 1769 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1770 |
|
|
SQLINTEGER count = 0; |
| 1771 |
|
|
|
| 1772 |
youi |
1.19 |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1773 |
youi |
1.32 |
sql += " WHERE is_admin=1 and gid=" + unsignedIntToString( gid ); |
| 1774 |
|
|
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1775 |
|
|
*uidsLen = count; |
| 1776 |
|
|
*uids = new groupid_t[ *uidsLen ]; |
| 1777 |
|
|
}else{ |
| 1778 |
|
|
return RES_ERROR; |
| 1779 |
youi |
1.19 |
} |
| 1780 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1781 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1782 |
|
|
userid_t uid; |
| 1783 |
|
|
SQLINTEGER len = 0; |
| 1784 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1785 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 1786 |
|
|
(*uids)[ i ] = uid; |
| 1787 |
|
|
} |
| 1788 |
|
|
ret = RES_OK; |
| 1789 |
|
|
}else{ |
| 1790 |
|
|
string s( "SQLExecDirect in dumpGroupAdmins " ); |
| 1791 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1792 |
youi |
1.32 |
s += "sql="; |
| 1793 |
|
|
s += string( sql ); |
| 1794 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1795 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1796 |
|
|
} |
| 1797 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1798 |
youi |
1.19 |
} |
| 1799 |
youi |
1.32 |
return ret; |
| 1800 |
youi |
1.1 |
} |
| 1801 |
|
|
|
| 1802 |
|
|
/** |
| 1803 |
|
|
* |
| 1804 |
youi |
1.31 |
* ?違???若????絮????若?九???? |
| 1805 |
|
|
* ?違???若??????絮????????若?吟??鐚??違???若?????????ゃ????. |
| 1806 |
youi |
1.35 |
* ???????????違???若???????????ゃ?с?????? |
| 1807 |
youi |
1.1 |
* |
| 1808 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 1809 |
|
|
* @param gid ?????違???若?????????ゃ??????????絎??????違???若??ID |
| 1810 |
|
|
* @param uid ???ゅ?莟<?????若?吟??D |
| 1811 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1812 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1813 |
|
|
* @return RES_NO_SUCH_USER |
| 1814 |
|
|
* @return RES_NO_SUCH_GROUP |
| 1815 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1816 |
youi |
1.35 |
* @return RES_OK |
| 1817 |
|
|
* @return RES_ERROR |
| 1818 |
youi |
1.1 |
* |
| 1819 |
|
|
*/ |
| 1820 |
youi |
1.2 |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1821 |
youi |
1.1 |
{ |
| 1822 |
youi |
1.35 |
if( gid == DEFAULT_PLATFORM_GROUP_ID ) return RES_ERROR; |
| 1823 |
|
|
return deleteMemberNoLimit( sid, gid, uid ); |
| 1824 |
|
|
} |
| 1825 |
|
|
|
| 1826 |
|
|
/** |
| 1827 |
|
|
* |
| 1828 |
|
|
* ?違???若????絮????若?九???? |
| 1829 |
|
|
* ?違???若??????絮????????若?吟??鐚??違???若?????????ゃ????. |
| 1830 |
|
|
* ???????????違???若???????????ゃ?с?????鴻??鐚?deleteMember???違???? |
| 1831 |
|
|
* |
| 1832 |
|
|
* @param sid ?祉???激?с??D |
| 1833 |
|
|
* @param gid ?????違???若?????????ゃ??????????絎??????違???若??ID |
| 1834 |
|
|
* @param uid ???ゅ?莟<?????若?吟??D |
| 1835 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1836 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1837 |
|
|
* @return RES_NO_SUCH_USER |
| 1838 |
|
|
* @return RES_NO_SUCH_GROUP |
| 1839 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1840 |
|
|
* @return RES_OK |
| 1841 |
|
|
* @return RES_ERROR |
| 1842 |
|
|
* |
| 1843 |
|
|
*/ |
| 1844 |
|
|
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1845 |
|
|
{ |
| 1846 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1847 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1848 |
|
|
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span> |
| 1849 |
|
|
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span> |
| 1850 |
|
|
|
| 1851 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1852 |
youi |
1.19 |
string sql; |
| 1853 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1854 |
|
|
SQLHANDLE hstmt = NULL; |
| 1855 |
youi |
1.19 |
|
| 1856 |
|
|
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1857 |
|
|
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1858 |
|
|
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 1859 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1860 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1861 |
|
|
SQLINTEGER count = 0; |
| 1862 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1863 |
|
|
ret = RES_OK; |
| 1864 |
|
|
}else{ |
| 1865 |
|
|
string s( "SQLRowCount in deleteMember" ); |
| 1866 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1867 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 1868 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1869 |
|
|
ret = RES_NO_SUCH_USER; |
| 1870 |
|
|
} |
| 1871 |
|
|
}else{ |
| 1872 |
|
|
string s( "SQLExecDirect in deleteMember" ); |
| 1873 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1874 |
youi |
1.32 |
s += ", sql="; |
| 1875 |
|
|
s += string( sql ); |
| 1876 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1877 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1878 |
|
|
} |
| 1879 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1880 |
|
|
}else{ |
| 1881 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteMember" ); |
| 1882 |
|
|
ret = RES_ERROR; |
| 1883 |
youi |
1.19 |
} |
| 1884 |
youi |
1.32 |
return ret; |
| 1885 |
youi |
1.1 |
} |
| 1886 |
|
|
|
| 1887 |
|
|
/** |
| 1888 |
|
|
* |
| 1889 |
youi |
1.31 |
* ?違???若????絮????若?区申??. |
| 1890 |
|
|
* ?違???若?????<?潟???若?????若?吟??菴遵??????. |
| 1891 |
youi |
1.1 |
* |
| 1892 |
youi |
1.19 |
* @param sid ?祉???激?с??D |
| 1893 |
|
|
* @param gid ??絮????違???若????D |
| 1894 |
|
|
* @param uid ??絮??????????若?吟??D |
| 1895 |
|
|
* @param admin 膊∞????罔?????筝?????????true |
| 1896 |
youi |
1.20 |
* @return RES_OK |
| 1897 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1898 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1899 |
youi |
1.31 |
* @return RES_NO_SUCH_USER |
| 1900 |
|
|
* @return RES_NO_SUCH_GROUP |
| 1901 |
youi |
1.20 |
* @return RES_DB_QUERY_ERROR |
| 1902 |
youi |
1.1 |
* |
| 1903 |
|
|
*/ |
| 1904 |
youi |
1.19 |
result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin ) |
| 1905 |
youi |
1.1 |
{ |
| 1906 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1907 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1908 |
|
|
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span> |
| 1909 |
|
|
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span> |
| 1910 |
|
|
|
| 1911 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1912 |
youi |
1.19 |
string sql; |
| 1913 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1914 |
youi |
1.19 |
|
| 1915 |
|
|
//?<?潟???若??菴遵?? |
| 1916 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1917 |
|
|
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups_users_link ( gid, uid, is_admin ) VALUES ("; |
| 1918 |
|
|
sql += string( unsignedIntToString( gid ) ) + ", "; |
| 1919 |
|
|
sql += string( unsignedIntToString( uid ) ) + ", "; |
| 1920 |
|
|
sql += string( admin ? "1" : "0" ) + ") "; |
| 1921 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1922 |
|
|
SQLINTEGER count = 0; |
| 1923 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1924 |
|
|
ret = RES_OK; |
| 1925 |
|
|
}else{ |
| 1926 |
|
|
string s( "SQLRowCount in insertMember " ); |
| 1927 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1928 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 1929 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1930 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1931 |
|
|
} |
| 1932 |
|
|
}else{ |
| 1933 |
|
|
string s( "SQLExecDirect in insertMember " ); |
| 1934 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1935 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 1936 |
|
|
setLastErrorString( s.c_str( ) ); |
| 1937 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1938 |
|
|
} |
| 1939 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1940 |
|
|
}else{ |
| 1941 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertMember" ); |
| 1942 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 1943 |
youi |
1.19 |
} |
| 1944 |
youi |
1.32 |
return ret; |
| 1945 |
youi |
1.1 |
} |
| 1946 |
|
|
|
| 1947 |
|
|
/** |
| 1948 |
|
|
* |
| 1949 |
youi |
1.31 |
* ?違???若????絮????若?九??. |
| 1950 |
|
|
* ?????違???若??????絮????????????若?吟?????若??D????緇????? |
| 1951 |
youi |
1.1 |
* |
| 1952 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 1953 |
|
|
* @param gid ?????違???若??????絮????若?吟?????????????????違???若????ID?ф??絎? |
| 1954 |
|
|
* @param cri 腟???????我??絎?鐚??純?若???>散??絎? |
| 1955 |
|
|
* @param uids ??絮????若?吟??ID???????????????????ゃ?潟??/span> |
| 1956 |
|
|
* @param uidsLen uids???????膣???/span> |
| 1957 |
|
|
* @return RES_OK |
| 1958 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 1959 |
|
|
* @return RES_NO_SUCH_SESSION |
| 1960 |
|
|
* @return RES_NO_SUCH_GROUP |
| 1961 |
|
|
* @return RES_DB_QUERY_ERROR |
| 1962 |
|
|
* @return RES_ERROR |
| 1963 |
youi |
1.1 |
* |
| 1964 |
|
|
*/ |
| 1965 |
youi |
1.13 |
result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1966 |
youi |
1.1 |
{ |
| 1967 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1968 |
youi |
1.19 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1969 |
|
|
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span> |
| 1970 |
|
|
|
| 1971 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 1972 |
youi |
1.19 |
string sql; |
| 1973 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 1974 |
|
|
SQLHANDLE hstmt = NULL; |
| 1975 |
youi |
1.19 |
userid_t* dst = 0; |
| 1976 |
|
|
|
| 1977 |
youi |
1.32 |
//how many members ? |
| 1978 |
youi |
1.19 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1979 |
|
|
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1980 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1981 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1982 |
|
|
SQLUINTEGER count = 0; |
| 1983 |
|
|
SQLINTEGER len; |
| 1984 |
|
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1985 |
|
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1986 |
|
|
dst = new userid_t[ count ]; |
| 1987 |
|
|
*uids = dst; |
| 1988 |
|
|
*uidsLen = count; |
| 1989 |
|
|
if( count > 0 ){ |
| 1990 |
|
|
//retrive member's IDs |
| 1991 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 1992 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1993 |
|
|
sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1994 |
|
|
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1995 |
|
|
sql += " " + string( criteria2str( cri ) ); |
| 1996 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1997 |
|
|
SQLUINTEGER uid = 0; |
| 1998 |
|
|
SQLINTEGER len; |
| 1999 |
|
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 2000 |
|
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS && i < count ; i++ ){ |
| 2001 |
|
|
dst[ i ] = uid; |
| 2002 |
|
|
} |
| 2003 |
|
|
ret = RES_OK; |
| 2004 |
|
|
}else{ |
| 2005 |
|
|
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 2006 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2007 |
|
|
} |
| 2008 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 2009 |
|
|
}else{ |
| 2010 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 2011 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2012 |
|
|
} |
| 2013 |
|
|
}else{ |
| 2014 |
|
|
ret = RES_OK; |
| 2015 |
|
|
} |
| 2016 |
|
|
}else{ |
| 2017 |
|
|
string s( "SQLFetch in getMembers sql=" ); |
| 2018 |
|
|
s += string( sql ); |
| 2019 |
|
|
setLastErrorString( s.c_str( ) ); |
| 2020 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2021 |
|
|
} |
| 2022 |
|
|
}else{ |
| 2023 |
|
|
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 2024 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2025 |
|
|
} |
| 2026 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2027 |
youi |
1.19 |
}else{ |
| 2028 |
youi |
1.32 |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 2029 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2030 |
youi |
1.19 |
} |
| 2031 |
youi |
1.32 |
return ret; |
| 2032 |
youi |
1.1 |
} |
| 2033 |
|
|
|
| 2034 |
|
|
/** |
| 2035 |
|
|
* |
| 2036 |
youi |
1.31 |
* ?違???若???????? |
| 2037 |
|
|
* ???若?帥???若?鴻?????違???若???????ゃ???障??. |
| 2038 |
youi |
1.1 |
* |
| 2039 |
youi |
1.31 |
* @param sid ?祉???激?с??D |
| 2040 |
|
|
* @param gid ?????違???若??????絮????若?吟?????????????????違???若????ID?ф??絎? |
| 2041 |
youi |
1.20 |
* @return RES_OK |
| 2042 |
|
|
* @return RES_DB_QUERY_ERROR |
| 2043 |
|
|
* @return RES_NO_SUCH_SESSION |
| 2044 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 2045 |
youi |
1.1 |
* |
| 2046 |
|
|
*/ |
| 2047 |
youi |
1.2 |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
| 2048 |
youi |
1.1 |
{ |
| 2049 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2050 |
youi |
1.16 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2051 |
|
|
|
| 2052 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 2053 |
youi |
1.16 |
string sql; |
| 2054 |
youi |
1.32 |
SQLRETURN sqlcode; |
| 2055 |
|
|
SQLHANDLE hstmt = NULL; |
| 2056 |
|
|
|
| 2057 |
youi |
1.16 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups "; |
| 2058 |
|
|
sql += "WHERE gid = " + string( unsignedIntToString( gid ) ); |
| 2059 |
youi |
1.32 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2060 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2061 |
|
|
SQLINTEGER count = 0; |
| 2062 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2063 |
|
|
ret = RES_OK; |
| 2064 |
|
|
}else{ |
| 2065 |
|
|
string s( "SQLRowCount in deleteGroup" ); |
| 2066 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2067 |
youi |
1.32 |
s += string( ", sql=" ) + string( sql ); |
| 2068 |
|
|
setLastErrorString( s.c_str( ) ); |
| 2069 |
|
|
ret = RES_NO_SUCH_USER; |
| 2070 |
|
|
} |
| 2071 |
|
|
}else{ |
| 2072 |
|
|
string s( "SQLExecDirect in deleteGroup" ); |
| 2073 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2074 |
youi |
1.32 |
s += ", sql="; |
| 2075 |
|
|
s += string( sql ); |
| 2076 |
|
|
setLastErrorString( s.c_str( ) ); |
| 2077 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2078 |
|
|
} |
| 2079 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2080 |
|
|
}else{ |
| 2081 |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteGroup" ); |
| 2082 |
|
|
ret = RES_ERROR; |
| 2083 |
youi |
1.16 |
} |
| 2084 |
youi |
1.32 |
return ret; |
| 2085 |
youi |
1.1 |
} |
| 2086 |
|
|
|
| 2087 |
|
|
/** |
| 2088 |
|
|
* |
| 2089 |
youi |
1.25 |
* ?違???若???脂?? |
| 2090 |
youi |
1.31 |
* ?違???若???????宴?????若?帥???若?鴻????蚊????鐚?/span> |
| 2091 |
|
|
* ?脂?蚊?????違???若?????綽??????違???若??ID??gid???主?????鐚?/span> |
| 2092 |
youi |
1.1 |
* |
| 2093 |
youi |
1.20 |
* @param sid ?祉???激?с??D |
| 2094 |
|
|
* @param group ?脂?蚊???????違???若????????/span> |
| 2095 |
youi |
1.25 |
* @param gid ?脂?蚊?????違???若?????綽??????違???若??ID |
| 2096 |
youi |
1.20 |
* @return RES_OK |
| 2097 |
|
|
* @return RES_DB_NOT_INITIALIZED |
| 2098 |
|
|
* @return RES_NO_SUCH_SESSION |
| 2099 |
|
|
* @return RES_DB_QUERY_ERROR |
| 2100 |
youi |
1.1 |
* |
| 2101 |
|
|
*/ |
| 2102 |
youi |
1.25 |
result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid ) |
| 2103 |
youi |
1.1 |
{ |
| 2104 |
youi |
1.32 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2105 |
youi |
1.16 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2106 |
|
|
|
| 2107 |
youi |
1.32 |
result_t ret = RES_ERROR; |
| 2108 |
youi |
1.16 |
string sql; |
| 2109 |
youi |
1.32 |
SQLCHAR gname[VP_GROUP_GNAME_LEN+1], gdesc[VP_GROUP_GDESC_LEN+1]; |
| 2110 |
|
|
SQLINTEGER cbGname = SQL_NTS, cbGdesc = SQL_NTS; |
| 2111 |
|
|
SQLRETURN sqlcode; |
| 2112 |
|
|
|
| 2113 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2114 |
|
|
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES ( ?, ? )"; |
| 2115 |
|
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2116 |
|
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2117 |
|
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2118 |
|
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 2119 |
|
|
strncpy2( (char*)gname, group -> getGname( ), VP_GROUP_GNAME_LEN ); |
| 2120 |
|
|
strncpy2( (char*)gdesc, group -> getDesc( ), VP_GROUP_GDESC_LEN ); |
| 2121 |
|
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2122 |
|
|
SQLINTEGER count = 0; |
| 2123 |
|
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2124 |
|
|
//?違???若??ID????緇????? |
| 2125 |
|
|
SQLHANDLE hstmt2 = NULL; |
| 2126 |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 2127 |
|
|
sql = "SELECT LAST_INSERT_ID()"; // MySQL |
| 2128 |
|
|
// sql = "SELECT LAST_INSERT_ROWID()"; // SQLite |
| 2129 |
|
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2130 |
|
|
SQLUINTEGER last_insert_id; |
| 2131 |
|
|
SQLINTEGER len; |
| 2132 |
|
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &last_insert_id, 0, &len ); |
| 2133 |
|
|
if( ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS ){ |
| 2134 |
|
|
*gid = last_insert_id; |
| 2135 |
|
|
ret = RES_OK; |
| 2136 |
|
|
}else{ |
| 2137 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2138 |
|
|
string s( "SQLFetch in insertGroup " ); |
| 2139 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2140 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 2141 |
|
|
} |
| 2142 |
|
|
}else{ |
| 2143 |
|
|
string s( "SQLExecDirect in insertGroup " ); |
| 2144 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2145 |
youi |
1.32 |
setLastErrorString( s.c_str( ) ); |
| 2146 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2147 |
|
|
} |
| 2148 |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 2149 |
|
|
} |
| 2150 |
|
|
}else{ |
| 2151 |
|
|
string s( "SQLRowCount in insertGroup sql=" ); |
| 2152 |
|
|
s += string( sql ); |
| 2153 |
|
|
setLastErrorString( s.c_str( ) ); |
| 2154 |
|
|
ret = RES_DB_QUERY_ERROR; |
| 2155 |
|
|
} |
| 2156 |
|
|
}else{ |
| 2157 |
|
|
string s( "SQLExecute in insertGroup " ); |
| 2158 |
youi |
1.33 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2159 |
youi |
|