Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.15 - (show annotations) (download) (as text)
Sat Nov 27 02:22:22 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.14: +8 -1 lines
File MIME type: text/x-c++src
・initializeDB前にaddSlashes()を呼ぶと落ちるのを修正.

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

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