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.17 - (hide annotations) (download) (as text)
Sat Nov 27 09:35:49 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.16: +96 -8 lines
File MIME type: text/x-c++src
isActivatedを定義.
activateを定義.
dumpUidを定義.

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

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