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.29 - (show annotations) (download) (as text)
Sat Dec 18 01:12:29 2004 UTC (19 years, 3 months ago) by youi
Branch: MAIN
Changes since 1.28: +11 -5 lines
File MIME type: text/x-c++src
freeResultの関数名をfree<データ型>に変更した.

1 /*
2 *
3 * $Revision: 1.28 $
4 * $Log: commonal.cc,v $
5 * Revision 1.28 2004/12/14 12:02:08 youi
6 * __WIN__??絎?臂???????????indows??ll篏??????荀?????????茵?????.
7 * USE_SYSLOG??絎?臂???????????yslogd?吾?<???祉?若?吾???阪??????.
8 * getAccounts: uidsLen??0??????????????菴遵??????.
9 *
10 * Revision 1.27 2004/12/06 11:34:47 aga
11 * ??ninitializeDB()??菴遵??.
12 *
13 * Revision 1.26 2004/12/06 10:17:36 youi
14 * mysql_use_result????腟?????罧??????????冴??????鐚?
15 * while( row = mysql_fetch_row(result) );???水?ワ?
16 *
17 * Revision 1.25 2004/12/06 07:24:33 youi
18 * insertAccount, insertGroup:
19 * ?域?菴遵?????????宴???綽????????若??D鐚??違???若??ID??膃??綣??違???吾??莨若??.
20 *
21 * Revision 1.24 2004/12/06 01:45:50 aga
22 * ?祉?潟?<?潟???ゃ??.
23 * ?脂???上???篆??.
24 *
25 * Revision 1.23 2004/12/04 09:21:10 aga
26 * ??p_config ?? vpaccount_config.
27 *
28 * Revision 1.22 2004/12/03 07:17:21 youi
29 * isModerator?с?≪???祉?鴻???????若?帥???若?鴻???若????????篆??.
30 *
31 * Revision 1.21 2004/12/01 10:28:58 youi
32 * DB????????????眼??軸??篆??
33 * institute -> division
34 * organizaion -> company_name
35 *
36 * Revision 1.20 2004/12/01 04:37:04 youi
37 * freeResult: unsigned int* ?? int* ?娯信罩?
38 * ?潟?<?潟???????∽?違???????菴処?.
39 *
40 * Revision 1.19 2004/11/30 06:40:11 youi
41 * ?∽?違??菴遵??(gidExists, uidExists)
42 * getGroupCount??絎?臂?
43 * getGroupsByUid??絎?臂?
44 * isGroupAdmin??篆??.
45 * dumpGroupAdmins??絎?臂?
46 * deleteMember??絎?臂?
47 * insertMember??絎?臂?
48 * getMembers??絎?臂?
49 * isModerator??絎?臂?
50 *
51 * Revision 1.18 2004/11/30 05:46:32 aga
52 * ??ession????remoteHost??????
53 *
54 * Revision 1.17 2004/11/27 09:35:49 youi
55 * isActivated??絎?臂?
56 * activate??絎?臂?
57 * dumpUid??絎?臂?
58 *
59 * Revision 1.16 2004/11/27 06:29:29 youi
60 * getAccountCount??絎?臂?
61 * dumpGids??絎?臂?
62 * insertGroup, deleteGroup, updateGroup??絎?臂?
63 * getGroup, getGroups??絎?臂?
64 * ???若?帥???若?劫?????????弱?冴?????鐚?RES_DB_NOT_INITIALIZED??菴????????????∽?違??申??
65 * (???綽????∽?違??罧??c??????)
66 *
67 * Revision 1.15 2004/11/27 02:22:22 aga
68 * ??nitializeDB????ddSlashes()???若?吟???純?<??????篆??.
69 *
70 * Revision 1.14 2004/11/27 01:07:31 youi
71 * criteria2str: LIMIT??RDER BY?????????ャ???帥????.
72 *
73 * Revision 1.13 2004/11/27 00:35:39 youi
74 * getAccounts??絎?臂?
75 * getAccount??篆??鐚???????etAccounts???若?喝?冴??.
76 * criteria2str??絎?臂?
77 *
78 * Revision 1.12 2004/11/26 09:45:28 youi
79 * getAccount??絎?臂?
80 *
81 * Revision 1.11 2004/11/26 08:16:26 aga
82 * ??etSession, loginUser, createSession, freeResult(const session_t*) 篆??.
83 *
84 * Revision 1.10 2004/11/26 07:57:42 youi
85 * updateAccount, deleteAccount??絎?臂?
86 * mysql_query紊掩??????tderr?吾?????若?潟?若?????????若?<???祉?若?吾???阪??.
87 *
88 * Revision 1.9 2004/11/26 07:38:02 aga
89 * ??AILUE -> FAILURE.
90 *
91 * Revision 1.8 2004/11/26 06:36:55 aga
92 * ??reateSession, getSession ??篏???.
93 *
94 * Revision 1.7 2004/11/26 04:51:47 youi
95 * dbprefix??絎?臂?????.
96 * insertAccount??絎?臂?????.
97 * isValidSessionID??絎?臂?????.
98 *
99 * Revision 1.6 2004/11/26 04:35:55 aga
100 * ??oginUser(), logoutUser()??篏???.
101 *
102 * Revision 1.5 2004/11/26 01:08:25 aga
103 * ??ddSlashes()篏???.
104 *
105 * Revision 1.4 2004/11/25 12:14:29 youi
106 * getUid????????絎?臂?????.
107 *
108 * Revision 1.3 2004/11/25 11:13:59 youi
109 * getLastErrorString/setLastErrorString??絎?臂?
110 *
111 * Revision 1.2 2004/11/25 08:55:19 youi
112 * 綣??違??????篆??.
113 * freeResult??菴遵??.
114 *
115 * Revision 1.1 2004/11/25 05:14:58 youi
116 * initial version
117 *
118 *
119 */
120 #ifdef __WIN__
121 #include <winsock.h>
122 #define my_socket SOCKET
123 #else
124 typedef int my_socket;
125 #endif
126
127 #ifdef USE_SYSLOG
128 #include <syslog.h>
129 #endif
130
131 #include <stdio.h>
132 #include <stdlib.h>
133 #include <string.h>
134 #include <mysql.h>
135 #include <errmsg.h>
136 #include <string>
137 #include <assert.h>
138 using namespace std;
139
140 #include "common.h"
141 #include "account.h"
142 #include "group.h"
143 #include "session.h"
144 #include "criteria.h"
145 #include "commonal.h"
146
147 #ifdef __WIN__
148 typedef MYSQL* (__stdcall *mysql_init_t)(MYSQL *mysql);
149 typedef void (__stdcall *mysql_close_t)(MYSQL *mysql);
150 typedef MYSQL* (__stdcall *mysql_real_connect_t)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag);
151 typedef unsigned long (__stdcall *mysql_real_escape_string_t)(MYSQL *mysql, char *to, const char *from, unsigned long length);
152 typedef MYSQL_RES* (__stdcall *mysql_store_result_t)(MYSQL *mysql);
153 typedef MYSQL_RES* (__stdcall *mysql_use_result_t)(MYSQL *mysql);
154 typedef int (__stdcall *mysql_query_t)(MYSQL *mysql, const char *query);
155 typedef my_ulonglong (__stdcall *mysql_num_rows_t)(MYSQL_RES *result);
156 typedef MYSQL_ROW (__stdcall *mysql_fetch_row_t)(MYSQL_RES *result);
157 typedef unsigned int (__stdcall *mysql_errno_t)(MYSQL *mysql);
158 typedef char* (__stdcall *mysql_error_t)(MYSQL *mysql);
159 typedef my_ulonglong (__stdcall *mysql_insert_id_t)(MYSQL *mysql);
160 typedef void (__stdcall *mysql_free_result_t)(MYSQL_RES *result);
161 typedef my_ulonglong (_stdcall* mysql_affected_rows_t)(MYSQL *mysql);
162
163 mysql_init_t fp_mysql_init = NULL;
164 mysql_close_t fp_mysql_close = NULL;
165 mysql_real_connect_t fp_mysql_real_connect = NULL;
166 mysql_real_escape_string_t fp_mysql_real_escape_string = NULL;
167 mysql_store_result_t fp_mysql_store_result = NULL;
168 mysql_use_result_t fp_mysql_use_result = NULL;
169 mysql_query_t fp_mysql_query = NULL;
170 mysql_num_rows_t fp_mysql_num_rows = NULL;
171 mysql_fetch_row_t fp_mysql_fetch_row = NULL;
172 mysql_errno_t fp_mysql_errno = NULL;
173 mysql_error_t fp_mysql_error = NULL;
174 mysql_insert_id_t fp_mysql_insert_id = NULL;
175 mysql_free_result_t fp_mysql_free_result = NULL;
176 mysql_affected_rows_t fp_mysql_affected_rows = NULL;
177 #else
178 #define fp_mysql_init mysql_init
179 #define fp_mysql_close mysql_close
180 #define fp_mysql_real_connect mysql_real_connect
181 #define fp_mysql_real_escape_string mysql_real_escape_string
182 #define fp_mysql_store_result mysql_store_result
183 #define fp_mysql_use_result mysql_use_result
184 #define fp_mysql_query mysql_query
185 #define fp_mysql_num_rows mysql_num_rows
186 #define fp_mysql_fetch_row mysql_fetch_row
187 #define fp_mysql_errno mysql_errno
188 #define fp_mysql_error mysql_error
189 #define fp_mysql_insert_id mysql_insert_id
190 #define fp_mysql_free_result mysql_free_result
191 #define fp_mysql_affected_rows mysql_affected_rows
192 #endif
193
194 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
195 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
196
197 /**
198 *
199 * php??ddslashes????????
200 *
201 * @param addslashes???鴻????絖?????NULL??絎?筝?????
202 * @return addslashes????????絖???
203 */
204 string addSlashes( const char *str )
205 {
206 if ( mysql == NULL ){
207 string s;
208 return s;
209 }
210 int len = strlen(str);
211 char *buf = new char[len*2+1];
212 int bufLen = fp_mysql_real_escape_string( mysql, buf, str, len );
213 string s( buf, bufLen );
214 return s;
215 }
216
217 /**
218 *
219 * gid??????????с????
220 * DB???≪???祉?劫け????????false??????鐚?/span>
221 *
222 * @param gid ???с??????????GID
223 * @return true 絖???????
224 * @return false 絖?????????
225 *
226 */
227 static bool gidExists( groupid_t gid )
228 {
229 string sql;
230 MYSQL_RES* result;
231 MYSQL_ROW row;
232
233 sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups ";
234 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
235 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
236 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
237 return false;
238 }
239 result = fp_mysql_store_result( mysql ) ;
240 if( !fp_mysql_fetch_row(result) ){
241 fp_mysql_free_result( result );
242 return false;
243 }
244 fp_mysql_free_result( result );
245 return true;
246 }
247
248
249 /**
250 *
251 * Platform???若?倶???宴??id??絖??????????????с????
252 * DB???≪???祉?劫け????????false??????鐚?/span>
253 *
254 * @param uid ???с??????????UID
255 * @return true 絖???????
256 * @return false 絖?????????
257 *
258 */
259 static bool uidExists( userid_t uid )
260 {
261 string sql;
262 MYSQL_RES* result;
263 MYSQL_ROW row;
264
265 sql = "SELECT * FROM " + dbprefix + "_vpaccount_users ";
266 sql += "WHERE uid=" + string( unsignedIntToString( uid ) );
267 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
268 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
269 return false;
270 }
271 result = fp_mysql_store_result( mysql ) ;
272 if( !fp_mysql_fetch_row(result) ){
273 fp_mysql_free_result( result );
274 return false;
275 }
276 fp_mysql_free_result( result );
277 return true;
278 }
279
280
281 /**
282 *
283 * criteria ?? SQL?????????
284 *
285 *
286 *
287 */
288 string criteria2str( criteria* cri )
289 {
290 string sql;
291
292 const orderby* odrby = cri -> headOrderBy( );
293 if( odrby != 0 ){
294 sql += " ORDER BY " + string( odrby -> getColumn( ) );
295 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
296 while( ( odrby = cri -> nextOrderBy( ) ) != 0 ){
297 sql += ", " + string( odrby -> getColumn( ) );
298 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
299 }
300 }
301
302 if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){
303 sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) )
304 + ", " + string( intToString( cri -> getLimitRows( ) ) );
305 }
306 return sql;
307 }
308
309 /**
310 *
311 * ???若?帥???若?鴻????????
312 *
313 * @param host ???若?帥???若?鴻?????鴻????
314 * @param user ???若?帥???若?鴻???≪???祉?鴻???????若?九??
315 * @param password 筝?荐????若?吟?????鴻???若??
316 * @param dbname ???若?帥???若?鴻??????
317 * @param prefix XOOPS???若?帥???若?鴻???若??????REFIX
318 * @return result_t
319 * @refer result_t
320 */
321 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
322 {
323 // ?≪??・膓?筝???????筝???????/span>
324 if ( mysql != NULL )
325 fp_mysql_close( mysql );
326
327 dbprefix = prefix;
328
329
330 // ????????・膓?
331 mysql = fp_mysql_init(NULL);
332 if ( mysql == NULL ){
333 return RES_DB_INITIALIZE_ERROR;
334 }
335 char *unix_socket = NULL; // ?
336 unsigned int flag = 0; // ?
337 if ( NULL == fp_mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
338 return RES_DB_CONNECT_ERROR;
339 }
340
341 return RES_OK;
342 }
343
344 /**
345 *
346 * DB?ョ????????違???????????障??????
347 *
348 * @param ????
349 * @return RES_OK
350 */
351 result_t uninitializeDB()
352 {
353 if ( mysql != NULL ){
354 fp_mysql_close( mysql );
355 mysql = NULL;
356 }
357
358 return RES_OK;
359 }
360
361
362 /**
363 *
364 * Platform???若?倶?粋??倶????緇?
365 *
366 * @param
367 * @return
368 *
369 */
370 bool isActivated( sessionid_t sid, userid_t uid )
371 {
372 if( mysql == NULL ) return false;
373 if( !isValidSessionID( sid ) ) return false;
374
375 string sql;
376 MYSQL_RES* result;
377 MYSQL_ROW row;
378
379 sql = "SELECT * FROM " + dbprefix + "_vpaccount_users ";
380 sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) );
381 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
382 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
383 return false;
384 }
385 result = fp_mysql_store_result( mysql ) ;
386 if( row = fp_mysql_fetch_row(result) ){
387 fp_mysql_free_result( result );
388 return true;
389 }
390 return false;
391 }
392
393 /**
394 *
395 * Platform???若?倶?粋??倶??紊???/span>
396 *
397 * @param
398 * @return
399 *
400 */
401 result_t activate( sessionid_t sid, userid_t uid, bool activate )
402 {
403 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
404 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
405
406 string sql;
407 MYSQL_RES* result;
408 MYSQL_ROW row;
409
410 sql = "UPDATE " + dbprefix + "_vpaccount_users ";
411 sql += "SET activate=" + string( activate ? "1" : "0" );
412 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
413 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
414 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
415 return RES_DB_QUERY_ERROR;
416 }
417 if ( fp_mysql_affected_rows(mysql) == 0 ){
418 // ?贋?医け??
419 return RES_NO_SUCH_USER;
420 }
421 return RES_OK;
422 }
423
424 /**
425 *
426 * ?≪?????潟????/span>
427 *
428 * @param
429 * @return
430 *
431 */
432 int getAccountCount( sessionid_t sid )
433 {
434 if( mysql == NULL ) return 0;
435 if( !isValidSessionID( sid ) ) return 0;
436
437 int ret = 0;
438 string sql;
439 MYSQL_RES* result;
440 MYSQL_ROW row;
441
442 //?≪?????潟???違??羆?????
443 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users ";
444 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
445 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
446 return 0;
447 }
448 result = fp_mysql_store_result( mysql ) ;
449 if( row = fp_mysql_fetch_row(result) ){
450 ret = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
451 }else{
452 fp_mysql_free_result( result );
453 return 0;
454 }
455 fp_mysql_free_result( result );
456 return ret;
457 }
458
459 /**
460 *
461 * ?≪?????潟??????/span>
462 *
463 * @param
464 * @return RES_OK
465 * @return RES_NO_SUCH_SESSION
466 * @return RES_DB_QUERY_ERROR
467 *
468 */
469 result_t deleteAccount( sessionid_t sid, userid_t uid )
470 {
471 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
472 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
473
474 string sql;
475 sql = "DELETE FROM " + dbprefix + "_users ";
476 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
477 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
478 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
479 return RES_DB_QUERY_ERROR;
480 }
481
482 sql = "DELETE FROM " + dbprefix + "_vpaccount_users ";
483 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
484 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
485 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
486 return RES_DB_QUERY_ERROR;
487 }
488
489 return RES_OK;
490 }
491
492 /**
493 *
494 * ?≪?????潟?????怨??
495 *
496 * @param sid ?祉???激?с??D
497 * @param uid ??緇??????????若?吟??ID
498 * @param acc ??緇??????≪?????潟??????account_t)?????ゃ?潟?帥???吾??莨若??綣???/span>
499 * @return RES_OK
500 * @return RES_NO_SUCH_USER
501 * @return RES_NO_SUCH_SESSION
502 * @return RES_DB_QUERY_ERROR
503 * @return RES_ERROR
504 *
505 */
506 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc )
507 {
508 int len;
509 static criteria c;
510 result_t res = getAccounts( sid, &uid, 1, &c, acc, &len );
511 if( len == 0 ) return RES_NO_SUCH_USER;
512 return res;
513 }
514
515 /**
516 *
517 * ?≪?????潟?????怨??
518 *
519 * @param sid ?祉???激?с??D
520 * @param uids ??緇??????????若?吟??ID??????
521 * @param uidsLen uids???????膣???/span>
522 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
523 * @param accounts 罎?膣∝??????????????ゃ?潟?帥???吾??莨若??綣???/span>
524 * @param accountsLen 罎?膣∝???????????*accounts???膣???
525 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION
526 * @return RES_DB_QUERY_ERROR
527 *
528 */
529 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen )
530 {
531 #ifdef USE_SYSLOG
532 openlog( "commonal", LOG_ODELAY, LOG_USER );
533 #endif
534 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
535 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
536 if( uidsLen <= 0 ){
537 *accounts = new account_t[ 0 ];
538 *accountsLen = 0;
539 #ifdef USE_SYSLOG
540 closelog( );
541 #endif
542 return RES_OK;
543 }
544
545 string sql;
546 MYSQL_RES* result;
547 MYSQL_ROW row;
548 account_t* dst = new account_t[ uidsLen ];
549
550 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 ";
551 sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_vpaccount_users AS u2 ";
552 sql += "WHERE u1.uid = u2.uid ";
553 if( uidsLen > 0 ){
554 sql += "AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) );
555 for( int i = 1; i < uidsLen; i++ ){
556 sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) );
557 }
558 sql += " ) ";
559 }
560 sql += criteria2str( cri );
561 #ifdef USE_SYSLOG
562 syslog( LOG_DEBUG, sql.c_str( ) );
563 #endif
564 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
565 fprintf( stderr, "%s\n", sql.c_str( ) );
566 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
567 #ifdef USE_SYSLOG
568 syslog( LOG_ERR, "query failed %d %s", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
569 closelog( );
570 #endif
571 return RES_DB_QUERY_ERROR;
572 }
573 #ifdef USE_SYSLOG
574 syslog( LOG_DEBUG, "query succeed" );
575 #endif
576 result = fp_mysql_use_result( mysql ) ;
577 *accountsLen=0;
578 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < uidsLen ; i++ ){
579 #ifdef USE_SYSLOG
580 syslog( LOG_DEBUG, "set to account_t %d", i );
581 #endif
582 dst[ i ].setUID( atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ) );
583 dst[ i ].setName( row[ 1 ] );
584 dst[ i ].setUname( row[ 2 ] );
585 dst[ i ].setEmail( row[ 3 ] );
586 dst[ i ].setURL( row[ 4 ] );
587 dst[ i ].setUserAvatar( row[ 5 ] );
588 dst[ i ].setUserRegdate( atoi( row[ 6 ] != NULL ? row[ 6 ] : "" ) );
589 dst[ i ].setUserIcq( row[ 7 ] );
590 dst[ i ].setUserFrom( row[ 8 ] );
591 dst[ i ].setUserSig( row[ 9 ] );
592 dst[ i ].setUserViewemail( atoi( row[ 10 ] != NULL ? row[ 10 ] : "" ) );
593 dst[ i ].setActkey( row[ 11 ] );
594 dst[ i ].setUserAim( row[ 12 ] );
595 dst[ i ].setUserYim( row[ 13 ] );
596 dst[ i ].setUserMsnm( row[ 14 ] );
597 dst[ i ].setPass( row[ 15 ] );
598 dst[ i ].setPosts( atoi( row[ 16 ] != NULL ? row[ 16 ] : "" ) );
599 dst[ i ].setAttachsig( atoi( row[ 17 ] != NULL ? row[ 17 ] : "" ) );
600 dst[ i ].setRank( atoi( row[ 18 ] != NULL ? row[ 18 ] : "" ) );
601 dst[ i ].setLevel( atoi( row[ 19 ] != NULL ? row[ 19 ] : "" ) );
602 dst[ i ].setTheme( row[ 20 ] );
603 dst[ i ].setTimezoneOffset( atof( row[ 21 ] ) );
604 dst[ i ].setLastLogin( atoi( row[ 22 ] != NULL ? row[ 22 ] : "" ) );
605 dst[ i ].setUmode( row[ 23 ] );
606 dst[ i ].setUorder( atoi( row[ 24 ] != NULL ? row[ 24 ] : "" ) );
607 dst[ i ].setNotifyMethod( atoi( row[ 25 ] != NULL ? row[ 25 ] : "" ) );
608 dst[ i ].setNotifyMode( atoi( row[ 26 ] != NULL ? row[ 26 ] : "" ) );
609 dst[ i ].setUserOcc( row[ 27 ] );
610 dst[ i ].setBio( row[ 28 ] );
611 dst[ i ].setUserIntrest( row[ 29 ] );
612 dst[ i ].setUserMailok( atoi( row[ 30 ] != NULL ? row[ 30 ] : "" ) );
613 dst[ i ].setActivate( atoi( row[ 31 ] != NULL ? row[ 31 ] : "" ) );
614 dst[ i ].setAddress( row[ 32 ] );
615 dst[ i ].setDivision( row[ 33 ] );
616 dst[ i ].setTel( row[ 34 ] );
617 dst[ i ].setCompanyName( row[ 35 ] );
618 dst[ i ].setCountry( row[ 36 ] );
619 dst[ i ].setZipcode( row[ 37 ] );
620 dst[ i ].setFax( row[ 38 ] );
621 dst[ i ].setBaseURL( row[ 39 ] );
622 dst[ i ].setNoticeMail( atoi( row[ 40 ] != NULL ? row[ 40 ] : "" ) );
623 dst[ i ].setNoticeMailSince( atoi( row[ 41 ] != NULL ? row[ 41 ] : "" ) );
624 ( *accountsLen )++;
625 }
626 while( row = fp_mysql_fetch_row(result) );
627 fp_mysql_free_result( result );
628 *accounts = dst;
629 #ifdef USE_SYSLOG
630 syslog( LOG_DEBUG, "return RES_OK" );
631 closelog( );
632 #endif
633 return RES_OK;
634 }
635
636 /**
637 *
638 * ?≪?????潟???脂??
639 * ???若?倶???宴?????若?帥???若?鴻???脂?蚊???障??鐚?/span>
640 * ?脂?蚊???????若?倶???宴???綽????????若??D??uid???主????障??.
641 *
642 * @param sid ?祉???激?с??/span>
643 * @param account ?脂?蚊?????≪?????潟??????/span>
644 * @param uid ?脂?蚊?????≪?????潟?????宴???綽????????若??D
645 * @return RES_OK
646 * @return RES_NO_SUCH_SESSION
647 * @return RES_DB_QUERY_ERROR
648 * @return RES_ERROR
649 *
650 */
651 result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid )
652 {
653 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
654 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
655
656 string sql;
657 string tmp;
658 char buf[ 12 ];
659
660 //xoops?????若?吟???若???????吾??莨若??
661 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 (";
662 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
663 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
664 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
665 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
666 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
667 snprintf( buf, 12, "%d", time( NULL ) );
668 sql += string( buf ) + ", ";
669 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
670 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
671 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
672 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
673 sql += string( buf ) + ", ";
674 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
675 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
676 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
677 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
678 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
679 snprintf( buf, 12, "%d", account -> getPosts( ) );
680 sql += string( buf ) + ", ";
681 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
682 sql += string( buf ) + ", ";
683 snprintf( buf, 12, "%d", account -> getRank( ) );
684 sql += string( buf ) + ", ";
685 snprintf( buf, 12, "%d", account -> getLevel( ) );
686 sql += string( buf ) + ", ";
687 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
688 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
689 sql += string( buf ) + ", ";
690 sql += "0, "; //last login
691 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
692 snprintf( buf, 12, "%d", account -> getUorder( ) );
693 sql += string( buf ) + ", ";
694 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
695 sql += string( buf ) + ", ";
696 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
697 sql += string( buf ) + ", ";
698 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
699 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
700 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
701 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
702 sql += string( buf ) + ")";
703 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
704 fprintf( stderr, "%s\n", sql.c_str( ) );
705 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
706 return RES_DB_QUERY_ERROR;
707 }
708
709 //???若??D????緇?????
710 *uid = fp_mysql_insert_id( mysql );
711
712 //vpaccount?????若?吟???若??????????????宴???吾??莨若??
713 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
714 snprintf( buf, 12, "%d", *uid );
715 sql += string( buf ) + ", ";
716 if( account -> getActivate() ){
717 sql += "1, ";
718 }else{
719 sql += "0, ";
720 }
721 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
722 sql += "'" + string( addSlashes( account -> getDivision() ) ) + "', ";
723 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
724 sql += "'" + string( addSlashes( account -> getCompanyName() ) ) + "', ";
725 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
726 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
727 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
728 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
729 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
730 sql += string( buf ) + ", ";
731 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
732 sql += string( buf ) + ")";
733 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
734 fprintf( stderr, "%s\n", sql.c_str( ) );
735 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
736 //xoops_users??nsert???????潟?若???????ゃ????
737 sql = "DELETE FROM " + dbprefix + "_users where uid=";
738 snprintf( buf, 12, "%d", *uid );
739 sql += string( buf );
740 fp_mysql_query( mysql, sql.c_str( ) );
741 return RES_DB_QUERY_ERROR;
742 }
743
744 return RES_OK;
745 }
746
747 /**
748 *
749 * ?≪?????潟?????宴??紊??眼????.
750 *
751 *
752 * @param sid ?祉???激?с??D
753 * @param account 紊??眼???????≪?????潟??????/span>
754 * @return RES_OK
755 * @return RES_NO_SUCH_SESSION
756 * @return RES_DB_QUERY_ERROR
757 * @return RES_NO_SUCH_USER
758 *
759 */
760 result_t updateAccount( sessionid_t sid, const account_t* account )
761 {
762 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
763 if( account == NULL ) return RES_ERROR;
764 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
765 if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER;
766
767 string sql;
768 string tmp;
769 char buf[ 12 ];
770
771 //xoops?????若?吟???若???????吾??莨若??
772 sql = "UPDATE " + dbprefix + "_users SET ";
773 sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', ";
774 sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', ";
775 sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
776 sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', ";
777 sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
778 sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", ";
779 sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
780 sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
781 sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
782 sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", ";
783 sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
784 sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
785 sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
786 sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
787 sql += "pass='" + string( account -> getPass( ) ) + "', ";
788 sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", ";
789 sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", ";
790 sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", ";
791 sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", ";
792 sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
793 snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) );
794 sql += "timezone_offset=" + string( buf ) + ", ";
795 sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", ";
796 sql += "umode='" + string( account -> getUmode( ) ) + "', ";
797 sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", ";
798 sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", ";
799 sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", ";
800 sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
801 sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', ";
802 sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
803 sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) );
804 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
805
806 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
807 fprintf( stderr, "%s\n", sql.c_str( ) );
808 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
809 return RES_DB_QUERY_ERROR;
810 }
811
812 //vpaccount?????若?吟???若??????????????宴??筝??吾??????
813 sql = "UPDATE " + dbprefix + "_vpaccount_users SET ";
814 sql += "activate=";
815 if( account -> getActivate() ){
816 sql += "1, ";
817 }else{
818 sql += "0, ";
819 }
820 sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', ";
821 sql += "division='" + string( addSlashes( account -> getDivision() ) ) + "', ";
822 sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', ";
823 sql += "company_name='" + string( addSlashes( account -> getCompanyName() ) ) + "', ";
824 sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', ";
825 sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', ";
826 sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', ";
827 sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
828 sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", ";
829 sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) );
830 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
831
832 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
833 fprintf( stderr, "%s\n", sql.c_str( ) );
834 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
835 return RES_DB_QUERY_ERROR;
836 }
837
838 return RES_OK;
839 }
840
841 /**
842 *
843 * criteria_t?ф??絎???????膀??蚊?????若??D??菴???.
844 * ???若??D????????腆坂????????????吾??莨若?随????????≪?????鴻??*uids???吾??莨若??.
845 * ???????泣?ゃ?冴??*uidsLen???吾??莨若??
846 *
847 * @param sid ?祉???激?с??D
848 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
849 * @param uids ???若?吟??ID??????
850 * @param uidsLen uids???????膣???/span>
851 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION
852 * @return RES_DB_QUERY_ERROR| RES_ERROR
853 *
854 */
855 result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen )
856 {
857 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
858 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
859
860 string sql;
861 MYSQL_RES* result;
862 MYSQL_ROW row;
863 userid_t* dst = 0;
864
865 sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users ";
866 sql += criteria2str( cri );
867 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
868 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
869 return RES_DB_QUERY_ERROR;
870 }
871 result = fp_mysql_store_result( mysql ) ;
872 if( result == NULL ){
873 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
874 return RES_DB_QUERY_ERROR;
875 }
876 *uidsLen = fp_mysql_num_rows( result );
877 dst = new userid_t[ *uidsLen ];
878 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){
879 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
880 }
881 fp_mysql_free_result( result );
882 *uids = dst;
883
884 return RES_OK;
885 }
886
887 /**
888 *
889 * ?違???若???違??菴???.
890 * 筝?罩c???祉???激?с??D????0??菴???.
891 *
892 * @param sid ?祉???激?с??D
893 * @return ?違???若????/span>
894 *
895 */
896 int getGroupCount( sessionid_t sid )
897 {
898 if( mysql == NULL ) return 0;
899 if( !isValidSessionID( sid ) ) return 0;
900
901 string sql;
902 MYSQL_RES* result;
903 MYSQL_ROW row;
904 int groupLen = 0;
905
906 //?違???若???違??羆?????
907 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups";
908 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
909 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
910 return RES_DB_QUERY_ERROR;
911 }
912 result = fp_mysql_store_result( mysql ) ;
913 if( row = fp_mysql_fetch_row(result) ){
914 groupLen = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
915 }
916 fp_mysql_free_result( result );
917 return groupLen;
918 }
919
920 /**
921 *
922 * ??絮??違???若??筝?荀у??
923 *
924 * @param
925 * @return
926 *
927 */
928 result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen )
929 {
930 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
931 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
932 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
933
934 string sql;
935 MYSQL_RES* result;
936 MYSQL_ROW row;
937 groupid_t* dst = 0;
938 int len = 0;
939
940 //??絮??????違???若??????紊у???違??羆?????
941 sql = "SELECT count(*) FROM " + dbprefix + "_vpaccount_groups_users_link";
942 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
943 sql += criteria2str( cri );
944 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
945 fprintf( stderr, "%s\n", sql.c_str( ) );
946 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
947 return RES_DB_QUERY_ERROR;
948 }
949 result = fp_mysql_store_result( mysql ) ;
950 if( row = fp_mysql_fetch_row(result) ){
951 len = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
952 }
953 fp_mysql_free_result( result );
954
955 sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link";
956 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
957 sql += criteria2str( cri );
958 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
959 fprintf( stderr, "%s\n", sql.c_str( ) );
960 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
961 return RES_DB_QUERY_ERROR;
962 }
963 *gidsLen = 0;
964 dst = new groupid_t[ len ];
965 result = fp_mysql_store_result( mysql ) ;
966 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < len ; i++ ){
967 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
968 ( *gidsLen )++;
969 }
970 fp_mysql_free_result( result );
971 *gids = dst;
972
973 return RES_OK;
974 }
975
976 /**
977 *
978 * ?違???若??膊∞??罔????????
979 *
980 * @param
981 * @return
982 *
983 */
984 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
985 {
986 if( mysql == NULL ) return false;
987 if( !isValidSessionID( sid ) ) return false;
988 if( !uidExists( uid ) ) return false;
989 if( !gidExists( gid ) ) return false;
990
991 string sql;
992 MYSQL_RES* result;
993 MYSQL_ROW row;
994 groupid_t* dst = 0;
995 result_t res;
996
997 sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups_users_link ";
998 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
999 sql += " AND uid=" + string( unsignedIntToString( uid ) );
1000 sql += " AND is_admin=1";
1001 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1002 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1003 return false;
1004 }
1005 result = fp_mysql_store_result( mysql );
1006 if( !fp_mysql_fetch_row(result) ){
1007 fp_mysql_free_result( result );
1008 return false;
1009 }
1010
1011 fp_mysql_free_result( result );
1012 return true;;
1013 }
1014
1015 /**
1016 *
1017 * ?違???若??ID筝?荀?/span>
1018 *
1019 * @param
1020 * @return
1021 *
1022 */
1023 result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen )
1024 {
1025 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1026 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1027
1028 string sql;
1029 MYSQL_RES* result;
1030 MYSQL_ROW row;
1031 groupid_t* dst = 0;
1032
1033 sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups ";
1034 sql += criteria2str( cri );
1035 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1036 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1037 return RES_DB_QUERY_ERROR;
1038 }
1039 result = fp_mysql_store_result( mysql ) ;
1040 if( result == NULL ){
1041 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1042 return RES_DB_QUERY_ERROR;
1043 }
1044 *gidsLen = fp_mysql_num_rows( result );
1045 dst = new groupid_t[ *gidsLen ];
1046 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){
1047 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1048 }
1049 fp_mysql_free_result( result );
1050 *gids = dst;
1051
1052 return RES_OK;
1053 /*
1054 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1055 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1056
1057 string sql;
1058 MYSQL_RES* result;
1059 MYSQL_ROW row;
1060 groupid_t* dst = 0;
1061
1062 //?違???若???違??羆?????
1063 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups ";
1064 sql += criteria2str( cri );
1065 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1066 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1067 return RES_DB_QUERY_ERROR;
1068 }
1069 result = fp_mysql_store_result( mysql ) ;
1070 if( row = fp_mysql_fetch_row(result) ){
1071 *gidsLen = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1072 dst = new groupid_t[ *gidsLen ];
1073 }else{
1074 fp_mysql_free_result( result );
1075 return RES_ERROR;
1076 }
1077 fp_mysql_free_result( result );
1078
1079 sql = "SELECT gid, gname, gdesc FROM " + dbprefix + "_vpaccount_groups ";
1080 sql += criteria2str( cri );
1081 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1082 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1083 return RES_DB_QUERY_ERROR;
1084 }
1085
1086 result = fp_mysql_use_result( mysql ) ;
1087 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){
1088 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1089 }
1090 fp_mysql_free_result( result );
1091 *gids = dst;
1092
1093 return RES_OK;
1094 */
1095 }
1096
1097 /**
1098 *
1099 * ?違???若??膊∞????ID????緇?????
1100 *
1101 * @param sid ?祉???激?с??D
1102 * @param gid ???????????違???若????ID?ф??絎?????
1103 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
1104 * @param uids 膊∞??????ID???????????????????ゃ?潟??/span>
1105 * @param uidsLen uids???????膣???/span>
1106 * @return RES_OK
1107 * @return RES_DB_NOT_INITIALIZED
1108 * @return RES_NO_SUCH_SESSION
1109 * @return RES_DB_QUERY_ERROR
1110 * @return RES_ERROR
1111 *
1112 */
1113 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
1114 {
1115 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1116 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1117
1118 string sql;
1119 MYSQL_RES* result;
1120 MYSQL_ROW row;
1121 userid_t* dst = 0;
1122
1123 sql = "SELECT uid FROM " + dbprefix + "_vpaccount_groups_users_link ";
1124 sql += " WHERE is_admin=1";
1125 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1126 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1127 return RES_DB_QUERY_ERROR;
1128 }
1129
1130 result = fp_mysql_store_result( mysql );
1131 if( result == NULL ){
1132 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1133 return RES_DB_QUERY_ERROR;
1134 }
1135
1136 *uidsLen = fp_mysql_num_rows( result );
1137 dst = new userid_t[ *uidsLen ];
1138 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){
1139 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1140 }
1141 fp_mysql_free_result( result );
1142 *uids = dst;
1143
1144 return RES_OK;
1145 }
1146
1147 /**
1148 *
1149 * ?違???若????絮????若?九????/span>
1150 *
1151 * @param
1152 * @return
1153 *
1154 */
1155 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
1156 {
1157 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1158 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1159 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
1160 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1161
1162 string sql;
1163
1164 sql = "DELETE FROM " + dbprefix + "_vpaccount_groups_users_link ";
1165 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
1166 sql += " AND uid=" + string( unsignedIntToString( uid ) );
1167 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1168 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1169 return RES_DB_QUERY_ERROR;
1170 }
1171 return RES_OK;
1172 }
1173
1174 /**
1175 *
1176 * ?違???若????絮????若?区申??
1177 *
1178 * @param sid ?祉???激?с??D
1179 * @param gid ??絮????違???若????D
1180 * @param uid ??絮??????????若?吟??D
1181 * @param admin 膊∞????罔?????筝?????????true
1182 * @return RES_OK
1183 * @return RES_DB_NOT_INITIALIZED
1184 * @return RES_NO_SUCH_SESSION
1185 * @return RES_DB_QUERY_ERROR
1186 * @return RES_ERROR
1187 *
1188 */
1189 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin )
1190 {
1191 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1192 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1193 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
1194 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1195
1196 string sql;
1197 MYSQL_RES* result;
1198 MYSQL_ROW row;
1199 groupid_t* dst = 0;
1200 result_t res;
1201
1202 //?<?潟???若??菴遵??
1203 sql = "INSERT INTO " + dbprefix + "_vpaccount_groups_users_link ( gid, uid, is_admin ) VALUES (";
1204 sql += string( unsignedIntToString( gid ) ) + ", ";
1205 sql += string( unsignedIntToString( uid ) ) + ", ";
1206 sql += string( admin ? "1" : "0" ) + ") ";
1207 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1208 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1209 return RES_DB_QUERY_ERROR;
1210 }
1211 return RES_OK;
1212 }
1213
1214 /**
1215 *
1216 * ?違???若????絮????若?九??
1217 *
1218 * @param
1219 * @return
1220 *
1221 */
1222 result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
1223 {
1224 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1225 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1226 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1227
1228 string sql;
1229 MYSQL_RES* result;
1230 MYSQL_ROW row;
1231 userid_t* dst = 0;
1232 int len = 0;
1233
1234 //?<?潟???惹?違??羆??????<?≪??∈篆?
1235 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups_users_link ";
1236 sql += " WHERE gid=" + string( unsignedIntToString( gid ) );
1237 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1238 fprintf( stderr, "%s\n", sql.c_str( ) );
1239 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1240 return RES_DB_QUERY_ERROR;
1241 }
1242 result = fp_mysql_store_result( mysql ) ;
1243 if( row = fp_mysql_fetch_row(result) ){
1244 len = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1245 dst = new userid_t[ len ];
1246 }else{
1247 fp_mysql_free_result( result );
1248 return RES_ERROR;
1249 }
1250 fp_mysql_free_result( result );
1251
1252 sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link ";
1253 sql += " WHERE gid=" + string( unsignedIntToString( gid ) );
1254 sql += " " + string( criteria2str( cri ) );
1255 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1256 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1257 delete[] dst;
1258 *uidsLen = 0;
1259 return RES_DB_QUERY_ERROR;
1260 }
1261 *uidsLen = 0;
1262 result = fp_mysql_use_result( mysql ) ;
1263 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < len ; i++ ){
1264 dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" );
1265 ( *uidsLen )++;
1266 }
1267 while( row = fp_mysql_fetch_row(result) );
1268 fp_mysql_free_result( result );
1269 *uids = dst;
1270 return RES_OK;
1271 }
1272
1273 /**
1274 *
1275 * ?違???若????????/span>
1276 *
1277 * @param
1278 * @return RES_OK
1279 * @return RES_DB_QUERY_ERROR
1280 * @return RES_NO_SUCH_SESSION
1281 * @return RES_DB_NOT_INITIALIZED
1282 *
1283 */
1284 result_t deleteGroup( sessionid_t sid, groupid_t gid )
1285 {
1286 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1287 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1288
1289 string sql;
1290 sql = "DELETE FROM " + dbprefix + "_vpaccount_groups ";
1291 sql += "WHERE gid = " + string( unsignedIntToString( gid ) );
1292 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1293 fprintf( stderr, "%s\n", sql.c_str( ) );
1294 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1295 return RES_DB_QUERY_ERROR;
1296 }
1297 return RES_OK;
1298 }
1299
1300 /**
1301 *
1302 * ?違???若???脂??
1303 * ?違???若???????宴?????若?帥???若?鴻????蚊???障??.
1304 * ?脂?蚊?????違???若?????綽??????違???若??ID??gid???主????障??.
1305 *
1306 * @param sid ?祉???激?с??D
1307 * @param group ?脂?蚊???????違???若????????/span>
1308 * @param gid ?脂?蚊?????違???若?????綽??????違???若??ID
1309 * @return RES_OK
1310 * @return RES_DB_NOT_INITIALIZED
1311 * @return RES_NO_SUCH_SESSION
1312 * @return RES_DB_QUERY_ERROR
1313 *
1314 */
1315 result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid )
1316 {
1317 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1318 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1319
1320 string sql;
1321 sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES (";
1322 sql += "'" + string( addSlashes( group -> getGname( ) ) ) + "', ";
1323 sql += "'" + string( addSlashes( group -> getDesc( ) ) ) + "' )";
1324 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1325 fprintf( stderr, "%s\n", sql.c_str( ) );
1326 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1327 return RES_DB_QUERY_ERROR;
1328 }
1329 *gid = fp_mysql_insert_id( mysql );
1330 return RES_OK;
1331 }
1332
1333 /**
1334 *
1335 * ?違???若?????宴??紊??眼????
1336 *
1337 * @param sid ?祉???激?с??D
1338 * @param group ?違?????違???若??????/span>
1339 * @return RES_OK
1340 * @return RES_ERROR
1341 * @return RES_DB_NOT_INITIALIZED
1342 * @return RES_NO_SUCH_SESSION
1343 * @return RES_NO_SUCH_GROUP
1344 * @return RES_DB_QUERY_ERROR
1345 *
1346 */
1347 result_t updateGroup( sessionid_t sid, const group_t* group )
1348 {
1349 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1350 if( group == NULL ) return RES_ERROR;
1351 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1352 if( !gidExists( group -> getGID( ) ) ) return RES_NO_SUCH_GROUP;
1353
1354 string sql;
1355 sql = "UPDATE " + dbprefix + "_vpaccount_groups SET ";
1356 sql += "gname='" + string( addSlashes( group -> getGname( ) ) ) + "', ";
1357 sql += "gdesc='" + string( addSlashes( group -> getDesc( ) ) ) + "' ";
1358 sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) );
1359 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1360 fprintf( stderr, "%s\n", sql.c_str( ) );
1361 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1362 return RES_DB_QUERY_ERROR;
1363 }
1364 return RES_OK;
1365 }
1366
1367 /**
1368 *
1369 * ?違???若?????怨??
1370 *
1371 * @param sid ?祉???激?с??D
1372 * @param gid ??緇????????違???若????ID
1373 * @param group ??緇??????違???若?????宴???≪?????鴻???吾??莨若?????ゃ?潟??/span>
1374 * @return RES_OK
1375 * @return RES_DB_NOT_INITIALIZED
1376 * @return RES_NO_SUCH_SESSION
1377 * @return RES_NO_SUCH_GROUP
1378 * @return RES_DB_QUERY_ERROR
1379 *
1380 */
1381 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
1382 {
1383 int len;
1384 static criteria c;
1385 result_t res = getGroups( sid, &gid, 1, &c, group, &len );
1386 if( len == 0 ) return RES_NO_SUCH_GROUP;
1387 return res;
1388 }
1389
1390 /**
1391 *
1392 * 茲??違???違???若?????宴??筝?綺?????????.
1393 *
1394 * @param sid ?祉???激?с??D
1395 * @param gids ??緇????????違???若????ID??????
1396 * @param gidsLen gids???????膣???/span>
1397 * @param cri 腟???????膀??駕??純?若???>散????絎?
1398 * @param groups ??緇?腟??????違???若?????宴?????????≪?????鴻???吾??莨若?????ゃ?潟??/span>
1399 * @param groupsLen ??緇?腟????????????膣???/span>
1400 * @return RES_OK
1401 * @return RES_DB_NOT_INITIALIZED
1402 * @return RES_NO_SUCH_SESSION
1403 * @return RES_DB_QUERY_ERROR
1404 *
1405 */
1406 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen )
1407 {
1408 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1409 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1410
1411 string sql;
1412 MYSQL_RES* result;
1413 MYSQL_ROW row;
1414 group_t* dst = new group_t[ gidsLen ];
1415
1416 sql += "SELECT gid, gname, gdesc ";
1417 sql += "FROM " + dbprefix + "_vpaccount_groups ";
1418 if( gidsLen > 0 ){
1419 sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) );
1420 for( int i = 1; i < gidsLen; i++ ){
1421 sql += " OR gid=" + string( unsignedIntToString( gids[ i ] ) );
1422 }
1423 }
1424 sql += criteria2str( cri );
1425 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1426 fprintf( stderr, "%s\n", sql.c_str( ) );
1427 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1428 return RES_DB_QUERY_ERROR;
1429 }
1430 result = fp_mysql_use_result( mysql ) ;
1431 *groupsLen=0;
1432 for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < gidsLen ; i++ ){
1433 dst[ i ].setGID( atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ) );
1434 dst[ i ].setGname( row[ 1 ] );
1435 dst[ i ].setDesc( row[ 2 ] );
1436 ( *groupsLen )++;
1437 }
1438 while( row = fp_mysql_fetch_row(result) );
1439 fp_mysql_free_result( result );
1440 *groups = dst;
1441 return RES_OK;
1442 }
1443
1444 /**
1445 *
1446 * ?≪?????若?炊┤???????<??菴???
1447 *
1448 * @param sid ?祉???激?с??D
1449 * @param uid ???????????????若?吟??ID
1450 * @return true 罔???????
1451 * @return false 罔???????
1452 *
1453 */
1454 bool isModerator( sessionid_t sid, userid_t uid )
1455 {
1456 if( mysql == NULL ) return false;
1457 if( !isValidSessionID( sid ) ) return false;
1458 //if( !uidExists( uid ) ) return false;
1459
1460 string sql;
1461 MYSQL_RES* result;
1462 MYSQL_ROW row;
1463 groupid_t* dst = 0;
1464 result_t res;
1465
1466 sql = "SELECT value FROM " + dbprefix + "_vpaccount_config";
1467 sql += " WHERE name='moderator_gid'";
1468 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1469 fprintf( stderr, "%s\n", sql.c_str( ) );
1470 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1471 return false;
1472 }
1473 result = fp_mysql_store_result( mysql ) ;
1474 if( result == NULL ){
1475 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1476 return false;
1477 }
1478 if( row = fp_mysql_fetch_row(result) ){
1479 sql = "SELECT * from " + dbprefix + "_groups_users_link ";
1480 sql += "WHERE groupid=" + string( row[ 0 ] );
1481 sql += " AND uid=" + string( unsignedIntToString( uid ) );
1482 fp_mysql_free_result( result );
1483
1484 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1485 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1486 return false;
1487 }
1488 result = fp_mysql_store_result( mysql );
1489 if( result == NULL ){
1490 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1491 return false;
1492 }
1493 if( !fp_mysql_fetch_row(result) ){
1494 fp_mysql_free_result( result );
1495 return false;
1496 }
1497 fp_mysql_free_result( result );
1498 return true;
1499 }else{
1500 fp_mysql_free_result( result );
1501 return false;
1502 }
1503 }
1504
1505 /**
1506 *
1507 * ???若??D??緇?
1508 *
1509 * @param uname ID????緇??????????若?吟?弱??
1510 * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
1511 * @return RES_ERROR
1512 * @return RES_OK
1513 * @refer result_t
1514 *
1515 */
1516 result_t getUid( const char* uname, userid_t* uid )
1517 {
1518 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1519 if( uname == NULL ) return RES_ERROR;
1520
1521 string sql;
1522 string uname2 = addSlashes( uname );
1523 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
1524 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1525 fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) );
1526 return RES_DB_QUERY_ERROR;
1527 }
1528 MYSQL_RES* result = fp_mysql_store_result( mysql ) ;
1529 MYSQL_ROW row = fp_mysql_fetch_row(result);
1530 if( row ){
1531 *uid = atoi( row[0] != NULL ? row[0] : "" );
1532 fp_mysql_free_result( result );
1533 return RES_OK;
1534 }else{
1535 fp_mysql_free_result( result );
1536 return RES_NO_SUCH_USER;
1537 }
1538 }
1539
1540 /**
1541 *
1542 * ?祉???激?с?潟??篏?????xoops_vpaccount_session???吾??莨若???? sessionid_t??session???????
1543 *
1544 * @param uid xoops_users??id
1545 * @param session sessionid_t???????????????????ゃ?潟?帥??
1546 * @return RES_OK ????
1547 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
1548 */
1549 static result_t addSession( userid_t uid, sessionid_t* session )
1550 {
1551 result_t ret;
1552 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid) values (" +
1553 unsignedIntToString(uid) + ")";
1554 if ( 0 == fp_mysql_query( mysql, sql.c_str() ) ){
1555 *session = (int)fp_mysql_insert_id(mysql);
1556 ret = RES_OK;
1557 }
1558 else {
1559 ret = RES_DB_QUERY_ERROR;
1560 }
1561 return ret;
1562 }
1563
1564
1565 /**
1566 *
1567 * ???違?ゃ?活?荐若???祉???激?с?割???
1568 *
1569 * @param uname ???違?ゃ?喝??
1570 * @param passwd ???鴻???若??
1571 * @param session sessionid_t???????????????????ゃ?潟?帥??
1572 * @return RES_OK ???違?ゃ?恰??????session??essionid_t???吾??莨若??????<br>
1573 * @return RES_LOGIN_FAILURE uname?障????asswd???医幻<br>
1574 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
1575 *
1576 */
1577 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
1578 {
1579 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1580
1581 result_t ret;
1582 string sql;
1583
1584 // uname, passwd -> uid
1585 string escUname = addSlashes( uname );
1586 string escPasswd = addSlashes( passwd );
1587 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
1588 if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){
1589 MYSQL_RES* result = fp_mysql_store_result( mysql );
1590 if( result ){
1591 MYSQL_ROW row = fp_mysql_fetch_row(result);
1592 if( row ){
1593 userid_t uid = atoi( row[0] != NULL ? row[0] : "" );
1594 ret = addSession( uid, session );
1595 }else{
1596 ret = RES_LOGIN_FAILURE;
1597 }
1598 fp_mysql_free_result( result );
1599 }else {
1600 ret = RES_DB_QUERY_ERROR;
1601 }
1602 }else{
1603 ret = RES_DB_QUERY_ERROR;
1604 }
1605
1606 return ret;
1607 }
1608
1609 /**
1610 *
1611 * ???違?≪???????祉???激?с?括?篋?
1612 *
1613 * @param sid session id
1614 * @return ????
1615 *
1616 */
1617 void logoutUser( sessionid_t sid )
1618 {
1619 if( mysql == NULL ) return; // RES_DB_NOT_INITIALIZED;
1620
1621 result_t ret;
1622 string sql;
1623
1624 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
1625 if ( 0 == fp_mysql_query( mysql, sql.c_str() ) ){
1626 if ( fp_mysql_affected_rows(mysql) == 1 ){
1627 // ???違?≪????????
1628 }
1629 else {
1630 // sid???≦??/span>
1631 }
1632 }
1633 else {
1634 // DB????????筝?????????/span>
1635 }
1636 }
1637
1638 /**
1639 *
1640 * ?祉???激?с?潟?????.<br>
1641 * XOOPS??ession???若????????蚊??????sess_id?????ess_id??膈???????
1642 * ?逸?session_t??篏?????????
1643 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
1644 *
1645 * @param sessionid xoops??ession_id
1646 * @param uid xoops_users??id
1647 * @param session sessionid_t???????????????????ゃ?潟?帥??
1648 * @return RES_OK ??????<br>
1649 * @return RES_ERROR
1650 * @return RES_DB_QUERY_ERROR
1651 *
1652 */
1653 result_t createSession( const char* sess_id, userid_t uid, sessionid_t* session )
1654 {
1655 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1656
1657 result_t ret;
1658 string sql;
1659
1660 string escSess_id = addSlashes(sess_id);
1661 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSess_id + "'";
1662 if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){
1663 MYSQL_RES* result = fp_mysql_store_result( mysql );
1664 if( result ){
1665 MYSQL_ROW row = fp_mysql_fetch_row(result);
1666 if( row ){
1667 ret = addSession( uid, session );
1668 }else{
1669 ret = RES_ERROR;
1670 }
1671 fp_mysql_free_result( result );
1672 }else {
1673 ret = RES_DB_QUERY_ERROR;
1674 }
1675 }else{
1676 ret = RES_DB_QUERY_ERROR;
1677 }
1678
1679 return ret;
1680 }
1681
1682 /**
1683 *
1684 * ?祉???激?с?潟???膣違??session_t?у??????.<br>
1685 *
1686 * @param sid ?祉???激?с??D
1687 * @param ppsession sessionid_t*???????????????????ゃ?潟?帥??
1688 * @return RES_OK ??????freeResult(*ppsession)??綽?荀???<br>
1689 * @return RES_NO_SUCH_SESSION<br>
1690 * @return RES_DB_QUERY_ERROR<br>
1691 * @return RES_DB_NOT_INITIALIZED
1692 *
1693 */
1694 result_t getSession( sessionid_t sid, const session_t** ppsession )
1695 {
1696 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1697
1698 result_t ret;
1699 string sql;
1700
1701 sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix +
1702 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sid);
1703 if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){
1704 MYSQL_RES* result = fp_mysql_store_result( mysql );
1705 if( result ){
1706 MYSQL_ROW row = fp_mysql_fetch_row(result);
1707 if( row ){
1708 session_t *p = new session[1];
1709 p->setSessionID(sid);
1710 p->setUserID(atoi( row[1] != NULL ? row[1] : "" ));
1711 p->setDate(atoi( row[2] != NULL ? row[2] : "" ));
1712 *ppsession = p;
1713 ret = RES_OK;
1714 }else{
1715 ret = RES_NO_SUCH_SESSION;
1716 }
1717 fp_mysql_free_result( result );
1718 }else {
1719 ret = RES_DB_QUERY_ERROR;
1720 }
1721 }else{
1722 ret = RES_DB_QUERY_ERROR;
1723 }
1724
1725 return ret;
1726 }
1727
1728 /**
1729 *
1730 * ?祉???激?с?潟???綵??с?????с????????.
1731 *
1732 * @param sid ???с??????????session
1733 * @return true 罩e?
1734 * @return false 筝?罩?/span>
1735 *
1736 */
1737 bool isValidSessionID( sessionid_t sid )
1738 {
1739 if( mysql == NULL ) return false;
1740
1741 bool ret;
1742 string sql;
1743 string sidstr;
1744 char buf[ 12 ];
1745 snprintf( buf, 12, "%d", sid );
1746
1747 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
1748 if( fp_mysql_query( mysql, sql.c_str( ) ) ){
1749 return false;
1750 }
1751 MYSQL_RES* result = fp_mysql_store_result( mysql );
1752 if( result ){
1753 MYSQL_ROW row = fp_mysql_fetch_row(result);
1754 if( row ){
1755 ret = true;
1756 }else{
1757 ret = false;
1758 }
1759 fp_mysql_free_result( result );
1760 }
1761 return ret;
1762 }
1763
1764 void freeAccount( const account_t* ptr ){ delete[] ( account_t* )ptr; }
1765 void freeGroup( const group_t* ptr ){ delete[] ( group_t* )ptr; }
1766 void freeSession( const session_t* ptr ){ delete[] ( session_t* )ptr; }
1767 void freeUID( const int* ptr ){ delete[] ( int* )ptr; }
1768 void freeGID( const int* ptr ){ delete[] ( int* )ptr; }
1769
1770 static string errstr;
1771 const char* getLastErrorString()
1772 {
1773 return errstr.c_str( );
1774 }
1775
1776 void setLastErrorString( const char* str )
1777 {
1778 errstr = str;
1779 }

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