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.14 - (hide annotations) (download) (as text)
Sat Nov 27 01:07:31 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.13: +11 -5 lines
File MIME type: text/x-c++src
criteria2str: LIMITとORDER BYの順番を入れ替えた.

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

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