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.14 - (show 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 /*
2 *
3 * $Revision: 1.13 $
4 * $Log: commonal.cc,v $
5 * Revision 1.13 2004/11/27 00:35:39 youi
6 * getAccounts??絎?臂?
7 * getAccount??篆??鐚???????etAccounts???若?喝?冴??.
8 * criteria2str??絎?臂?
9 *
10 * Revision 1.12 2004/11/26 09:45:28 youi
11 * getAccount??絎?臂?
12 *
13 * Revision 1.11 2004/11/26 08:16:26 aga
14 * ??etSession, loginUser, createSession, freeResult(const session_t*) 篆??.
15 *
16 * Revision 1.10 2004/11/26 07:57:42 youi
17 * updateAccount, deleteAccount??絎?臂?
18 * mysql_query紊掩??????tderr?吾?????若?潟?若?????????若?<???祉?若?吾???阪??.
19 *
20 * Revision 1.9 2004/11/26 07:38:02 aga
21 * ??AILUE -> FAILURE.
22 *
23 * Revision 1.8 2004/11/26 06:36:55 aga
24 * ??reateSession, getSession ??篏???.
25 *
26 * Revision 1.7 2004/11/26 04:51:47 youi
27 * dbprefix??絎?臂?????.
28 * insertAccount??絎?臂?????.
29 * isValidSessionID??絎?臂?????.
30 *
31 * Revision 1.6 2004/11/26 04:35:55 aga
32 * ??oginUser(), logoutUser()??篏???.
33 *
34 * Revision 1.5 2004/11/26 01:08:25 aga
35 * ??ddSlashes()篏???.
36 *
37 * Revision 1.4 2004/11/25 12:14:29 youi
38 * getUid????????絎?臂?????.
39 *
40 * Revision 1.3 2004/11/25 11:13:59 youi
41 * getLastErrorString/setLastErrorString??絎?臂?
42 *
43 * Revision 1.2 2004/11/25 08:55:19 youi
44 * 綣??違??????篆??.
45 * freeResult??菴遵??.
46 *
47 * Revision 1.1 2004/11/25 05:14:58 youi
48 * initial version
49 *
50 *
51 */
52 #include <stdio.h>
53 #include <stdlib.h>
54 #include <string.h>
55 #include <mysql.h>
56 #include <errmsg.h>
57 #include <string>
58 using namespace std;
59
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
68 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
69 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
70
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 /**
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 }
107
108 if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){
109 sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) )
110 + ", " + string( intToString( cri -> getLimitRows( ) ) );
111 }
112 return sql;
113 }
114
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 dbprefix = prefix;
134
135 // ????????・膓?
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 return RES_OK;
147 }
148
149
150 /**
151 *
152 * Platform???若?倶?粋??倶????緇?
153 *
154 * @param
155 * @return
156 *
157 */
158 bool isActivated( sessionid_t sid, userid_t uid )
159 {
160 return false;
161 }
162
163 /**
164 *
165 * Platform???若?倶?粋??倶??紊???/span>
166 *
167 * @param
168 * @return
169 *
170 */
171 result_t activate( sessionid_t sid, userid_t uid, bool activate )
172 {
173 return RES_ERROR;
174 }
175
176 /**
177 *
178 * ?≪?????潟????/span>
179 *
180 * @param
181 * @return
182 *
183 */
184 int getAccountCount( sessionid_t sid )
185 {
186 return 0;
187 }
188
189 /**
190 *
191 * ?≪?????潟??????/span>
192 *
193 * @param
194 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
195 *
196 */
197 result_t deleteAccount( sessionid_t sid, userid_t uid )
198 {
199 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 }
218
219 /**
220 *
221 * ?≪?????潟?????怨??
222 *
223 * @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 *
228 */
229 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc )
230 {
231 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 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
254
255 string sql;
256 MYSQL_RES* result;
257 MYSQL_ROW row;
258 account_t* dst = new account_t[ uidsLen ];
259
260 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 }
266 sql += " ) ";
267 sql += criteria2str( cri );
268 if( mysql_query( mysql, sql.c_str( ) ) ){
269 fprintf( stderr, "%s\n", sql.c_str( ) );
270 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
271 return RES_DB_QUERY_ERROR;
272 }
273 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 }
320 mysql_free_result( result );
321 *accounts = dst;
322 return RES_OK;
323 }
324
325 /**
326 *
327 * ?≪?????潟???脂??/span>
328 *
329 * @param sid ?祉???激?с??/span>
330 * @param account ?脂?蚊?????≪?????潟??????/span>
331 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
332 *
333 */
334 result_t insertAccount( sessionid_t sid, const account_t* account )
335 {
336 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
337
338 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 fprintf( stderr, "%s\n", sql.c_str( ) );
387 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
388 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 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
399 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 fprintf( stderr, "%s\n", sql.c_str( ) );
420 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
421 //xoops_users??nsert???????潟?若???????ゃ????
422 sql = "DELETE FROM " + dbprefix + "_users where uid=";
423 snprintf( buf, 12, "%d", uid );
424 sql += string( buf );
425 mysql_query( mysql, sql.c_str( ) );
426 return RES_DB_QUERY_ERROR;
427 }
428
429 return RES_OK;
430 }
431
432 /**
433 *
434 * ?≪?????潟??紊???/span>
435 *
436 * @param
437 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
438 *
439 */
440 result_t updateAccount( sessionid_t sid, const account_t* account )
441 {
442 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 }
517
518 /**
519 *
520 * ???若??D筝?荀?/span>
521 *
522 * @param
523 * @return
524 *
525 */
526 result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen )
527 {
528 return RES_ERROR;
529 }
530
531 /**
532 *
533 * ?違???若????/span>
534 *
535 * @param
536 * @return
537 *
538 */
539 int getGroupCount( sessionid_t sid )
540 {
541 return 0;
542 }
543
544 /**
545 *
546 * ??絮??違???若??筝?荀у??
547 *
548 * @param
549 * @return
550 *
551 */
552 result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen )
553 {
554 return RES_ERROR;
555 }
556
557 /**
558 *
559 * ?違???若??膊∞??罔????????
560 *
561 * @param
562 * @return
563 *
564 */
565 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
566 {
567 return RES_ERROR;
568 }
569
570 /**
571 *
572 * ?違???若??ID筝?荀?/span>
573 *
574 * @param
575 * @return
576 *
577 */
578 result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen )
579 {
580 return RES_ERROR;
581 }
582
583 /**
584 *
585 * ?違???若??膊∞????ID??緇?
586 *
587 * @param
588 * @return
589 *
590 */
591 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
592 {
593 return RES_ERROR;
594 }
595
596 /**
597 *
598 * ?違???若????絮????若?九????/span>
599 *
600 * @param
601 * @return
602 *
603 */
604 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
605 {
606 return RES_ERROR;
607 }
608
609 /**
610 *
611 * ?違???若????絮????若?区申??
612 *
613 * @param
614 * @return
615 *
616 */
617 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
618 {
619 return RES_ERROR;
620 }
621
622 /**
623 *
624 * ?違???若????絮????若?九??
625 *
626 * @param
627 * @return
628 *
629 */
630 result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
631 {
632 return RES_ERROR;
633 }
634
635 /**
636 *
637 * ?違???若????????/span>
638 *
639 * @param
640 * @return
641 *
642 */
643 result_t deleteGroup( sessionid_t sid, groupid_t gid )
644 {
645 return RES_ERROR;
646 }
647
648 /**
649 *
650 * ?違???若?????脂??/span>
651 *
652 * @param
653 * @return
654 *
655 */
656 result_t insertGroup( sessionid_t sid, const group_t* group )
657 {
658 return RES_ERROR;
659 }
660
661 /**
662 *
663 * ?違???若???????/span>
664 *
665 * @param
666 * @return
667 *
668 */
669 result_t updateGroup( sessionid_t sid, const group_t* group )
670 {
671 return RES_ERROR;
672 }
673
674 /**
675 *
676 * ?違???若?????怨??
677 *
678 * @param
679 * @return
680 *
681 */
682 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
683 {
684 return RES_ERROR;
685 }
686
687 /**
688 *
689 * ?違???若?????怨??
690 *
691 * @param
692 * @return
693 *
694 */
695 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen )
696 {
697 return RES_ERROR;
698 }
699
700 /**
701 *
702 * ?≪?????若?炊┤???????
703 *
704 * @param
705 * @return
706 *
707 */
708 bool isModerator( sessionid_t sid, userid_t uid )
709 {
710 return RES_ERROR;
711 }
712
713 /**
714 *
715 * ???若??D??緇?
716 *
717 * @param uname ID????緇??????????若?吟?弱??
718 * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
719 * @return RES_ERROR | RES_OK
720 * @refer result_t
721 *
722 */
723 result_t getUid( const char* uname, userid_t* uid )
724 {
725 string sql;
726
727 if( uname == NULL ) return RES_ERROR;
728
729 string uname2 = addSlashes( uname );
730 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
731 if( mysql_query( mysql, sql.c_str( ) ) ){
732 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
733 return RES_DB_QUERY_ERROR;
734 }
735 MYSQL_RES* result = mysql_store_result( mysql ) ;
736 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 }
746
747 /**
748 *
749 * ?祉???激?с?潟??篏?????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 * ???違?ゃ?活?荐若???祉???激?с?割???
776 *
777 * @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 *
784 */
785 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
786 {
787 result_t ret;
788 string sql;
789
790 // uname, passwd -> uid
791 string escUname = addSlashes( uname );
792 string escPasswd = addSlashes( passwd );
793 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
794 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 userid_t uid = atoi(row[0]);
800 ret = addSession( uid, 0, session );
801 }else{
802 ret = RES_LOGIN_FAILURE;
803 }
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 }
814
815 /**
816 *
817 * ???違?≪???????祉???激?с?括?篋?
818 *
819 * @param sid session id
820 * @return ????
821 *
822 */
823 void logoutUser( sessionid_t sid )
824 {
825 result_t ret;
826 string sql;
827
828 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
842 /**
843 *
844 * ?祉???激?с?潟?????.<br>
845 * XOOPS??ession???若????????蚊??????sess_id?????essionid??膈???????
846 * ?逸?session_t??篏?????????
847 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
848 *
849 * @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 *
857 */
858 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
859 {
860 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 return ret;
883 }
884
885 /**
886 *
887 * ?祉???激?с?潟???膣違??session_t?у??????.<br>
888 *
889 * @param sess_id
890 * @param session
891 * @return
892 *
893 */
894 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
895 {
896 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 session_t *p = new session[1];
907 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 return ret;
925 }
926
927 /**
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 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
944 if( mysql_query( mysql, sql.c_str( ) ) ){
945 return false;
946 }
947 MYSQL_RES* result = mysql_store_result( mysql ) ;
948 MYSQL_ROW row = mysql_fetch_row(result);
949 if( row ){
950 return true;
951 }else{
952 return false;
953 }
954 }
955
956 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
961 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