Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.17 - (show annotations) (download) (as text)
Sat Nov 27 09:35:49 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.16: +96 -8 lines
File MIME type: text/x-c++src
isActivatedを定義.
activateを定義.
dumpUidを定義.

1 /*
2 *
3 * $Revision: 1.16 $
4 * $Log: commonal.cc,v $
5 * Revision 1.16 2004/11/27 06:29:29 youi
6 * getAccountCount??絎?臂?
7 * dumpGids??絎?臂?
8 * insertGroup, deleteGroup, updateGroup??絎?臂?
9 * getGroup, getGroups??絎?臂?
10 * ???若?帥???若?劫?????????弱?冴?????鐚?RES_DB_NOT_INITIALIZED??菴????????????∽?違??申??
11 * (???綽????∽?違??罧??c??????)
12 *
13 * Revision 1.15 2004/11/27 02:22:22 aga
14 * ??nitializeDB????ddSlashes()???若?吟???純?<??????篆??.
15 *
16 * Revision 1.14 2004/11/27 01:07:31 youi
17 * criteria2str: LIMIT??RDER BY?????????ャ???帥????.
18 *
19 * Revision 1.13 2004/11/27 00:35:39 youi
20 * getAccounts??絎?臂?
21 * getAccount??篆??鐚???????etAccounts???若?喝?冴??.
22 * criteria2str??絎?臂?
23 *
24 * Revision 1.12 2004/11/26 09:45:28 youi
25 * getAccount??絎?臂?
26 *
27 * Revision 1.11 2004/11/26 08:16:26 aga
28 * ??etSession, loginUser, createSession, freeResult(const session_t*) 篆??.
29 *
30 * Revision 1.10 2004/11/26 07:57:42 youi
31 * updateAccount, deleteAccount??絎?臂?
32 * mysql_query紊掩??????tderr?吾?????若?潟?若?????????若?<???祉?若?吾???阪??.
33 *
34 * Revision 1.9 2004/11/26 07:38:02 aga
35 * ??AILUE -> FAILURE.
36 *
37 * Revision 1.8 2004/11/26 06:36:55 aga
38 * ??reateSession, getSession ??篏???.
39 *
40 * Revision 1.7 2004/11/26 04:51:47 youi
41 * dbprefix??絎?臂?????.
42 * insertAccount??絎?臂?????.
43 * isValidSessionID??絎?臂?????.
44 *
45 * Revision 1.6 2004/11/26 04:35:55 aga
46 * ??oginUser(), logoutUser()??篏???.
47 *
48 * Revision 1.5 2004/11/26 01:08:25 aga
49 * ??ddSlashes()篏???.
50 *
51 * Revision 1.4 2004/11/25 12:14:29 youi
52 * getUid????????絎?臂?????.
53 *
54 * Revision 1.3 2004/11/25 11:13:59 youi
55 * getLastErrorString/setLastErrorString??絎?臂?
56 *
57 * Revision 1.2 2004/11/25 08:55:19 youi
58 * 綣??違??????篆??.
59 * freeResult??菴遵??.
60 *
61 * Revision 1.1 2004/11/25 05:14:58 youi
62 * initial version
63 *
64 *
65 */
66 #include <stdio.h>
67 #include <stdlib.h>
68 #include <string.h>
69 #include <mysql.h>
70 #include <errmsg.h>
71 #include <string>
72 using namespace std;
73
74 #include "common.h"
75 #include "account.h"
76 #include "group.h"
77 #include "session.h"
78 #include "criteria.h"
79 #include "commonal.h"
80
81
82 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
83 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
84
85 /**
86 *
87 * php??ddslashes????????
88 *
89 * @param addslashes???鴻????絖?????NULL??絎?筝?????
90 * @return addslashes????????絖???
91 */
92 string addSlashes( const char *str )
93 {
94 if ( mysql == NULL ){
95 string s;
96 return s;
97 }
98 int len = strlen(str);
99 char *buf = new char[len*2+1];
100 int bufLen = mysql_real_escape_string( mysql, buf, str, len );
101 string s( buf, bufLen );
102 return s;
103 }
104
105 /**
106 *
107 * criteria ?? SQL?????????
108 *
109 *
110 *
111 */
112 string criteria2str( criteria* cri )
113 {
114 string sql;
115
116 const orderby* odrby = cri -> headOrderBy( );
117 if( odrby != 0 ){
118 sql += " ORDER BY " + string( odrby -> getColumn( ) );
119 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
120 while( ( odrby = cri -> nextOrderBy( ) ) != 0 ){
121 sql += ", " + string( odrby -> getColumn( ) );
122 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
123 }
124 }
125
126 if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){
127 sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) )
128 + ", " + string( intToString( cri -> getLimitRows( ) ) );
129 }
130 return sql;
131 }
132
133 /**
134 *
135 * ???若?帥???若?鴻????????
136 *
137 * @param host ???若?帥???若?鴻?????鴻????
138 * @param user ???若?帥???若?鴻???≪???祉?鴻???????若?九??
139 * @param password 筝?荐????若?吟?????鴻???若??
140 * @param dbname ???若?帥???若?鴻??????
141 * @param prefix XOOPS???若?帥???若?鴻???若??????REFIX
142 * @return result_t
143 * @refer result_t
144 */
145 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
146 {
147 // ?≪??・膓?筝???????筝???????/span>
148 if ( mysql != NULL )
149 mysql_close( mysql );
150
151 dbprefix = prefix;
152
153 // ????????・膓?
154 mysql = mysql_init(NULL);
155 if ( mysql == NULL ){
156 return RES_DB_INITIALIZE_ERROR;
157 }
158 char *unix_socket = NULL; // ?
159 uint flag = 0; // ?
160 if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
161 return RES_DB_CONNECT_ERROR;
162 }
163
164 return RES_OK;
165 }
166
167
168 /**
169 *
170 * Platform???若?倶?粋??倶????緇?
171 *
172 * @param
173 * @return
174 *
175 */
176 bool isActivated( sessionid_t sid, userid_t uid )
177 {
178 if( mysql == NULL ) return false;
179 if( !isValidSessionID( sid ) ) return false;
180
181 string sql;
182 MYSQL_RES* result;
183 MYSQL_ROW row;
184
185 sql = "SELECT * FROM " + dbprefix + "_vpaccount_users ";
186 sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) );
187 if( mysql_query( mysql, sql.c_str( ) ) ){
188 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
189 return false;
190 }
191 result = mysql_store_result( mysql ) ;
192 if( row = mysql_fetch_row(result) ){
193 mysql_free_result( result );
194 return true;
195 }
196 return false;
197 }
198
199 /**
200 *
201 * Platform???若?倶?粋??倶??紊???/span>
202 *
203 * @param
204 * @return
205 *
206 */
207 result_t activate( sessionid_t sid, userid_t uid, bool activate )
208 {
209 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
210 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
211
212 string sql;
213 MYSQL_RES* result;
214 MYSQL_ROW row;
215
216 sql = "UPDATE " + dbprefix + "_vpaccount_users ";
217 sql += "SET activate=" + string( activate ? "1" : "0" );
218 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
219 if( mysql_query( mysql, sql.c_str( ) ) ){
220 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
221 return RES_DB_QUERY_ERROR;
222 }
223 if ( mysql_affected_rows(mysql) == 0 ){
224 // ?贋?医け??
225 return RES_NO_SUCH_USER;
226 }
227 return RES_OK;
228 }
229
230 /**
231 *
232 * ?≪?????潟????/span>
233 *
234 * @param
235 * @return
236 *
237 */
238 int getAccountCount( sessionid_t sid )
239 {
240 if( mysql == NULL ) return 0;
241 if( !isValidSessionID( sid ) ) return 0;
242
243 int ret = 0;
244 string sql;
245 MYSQL_RES* result;
246 MYSQL_ROW row;
247
248 //?≪?????潟???違??羆?????
249 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users ";
250 if( mysql_query( mysql, sql.c_str( ) ) ){
251 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
252 return 0;
253 }
254 result = mysql_store_result( mysql ) ;
255 if( row = mysql_fetch_row(result) ){
256 ret = atoi( row[ 0 ] );
257 }else{
258 mysql_free_result( result );
259 return 0;
260 }
261 mysql_free_result( result );
262 return ret;
263 }
264
265 /**
266 *
267 * ?≪?????潟??????/span>
268 *
269 * @param
270 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
271 *
272 */
273 result_t deleteAccount( sessionid_t sid, userid_t uid )
274 {
275 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
276 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
277
278 string sql;
279 sql = "DELETE FROM " + dbprefix + "_users ";
280 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
281 if( mysql_query( mysql, sql.c_str( ) ) ){
282 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
283 return RES_DB_QUERY_ERROR;
284 }
285
286 sql = "DELETE FROM " + dbprefix + "_vpaccount_users ";
287 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
288 if( mysql_query( mysql, sql.c_str( ) ) ){
289 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
290 return RES_DB_QUERY_ERROR;
291 }
292
293 return RES_OK;
294 }
295
296 /**
297 *
298 * ?≪?????潟?????怨??
299 *
300 * @param sid ?祉???激?с??D
301 * @param uid ??緇??????????若?吟??ID
302 * @param acc ??緇??????≪?????潟??????account_t)?????ゃ?潟?帥???吾??莨若??綣???/span>
303 * @return RES_OK | RES_NO_SUCH_USER | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
304 *
305 */
306 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc )
307 {
308 int len;
309 static criteria c;
310 result_t res = getAccounts( sid, &uid, 1, &c, acc, &len );
311 if( len == 0 ) return RES_NO_SUCH_USER;
312 return res;
313 }
314
315 /**
316 *
317 * ?≪?????潟?????怨??
318 *
319 * @param sid ?祉???激?с??D
320 * @param uids ??緇??????????若?吟??ID??????
321 * @param uidsLen uids???????膣???/span>
322 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
323 * @param accounts 罎?膣∝??????????????ゃ?潟?帥???吾??莨若??綣???/span>
324 * @param accountsLen 罎?膣∝???????????*accounts???膣???
325 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
326 *
327 */
328 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen )
329 {
330 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
331 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
332
333 string sql;
334 MYSQL_RES* result;
335 MYSQL_ROW row;
336 account_t* dst = new account_t[ uidsLen ];
337
338 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.institute, u2.tel, u2.organization, u2.country, u2.zipcode, u2.fax, u2.base_url, u2.notice_mail, u2.notice_mail_since ";
339 sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_vpaccount_users AS u2 ";
340 sql += "WHERE u1.uid = u2.uid AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) );
341 for( int i = 1; i < uidsLen; i++ ){
342 sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) );
343 }
344 sql += " ) ";
345 sql += criteria2str( cri );
346 if( mysql_query( mysql, sql.c_str( ) ) ){
347 fprintf( stderr, "%s\n", sql.c_str( ) );
348 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
349 return RES_DB_QUERY_ERROR;
350 }
351 result = mysql_use_result( mysql ) ;
352 *accountsLen=0;
353 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < uidsLen ; i++ ){
354 dst[ i ].setUID( atoi( row[ 0 ] ) );
355 dst[ i ].setName( row[ 1 ] );
356 dst[ i ].setUname( row[ 2 ] );
357 dst[ i ].setEmail( row[ 3 ] );
358 dst[ i ].setURL( row[ 4 ] );
359 dst[ i ].setUserAvatar( row[ 5 ] );
360 dst[ i ].setUserRegdate( atoi( row[ 6 ] ) );
361 dst[ i ].setUserIcq( row[ 7 ] );
362 dst[ i ].setUserFrom( row[ 8 ] );
363 dst[ i ].setUserSig( row[ 9 ] );
364 dst[ i ].setUserViewemail( atoi( row[ 10 ] ) );
365 dst[ i ].setActkey( row[ 11 ] );
366 dst[ i ].setUserAim( row[ 12 ] );
367 dst[ i ].setUserYim( row[ 13 ] );
368 dst[ i ].setUserMsnm( row[ 14 ] );
369 dst[ i ].setPass( row[ 15 ] );
370 dst[ i ].setPosts( atoi( row[ 16 ] ) );
371 dst[ i ].setAttachsig( atoi( row[ 17 ] ) );
372 dst[ i ].setRank( atoi( row[ 18 ] ) );
373 dst[ i ].setLevel( atoi( row[ 19 ] ) );
374 dst[ i ].setTheme( row[ 20 ] );
375 dst[ i ].setTimezoneOffset( atof( row[ 21 ] ) );
376 dst[ i ].setLastLogin( atoi( row[ 22 ] ) );
377 dst[ i ].setUmode( row[ 23 ] );
378 dst[ i ].setUorder( atoi( row[ 24 ] ) );
379 dst[ i ].setNotifyMethod( atoi( row[ 25 ] ) );
380 dst[ i ].setNotifyMode( atoi( row[ 26 ] ) );
381 dst[ i ].setUserOcc( row[ 27 ] );
382 dst[ i ].setBio( row[ 28 ] );
383 dst[ i ].setUserIntrest( row[ 29 ] );
384 dst[ i ].setUserMailok( atoi( row[ 30 ] ) );
385 dst[ i ].setActivate( atoi( row[ 31 ] ) );
386 dst[ i ].setAddress( row[ 32 ] );
387 dst[ i ].setInstitute( row[ 33 ] );
388 dst[ i ].setTel( row[ 34 ] );
389 dst[ i ].setOrganization( row[ 35 ] );
390 dst[ i ].setCountry( row[ 36 ] );
391 dst[ i ].setZipcode( row[ 37 ] );
392 dst[ i ].setFax( row[ 38 ] );
393 dst[ i ].setBaseURL( row[ 39 ] );
394 dst[ i ].setNoticeMail( atoi( row[ 40 ] ) );
395 dst[ i ].setNoticeMailSince( atoi( row[ 41 ] ) );
396 ( *accountsLen )++;
397 }
398 mysql_free_result( result );
399 *accounts = dst;
400 return RES_OK;
401 }
402
403 /**
404 *
405 * ?≪?????潟???脂??/span>
406 *
407 * @param sid ?祉???激?с??/span>
408 * @param account ?脂?蚊?????≪?????潟??????/span>
409 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
410 *
411 */
412 result_t insertAccount( sessionid_t sid, const account_t* account )
413 {
414 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
415 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
416
417 string sql;
418 string tmp;
419 char buf[ 12 ];
420
421 //xoops?????若?吟???若???????吾??莨若??
422 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 (";
423 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
424 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
425 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
426 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
427 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
428 snprintf( buf, 12, "%d", time( NULL ) );
429 sql += string( buf ) + ", ";
430 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
431 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
432 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
433 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
434 sql += string( buf ) + ", ";
435 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
436 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
437 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
438 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
439 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
440 snprintf( buf, 12, "%d", account -> getPosts( ) );
441 sql += string( buf ) + ", ";
442 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
443 sql += string( buf ) + ", ";
444 snprintf( buf, 12, "%d", account -> getRank( ) );
445 sql += string( buf ) + ", ";
446 snprintf( buf, 12, "%d", account -> getLevel( ) );
447 sql += string( buf ) + ", ";
448 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
449 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
450 sql += string( buf ) + ", ";
451 sql += "0, "; //last login
452 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
453 snprintf( buf, 12, "%d", account -> getUorder( ) );
454 sql += string( buf ) + ", ";
455 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
456 sql += string( buf ) + ", ";
457 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
458 sql += string( buf ) + ", ";
459 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
460 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
461 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
462 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
463 sql += string( buf ) + ")";
464 if( mysql_query( mysql, sql.c_str( ) ) ){
465 fprintf( stderr, "%s\n", sql.c_str( ) );
466 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
467 return RES_DB_QUERY_ERROR;
468 }
469
470 //???若??D????緇?????
471 userid_t uid;
472 if( getUid( account -> getUname( ), &uid ) != RES_OK ){
473 return RES_ERROR;
474 }
475
476 //vpaccount?????若?吟???若??????????????宴???吾??莨若??
477 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
478 snprintf( buf, 12, "%d", uid );
479 sql += string( buf ) + ", ";
480 if( account -> getActivate() ){
481 sql += "1, ";
482 }else{
483 sql += "0, ";
484 }
485 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
486 sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', ";
487 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
488 sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', ";
489 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
490 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
491 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
492 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
493 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
494 sql += string( buf ) + ", ";
495 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
496 sql += string( buf ) + ")";
497 if( mysql_query( mysql, sql.c_str( ) ) ){
498 fprintf( stderr, "%s\n", sql.c_str( ) );
499 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
500 //xoops_users??nsert???????潟?若???????ゃ????
501 sql = "DELETE FROM " + dbprefix + "_users where uid=";
502 snprintf( buf, 12, "%d", uid );
503 sql += string( buf );
504 mysql_query( mysql, sql.c_str( ) );
505 return RES_DB_QUERY_ERROR;
506 }
507
508 return RES_OK;
509 }
510
511 /**
512 *
513 * ?≪?????潟??紊???/span>
514 *
515 * @param
516 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
517 *
518 */
519 result_t updateAccount( sessionid_t sid, const account_t* account )
520 {
521 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
522 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
523
524 string sql;
525 string tmp;
526 char buf[ 12 ];
527
528 //xoops?????若?吟???若???????吾??莨若??
529 sql = "UPDATE " + dbprefix + "_users SET ";
530 sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', ";
531 sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', ";
532 sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
533 sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', ";
534 sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
535 sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", ";
536 sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
537 sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
538 sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
539 sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", ";
540 sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
541 sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
542 sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
543 sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
544 sql += "pass='" + string( account -> getPass( ) ) + "', ";
545 sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", ";
546 sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", ";
547 sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", ";
548 sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", ";
549 sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
550 snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) );
551 sql += "timezone_offset=" + string( buf ) + ", ";
552 sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", ";
553 sql += "umode='" + string( account -> getUmode( ) ) + "', ";
554 sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", ";
555 sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", ";
556 sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", ";
557 sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
558 sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', ";
559 sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
560 sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) );
561 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
562
563 if( mysql_query( mysql, sql.c_str( ) ) ){
564 fprintf( stderr, "%s\n", sql.c_str( ) );
565 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
566 return RES_DB_QUERY_ERROR;
567 }
568
569 //vpaccount?????若?吟???若??????????????宴??筝??吾??????
570 sql = "UPDATE " + dbprefix + "_vpaccount_users SET ";
571 sql += "activate=";
572 if( account -> getActivate() ){
573 sql += "1, ";
574 }else{
575 sql += "0, ";
576 }
577 sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', ";
578 sql += "institute='" + string( addSlashes( account -> getInstitute() ) ) + "', ";
579 sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', ";
580 sql += "organization='" + string( addSlashes( account -> getOrganization() ) ) + "', ";
581 sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', ";
582 sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', ";
583 sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', ";
584 sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
585 sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", ";
586 sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) );
587 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
588
589 if( mysql_query( mysql, sql.c_str( ) ) ){
590 fprintf( stderr, "%s\n", sql.c_str( ) );
591 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
592 return RES_DB_QUERY_ERROR;
593 }
594
595 return RES_OK;
596 }
597
598 /**
599 *
600 * criteria_t?ф??絎???????膀??蚊?????若??D??菴???.
601 * ???若??D????????腆坂????????????吾??莨若?随????????≪?????鴻??*uids???吾??莨若??.
602 * ???????泣?ゃ?冴??*uidsLen???吾??莨若??
603 *
604 * @param sid ?祉???激?с??D
605 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
606 * @param uids ???若?吟??ID??????
607 * @param uidsLen uids???????膣???/span>
608 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR| RES_ERROR
609 *
610 */
611 result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen )
612 {
613 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
614 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
615
616 string sql;
617 MYSQL_RES* result;
618 MYSQL_ROW row;
619 userid_t* dst = 0;
620
621 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users ";
622 sql += criteria2str( cri );
623 if( mysql_query( mysql, sql.c_str( ) ) ){
624 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
625 return RES_DB_QUERY_ERROR;
626 }
627 result = mysql_store_result( mysql ) ;
628 if( row = mysql_fetch_row(result) ){
629 *uidsLen = atoi( row[ 0 ] );
630 dst = new userid_t[ *uidsLen ];
631 }else{
632 mysql_free_result( result );
633 return RES_ERROR;
634 }
635 mysql_free_result( result );
636
637 sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users ";
638 sql += criteria2str( cri );
639 if( mysql_query( mysql, sql.c_str( ) ) ){
640 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
641 return RES_DB_QUERY_ERROR;
642 }
643
644 result = mysql_use_result( mysql ) ;
645 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){
646 dst[ i ] = atoi( row[ 0 ] );
647 }
648 mysql_free_result( result );
649 *uids = dst;
650
651 return RES_OK;
652 }
653
654 /**
655 *
656 * ?違???若????/span>
657 *
658 * @param
659 * @return
660 *
661 */
662 int getGroupCount( sessionid_t sid )
663 {
664 return 0;
665 }
666
667 /**
668 *
669 * ??絮??違???若??筝?荀у??
670 *
671 * @param
672 * @return
673 *
674 */
675 result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen )
676 {
677 return RES_ERROR;
678 }
679
680 /**
681 *
682 * ?違???若??膊∞??罔????????
683 *
684 * @param
685 * @return
686 *
687 */
688 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
689 {
690 return RES_ERROR;
691 }
692
693 /**
694 *
695 * ?違???若??ID筝?荀?/span>
696 *
697 * @param
698 * @return
699 *
700 */
701 result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen )
702 {
703 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
704 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
705
706 string sql;
707 MYSQL_RES* result;
708 MYSQL_ROW row;
709 groupid_t* dst = 0;
710
711 //?違???若???違??羆?????
712 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups ";
713 sql += criteria2str( cri );
714 if( mysql_query( mysql, sql.c_str( ) ) ){
715 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
716 return RES_DB_QUERY_ERROR;
717 }
718 result = mysql_store_result( mysql ) ;
719 if( row = mysql_fetch_row(result) ){
720 *gidsLen = atoi( row[ 0 ] );
721 dst = new groupid_t[ *gidsLen ];
722 }else{
723 mysql_free_result( result );
724 return RES_ERROR;
725 }
726 mysql_free_result( result );
727
728 sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups ";
729 sql += criteria2str( cri );
730 if( mysql_query( mysql, sql.c_str( ) ) ){
731 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
732 return RES_DB_QUERY_ERROR;
733 }
734
735 result = mysql_use_result( mysql ) ;
736 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){
737 dst[ i ] = atoi( row[ 0 ] );
738 }
739 mysql_free_result( result );
740 *gids = dst;
741
742 return RES_OK;
743 }
744
745 /**
746 *
747 * ?違???若??膊∞????ID??緇?
748 *
749 * @param
750 * @return
751 *
752 */
753 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
754 {
755 return RES_ERROR;
756 }
757
758 /**
759 *
760 * ?違???若????絮????若?九????/span>
761 *
762 * @param
763 * @return
764 *
765 */
766 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
767 {
768 return RES_ERROR;
769 }
770
771 /**
772 *
773 * ?違???若????絮????若?区申??
774 *
775 * @param
776 * @return
777 *
778 */
779 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
780 {
781 return RES_ERROR;
782 }
783
784 /**
785 *
786 * ?違???若????絮????若?九??
787 *
788 * @param
789 * @return
790 *
791 */
792 result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
793 {
794 return RES_ERROR;
795 }
796
797 /**
798 *
799 * ?違???若????????/span>
800 *
801 * @param
802 * @return
803 *
804 */
805 result_t deleteGroup( sessionid_t sid, groupid_t gid )
806 {
807 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
808 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
809
810 string sql;
811 sql = "DELETE FROM " + dbprefix + "_vpaccount_groups ";
812 sql += "WHERE gid = " + string( unsignedIntToString( gid ) );
813 if( mysql_query( mysql, sql.c_str( ) ) ){
814 fprintf( stderr, "%s\n", sql.c_str( ) );
815 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
816 return RES_DB_QUERY_ERROR;
817 }
818 return RES_OK;
819 }
820
821 /**
822 *
823 * ?違???若?????脂??/span>
824 *
825 * @param
826 * @return
827 *
828 */
829 result_t insertGroup( sessionid_t sid, const group_t* group )
830 {
831 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
832 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
833
834 string sql;
835 sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES (";
836 sql += "'" + string( addSlashes( group -> getGname( ) ) ) + "', ";
837 sql += "'" + string( addSlashes( group -> getDesc( ) ) ) + "' )";
838 if( mysql_query( mysql, sql.c_str( ) ) ){
839 fprintf( stderr, "%s\n", sql.c_str( ) );
840 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
841 return RES_DB_QUERY_ERROR;
842 }
843 return RES_OK;
844 }
845
846 /**
847 *
848 * ?違???若???????/span>
849 *
850 * @param
851 * @return
852 *
853 */
854 result_t updateGroup( sessionid_t sid, const group_t* group )
855 {
856 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
857 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
858
859 string sql;
860 sql = "UPDATE " + dbprefix + "_vpaccount_groups SET ";
861 sql += "gname='" + string( addSlashes( group -> getGname( ) ) ) + "', ";
862 sql += "gdesc='" + string( addSlashes( group -> getDesc( ) ) ) + "' ";
863 sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) );
864 if( mysql_query( mysql, sql.c_str( ) ) ){
865 fprintf( stderr, "%s\n", sql.c_str( ) );
866 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
867 return RES_DB_QUERY_ERROR;
868 }
869 return RES_OK;
870 }
871
872 /**
873 *
874 * ?違???若?????怨??
875 *
876 * @param
877 * @return
878 *
879 */
880 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
881 {
882 int len;
883 static criteria c;
884 result_t res = getGroups( sid, &gid, 1, &c, group, &len );
885 if( len == 0 ) return RES_NO_SUCH_GROUP;
886 return res;
887 }
888
889 /**
890 *
891 * ?違???若?????怨??
892 *
893 * @param
894 * @return
895 *
896 */
897 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen )
898 {
899 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
900 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
901
902 string sql;
903 MYSQL_RES* result;
904 MYSQL_ROW row;
905 group_t* dst = new group_t[ gidsLen ];
906
907 sql += "SELECT gid, gname, gdesc ";
908 sql += "FROM " + dbprefix + "_vpaccount_groups ";
909 sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) );
910 for( int i = 1; i < gidsLen; i++ ){
911 sql += " OR gid=" + string( unsignedIntToString( gids[ i ] ) );
912 }
913 sql += criteria2str( cri );
914 if( mysql_query( mysql, sql.c_str( ) ) ){
915 fprintf( stderr, "%s\n", sql.c_str( ) );
916 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
917 return RES_DB_QUERY_ERROR;
918 }
919 result = mysql_use_result( mysql ) ;
920 *groupsLen=0;
921 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < gidsLen ; i++ ){
922 dst[ i ].setGID( atoi( row[ 0 ] ) );
923 dst[ i ].setGname( row[ 1 ] );
924 dst[ i ].setDesc( row[ 2 ] );
925 ( *groupsLen )++;
926 }
927 mysql_free_result( result );
928 *groups = dst;
929 return RES_OK;
930 }
931
932 /**
933 *
934 * ?≪?????若?炊┤???????
935 *
936 * @param
937 * @return
938 *
939 */
940 bool isModerator( sessionid_t sid, userid_t uid )
941 {
942 return RES_ERROR;
943 }
944
945 /**
946 *
947 * ???若??D??緇?
948 *
949 * @param uname ID????緇??????????若?吟?弱??
950 * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
951 * @return RES_ERROR | RES_OK
952 * @refer result_t
953 *
954 */
955 result_t getUid( const char* uname, userid_t* uid )
956 {
957 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
958 if( uname == NULL ) return RES_ERROR;
959
960 string sql;
961 string uname2 = addSlashes( uname );
962 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
963 if( mysql_query( mysql, sql.c_str( ) ) ){
964 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
965 return RES_DB_QUERY_ERROR;
966 }
967 MYSQL_RES* result = mysql_store_result( mysql ) ;
968 MYSQL_ROW row = mysql_fetch_row(result);
969 if( row ){
970 *uid = atoi( row[0] );
971 mysql_free_result( result );
972 return RES_OK;
973 }else{
974 mysql_free_result( result );
975 return RES_NO_SUCH_USER;
976 }
977 }
978
979 /**
980 *
981 * ?祉???激?с?潟??篏?????xoops_vpaccount_session???吾??莨若???? sessionid_t??session???????
982 *
983 * @param uid xoops_users??id
984 * @param remoteHost remote ip (host order)
985 * @param session sessionid_t???????????????????ゃ?潟?帥??
986 * @return RES_OK ????
987 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
988 */
989 static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session )
990 {
991 result_t ret;
992 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" +
993 unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")";
994 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
995 *session = (int)mysql_insert_id(mysql);
996 ret = RES_OK;
997 }
998 else {
999 ret = RES_DB_QUERY_ERROR;
1000 }
1001 return ret;
1002 }
1003
1004
1005 /**
1006 *
1007 * ???違?ゃ?活?荐若???祉???激?с?割???
1008 *
1009 * @param uname ???違?ゃ?喝??
1010 * @param passwd ???鴻???若??
1011 * @param session sessionid_t???????????????????ゃ?潟?帥??
1012 * @return RES_OK ???違?ゃ?恰??????session??essionid_t???吾??莨若??????
1013 * @return RES_LOGIN_FAILURE uname?障????asswd???医幻
1014 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
1015 *
1016 */
1017 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
1018 {
1019 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1020
1021 result_t ret;
1022 string sql;
1023
1024 // uname, passwd -> uid
1025 string escUname = addSlashes( uname );
1026 string escPasswd = addSlashes( passwd );
1027 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
1028 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1029 MYSQL_RES* result = mysql_store_result( mysql );
1030 if( result ){
1031 MYSQL_ROW row = mysql_fetch_row(result);
1032 if( row ){
1033 userid_t uid = atoi(row[0]);
1034 ret = addSession( uid, 0, session );
1035 }else{
1036 ret = RES_LOGIN_FAILURE;
1037 }
1038 mysql_free_result( result );
1039 }else {
1040 ret = RES_DB_QUERY_ERROR;
1041 }
1042 }else{
1043 ret = RES_DB_QUERY_ERROR;
1044 }
1045
1046 return ret;
1047 }
1048
1049 /**
1050 *
1051 * ???違?≪???????祉???激?с?括?篋?
1052 *
1053 * @param sid session id
1054 * @return ????
1055 *
1056 */
1057 void logoutUser( sessionid_t sid )
1058 {
1059 result_t ret;
1060 string sql;
1061
1062 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
1063 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
1064 if ( mysql_affected_rows(mysql) == 1 ){
1065 // ???違?≪????????
1066 }
1067 else {
1068 // sid???≦??/span>
1069 }
1070 }
1071 else {
1072 // DB????????筝?????????/span>
1073 }
1074 }
1075
1076 /**
1077 *
1078 * ?祉???激?с?潟?????.<br>
1079 * XOOPS??ession???若????????蚊??????sess_id?????essionid??膈???????
1080 * ?逸?session_t??篏?????????
1081 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
1082 *
1083 * @param sessionid xoops??ession_id
1084 * @param uid xoops_users??id
1085 * @param remoteHost remote ip (host order)
1086 * @param session sessionid_t???????????????????ゃ?潟?帥??
1087 * @return RES_OK
1088 * @return RES_ERROR
1089 * @return RES_DB_QUERY_ERROR
1090 *
1091 */
1092 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
1093 {
1094 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1095
1096 result_t ret;
1097 string sql;
1098
1099 string escSessionid = addSlashes(sessionid);
1100 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'";
1101 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1102 MYSQL_RES* result = mysql_store_result( mysql );
1103 if( result ){
1104 MYSQL_ROW row = mysql_fetch_row(result);
1105 if( row ){
1106 ret = addSession( uid, remoteHost, session );
1107 }else{
1108 ret = RES_ERROR;
1109 }
1110 mysql_free_result( result );
1111 }else {
1112 ret = RES_DB_QUERY_ERROR;
1113 }
1114 }else{
1115 ret = RES_DB_QUERY_ERROR;
1116 }
1117
1118 return ret;
1119 }
1120
1121 /**
1122 *
1123 * ?祉???激?с?潟???膣違??session_t?у??????.<br>
1124 *
1125 * @param sess_id
1126 * @param session
1127 * @return
1128 *
1129 */
1130 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
1131 {
1132 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1133
1134 result_t ret;
1135 string sql;
1136
1137 sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix +
1138 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id);
1139 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1140 MYSQL_RES* result = mysql_store_result( mysql );
1141 if( result ){
1142 MYSQL_ROW row = mysql_fetch_row(result);
1143 if( row ){
1144 session_t *p = new session[1];
1145 p->setSessionID(sess_id);
1146 p->setUserID(atoi(row[1]));
1147 p->setDate(atoi(row[2]));
1148 p->setRemoteHost(atoi(row[3]));
1149 *ppsession = p;
1150 ret = RES_OK;
1151 }else{
1152 ret = RES_NO_SUCH_SESSION;
1153 }
1154 mysql_free_result( result );
1155 }else {
1156 ret = RES_DB_QUERY_ERROR;
1157 }
1158 }else{
1159 ret = RES_DB_QUERY_ERROR;
1160 }
1161
1162 return ret;
1163 }
1164
1165 /**
1166 *
1167 * ?祉???激?с?潟???綵??с?????с????????.
1168 *
1169 * @param sid ???с??????????session
1170 * @return true 罩e?
1171 * @return false 筝?罩?/span>
1172 *
1173 */
1174 bool isValidSessionID( sessionid_t sid )
1175 {
1176 if( mysql == NULL ) return false;
1177
1178 string sql;
1179 string sidstr;
1180 char buf[ 12 ];
1181 snprintf( buf, 12, "%d", sid );
1182
1183 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
1184 if( mysql_query( mysql, sql.c_str( ) ) ){
1185 return false;
1186 }
1187 MYSQL_RES* result = mysql_store_result( mysql ) ;
1188 MYSQL_ROW row = mysql_fetch_row(result);
1189 if( row ){
1190 return true;
1191 }else{
1192 return false;
1193 }
1194 mysql_free_result( result );
1195 }
1196
1197 void freeResult( const account_t* ptr ){ delete[] ( account_t* )ptr; }
1198 void freeResult( const group_t* ptr ){ delete[] ( group_t* )ptr; }
1199 void freeResult( const session_t* ptr ){ delete[] ( session_t* )ptr; }
1200 void freeResult( const unsigned int* ptr ){ delete[] ( unsigned int* )ptr; }
1201
1202 static string errstr;
1203 const char* getLastErrorString()
1204 {
1205 return errstr.c_str( );
1206 }
1207
1208 void setLastErrorString( const char* str )
1209 {
1210 errstr = str;
1211 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26