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.19 - (hide annotations) (download) (as text)
Tue Nov 30 06:40:11 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.18: +375 -37 lines
File MIME type: text/x-c++src
関数を追加(gidExists, uidExists)
getGroupCountを定義.
getGroupsByUidを定義.
isGroupAdminを修正.
dumpGroupAdminsを定義.
deleteMemberを定義.
insertMemberを定義.
getMembersを定義.
isModeratorを定義.

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

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