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.18 - (show annotations) (download) (as text)
Tue Nov 30 05:46:32 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.17: +13 -11 lines
File MIME type: text/x-c++src
・sessionからremoteHostを削除.

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

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