Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/commonal.cc

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


Revision 1.30 - (hide annotations) (download) (as text)
Sat Dec 18 10:24:54 2004 UTC (19 years, 3 months ago) by youi
Branch: MAIN
Changes since 1.29: +5 -2 lines
File MIME type: text/x-c++src
IMPORT_MYSQLDLLを定義したとき,MYSQLのDLLを動的リンクするプロトタイプ宣言が
有効になるように修正した.

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

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