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.22 - (hide annotations) (download) (as text)
Fri Dec 3 07:17:21 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.21: +7 -2 lines
File MIME type: text/x-c++src
isModeratorでアクセスするデータベーステーブル名を修正.

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

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