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.21 - (hide annotations) (download) (as text)
Wed Dec 1 10:28:58 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.20: +13 -9 lines
File MIME type: text/x-c++src
DB・ォ・鬣猯セ、ホハムケケ、ヒネシ、ヲス、タオ
    institute -> division
    organizaion -> company_name

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

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