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.18 - (hide annotations) (download) (as text)
Tue Nov 30 05:46:32 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.17: +13 -11 lines
File MIME type: text/x-c++src
・sessionからremoteHostを削除.

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

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