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.23 - (hide annotations) (download) (as text)
Sat Dec 4 09:21:10 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.22: +5 -2 lines
File MIME type: text/x-c++src
。ヲvp_config 「ェ vpaccount_config.

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

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