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.12 - (show annotations) (download) (as text)
Fri Nov 26 09:45:28 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.11: +90 -10 lines
File MIME type: text/x-c++src
getAccountを定義.

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

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