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.25 - (show annotations) (download) (as text)
Mon Dec 6 07:24:33 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.24: +19 -11 lines
File MIME type: text/x-c++src
insertAccount, insertGroup:
    新規追加した情報に対応するユーザID,グループIDを第三引数に書き込む.

1 /*
2 *
3 * $Revision: 1.24 $
4 * $Log: commonal.cc,v $
5 * Revision 1.24 2004/12/06 01:45:50 aga
6 * ?祉?潟?<?潟???ゃ??.
7 * ?脂???上???篆??.
8 *
9 * Revision 1.23 2004/12/04 09:21:10 aga
10 * ??p_config ?? vpaccount_config.
11 *
12 * Revision 1.22 2004/12/03 07:17:21 youi
13 * isModerator?с?≪???祉?鴻???????若?帥???若?鴻???若????????篆??.
14 *
15 * Revision 1.21 2004/12/01 10:28:58 youi
16 * DB????????????眼??軸??篆??
17 * institute -> division
18 * organizaion -> company_name
19 *
20 * Revision 1.20 2004/12/01 04:37:04 youi
21 * freeResult: unsigned int* ?? int* ?娯信罩?
22 * ?潟?<?潟???????∽?違???????菴処?.
23 *
24 * Revision 1.19 2004/11/30 06:40:11 youi
25 * ?∽?違??菴遵??(gidExists, uidExists)
26 * getGroupCount??絎?臂?
27 * getGroupsByUid??絎?臂?
28 * isGroupAdmin??篆??.
29 * dumpGroupAdmins??絎?臂?
30 * deleteMember??絎?臂?
31 * insertMember??絎?臂?
32 * getMembers??絎?臂?
33 * isModerator??絎?臂?
34 *
35 * Revision 1.18 2004/11/30 05:46:32 aga
36 * ??ession????remoteHost??????
37 *
38 * Revision 1.17 2004/11/27 09:35:49 youi
39 * isActivated??絎?臂?
40 * activate??絎?臂?
41 * dumpUid??絎?臂?
42 *
43 * Revision 1.16 2004/11/27 06:29:29 youi
44 * getAccountCount??絎?臂?
45 * dumpGids??絎?臂?
46 * insertGroup, deleteGroup, updateGroup??絎?臂?
47 * getGroup, getGroups??絎?臂?
48 * ???若?帥???若?劫?????????弱?冴?????鐚?RES_DB_NOT_INITIALIZED??菴????????????∽?違??申??
49 * (???綽????∽?違??罧??c??????)
50 *
51 * Revision 1.15 2004/11/27 02:22:22 aga
52 * ??nitializeDB????ddSlashes()???若?吟???純?<??????篆??.
53 *
54 * Revision 1.14 2004/11/27 01:07:31 youi
55 * criteria2str: LIMIT??RDER BY?????????ャ???帥????.
56 *
57 * Revision 1.13 2004/11/27 00:35:39 youi
58 * getAccounts??絎?臂?
59 * getAccount??篆??鐚???????etAccounts???若?喝?冴??.
60 * criteria2str??絎?臂?
61 *
62 * Revision 1.12 2004/11/26 09:45:28 youi
63 * getAccount??絎?臂?
64 *
65 * Revision 1.11 2004/11/26 08:16:26 aga
66 * ??etSession, loginUser, createSession, freeResult(const session_t*) 篆??.
67 *
68 * Revision 1.10 2004/11/26 07:57:42 youi
69 * updateAccount, deleteAccount??絎?臂?
70 * mysql_query紊掩??????tderr?吾?????若?潟?若?????????若?<???祉?若?吾???阪??.
71 *
72 * Revision 1.9 2004/11/26 07:38:02 aga
73 * ??AILUE -> FAILURE.
74 *
75 * Revision 1.8 2004/11/26 06:36:55 aga
76 * ??reateSession, getSession ??篏???.
77 *
78 * Revision 1.7 2004/11/26 04:51:47 youi
79 * dbprefix??絎?臂?????.
80 * insertAccount??絎?臂?????.
81 * isValidSessionID??絎?臂?????.
82 *
83 * Revision 1.6 2004/11/26 04:35:55 aga
84 * ??oginUser(), logoutUser()??篏???.
85 *
86 * Revision 1.5 2004/11/26 01:08:25 aga
87 * ??ddSlashes()篏???.
88 *
89 * Revision 1.4 2004/11/25 12:14:29 youi
90 * getUid????????絎?臂?????.
91 *
92 * Revision 1.3 2004/11/25 11:13:59 youi
93 * getLastErrorString/setLastErrorString??絎?臂?
94 *
95 * Revision 1.2 2004/11/25 08:55:19 youi
96 * 綣??違??????篆??.
97 * freeResult??菴遵??.
98 *
99 * Revision 1.1 2004/11/25 05:14:58 youi
100 * initial version
101 *
102 *
103 */
104 #include <stdio.h>
105 #include <stdlib.h>
106 #include <string.h>
107 #include <mysql.h>
108 #include <errmsg.h>
109 #include <string>
110 using namespace std;
111
112 #include "common.h"
113 #include "account.h"
114 #include "group.h"
115 #include "session.h"
116 #include "criteria.h"
117 #include "commonal.h"
118
119
120 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
121 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
122
123 /**
124 *
125 * php??ddslashes????????
126 *
127 * @param addslashes???鴻????絖?????NULL??絎?筝?????
128 * @return addslashes????????絖???
129 */
130 string addSlashes( const char *str )
131 {
132 if ( mysql == NULL ){
133 string s;
134 return s;
135 }
136 int len = strlen(str);
137 char *buf = new char[len*2+1];
138 int bufLen = mysql_real_escape_string( mysql, buf, str, len );
139 string s( buf, bufLen );
140 return s;
141 }
142
143 /**
144 *
145 * gid??????????с????
146 * DB???≪???祉?劫け????????false??????鐚?/span>
147 *
148 * @param gid ???с??????????GID
149 * @return true 絖???????
150 * @return false 絖?????????
151 *
152 */
153 static bool gidExists( groupid_t gid )
154 {
155 string sql;
156 MYSQL_RES* result;
157 MYSQL_ROW row;
158
159 sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups ";
160 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
161 if( mysql_query( mysql, sql.c_str( ) ) ){
162 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
163 return false;
164 }
165 result = mysql_store_result( mysql ) ;
166 if( !mysql_fetch_row(result) ){
167 mysql_free_result( result );
168 return false;
169 }
170 mysql_free_result( result );
171 return true;
172 }
173
174
175 /**
176 *
177 * Platform???若?倶???宴??id??絖??????????????с????
178 * DB???≪???祉?劫け????????false??????鐚?/span>
179 *
180 * @param uid ???с??????????UID
181 * @return true 絖???????
182 * @return false 絖?????????
183 *
184 */
185 static bool uidExists( userid_t uid )
186 {
187 string sql;
188 MYSQL_RES* result;
189 MYSQL_ROW row;
190
191 sql = "SELECT * FROM " + dbprefix + "_vpaccount_users ";
192 sql += "WHERE uid=" + string( unsignedIntToString( uid ) );
193 if( mysql_query( mysql, sql.c_str( ) ) ){
194 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
195 return false;
196 }
197 result = mysql_store_result( mysql ) ;
198 if( !mysql_fetch_row(result) ){
199 mysql_free_result( result );
200 return false;
201 }
202 mysql_free_result( result );
203 return true;
204 }
205
206
207 /**
208 *
209 * criteria ?? SQL?????????
210 *
211 *
212 *
213 */
214 string criteria2str( criteria* cri )
215 {
216 string sql;
217
218 const orderby* odrby = cri -> headOrderBy( );
219 if( odrby != 0 ){
220 sql += " ORDER BY " + string( odrby -> getColumn( ) );
221 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
222 while( ( odrby = cri -> nextOrderBy( ) ) != 0 ){
223 sql += ", " + string( odrby -> getColumn( ) );
224 sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " ";
225 }
226 }
227
228 if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){
229 sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) )
230 + ", " + string( intToString( cri -> getLimitRows( ) ) );
231 }
232 return sql;
233 }
234
235 /**
236 *
237 * ???若?帥???若?鴻????????
238 *
239 * @param host ???若?帥???若?鴻?????鴻????
240 * @param user ???若?帥???若?鴻???≪???祉?鴻???????若?九??
241 * @param password 筝?荐????若?吟?????鴻???若??
242 * @param dbname ???若?帥???若?鴻??????
243 * @param prefix XOOPS???若?帥???若?鴻???若??????REFIX
244 * @return result_t
245 * @refer result_t
246 */
247 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
248 {
249 // ?≪??・膓?筝???????筝???????/span>
250 if ( mysql != NULL )
251 mysql_close( mysql );
252
253 dbprefix = prefix;
254
255 // ????????・膓?
256 mysql = mysql_init(NULL);
257 if ( mysql == NULL ){
258 return RES_DB_INITIALIZE_ERROR;
259 }
260 char *unix_socket = NULL; // ?
261 uint flag = 0; // ?
262 if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
263 return RES_DB_CONNECT_ERROR;
264 }
265
266 return RES_OK;
267 }
268
269
270 /**
271 *
272 * Platform???若?倶?粋??倶????緇?
273 *
274 * @param
275 * @return
276 *
277 */
278 bool isActivated( sessionid_t sid, userid_t uid )
279 {
280 if( mysql == NULL ) return false;
281 if( !isValidSessionID( sid ) ) return false;
282
283 string sql;
284 MYSQL_RES* result;
285 MYSQL_ROW row;
286
287 sql = "SELECT * FROM " + dbprefix + "_vpaccount_users ";
288 sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) );
289 if( mysql_query( mysql, sql.c_str( ) ) ){
290 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
291 return false;
292 }
293 result = mysql_store_result( mysql ) ;
294 if( row = mysql_fetch_row(result) ){
295 mysql_free_result( result );
296 return true;
297 }
298 return false;
299 }
300
301 /**
302 *
303 * Platform???若?倶?粋??倶??紊???/span>
304 *
305 * @param
306 * @return
307 *
308 */
309 result_t activate( sessionid_t sid, userid_t uid, bool activate )
310 {
311 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
312 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
313
314 string sql;
315 MYSQL_RES* result;
316 MYSQL_ROW row;
317
318 sql = "UPDATE " + dbprefix + "_vpaccount_users ";
319 sql += "SET activate=" + string( activate ? "1" : "0" );
320 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
321 if( mysql_query( mysql, sql.c_str( ) ) ){
322 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
323 return RES_DB_QUERY_ERROR;
324 }
325 if ( mysql_affected_rows(mysql) == 0 ){
326 // ?贋?医け??
327 return RES_NO_SUCH_USER;
328 }
329 return RES_OK;
330 }
331
332 /**
333 *
334 * ?≪?????潟????/span>
335 *
336 * @param
337 * @return
338 *
339 */
340 int getAccountCount( sessionid_t sid )
341 {
342 if( mysql == NULL ) return 0;
343 if( !isValidSessionID( sid ) ) return 0;
344
345 int ret = 0;
346 string sql;
347 MYSQL_RES* result;
348 MYSQL_ROW row;
349
350 //?≪?????潟???違??羆?????
351 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users ";
352 if( mysql_query( mysql, sql.c_str( ) ) ){
353 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
354 return 0;
355 }
356 result = mysql_store_result( mysql ) ;
357 if( row = mysql_fetch_row(result) ){
358 ret = atoi( row[ 0 ] );
359 }else{
360 mysql_free_result( result );
361 return 0;
362 }
363 mysql_free_result( result );
364 return ret;
365 }
366
367 /**
368 *
369 * ?≪?????潟??????/span>
370 *
371 * @param
372 * @return RES_OK
373 * @return RES_NO_SUCH_SESSION
374 * @return RES_DB_QUERY_ERROR
375 *
376 */
377 result_t deleteAccount( sessionid_t sid, userid_t uid )
378 {
379 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
380 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
381
382 string sql;
383 sql = "DELETE FROM " + dbprefix + "_users ";
384 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
385 if( mysql_query( mysql, sql.c_str( ) ) ){
386 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
387 return RES_DB_QUERY_ERROR;
388 }
389
390 sql = "DELETE FROM " + dbprefix + "_vpaccount_users ";
391 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
392 if( mysql_query( mysql, sql.c_str( ) ) ){
393 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
394 return RES_DB_QUERY_ERROR;
395 }
396
397 return RES_OK;
398 }
399
400 /**
401 *
402 * ?≪?????潟?????怨??
403 *
404 * @param sid ?祉???激?с??D
405 * @param uid ??緇??????????若?吟??ID
406 * @param acc ??緇??????≪?????潟??????account_t)?????ゃ?潟?帥???吾??莨若??綣???/span>
407 * @return RES_OK
408 * @return RES_NO_SUCH_USER
409 * @return RES_NO_SUCH_SESSION
410 * @return RES_DB_QUERY_ERROR
411 * @return RES_ERROR
412 *
413 */
414 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc )
415 {
416 int len;
417 static criteria c;
418 result_t res = getAccounts( sid, &uid, 1, &c, acc, &len );
419 if( len == 0 ) return RES_NO_SUCH_USER;
420 return res;
421 }
422
423 /**
424 *
425 * ?≪?????潟?????怨??
426 *
427 * @param sid ?祉???激?с??D
428 * @param uids ??緇??????????若?吟??ID??????
429 * @param uidsLen uids???????膣???/span>
430 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
431 * @param accounts 罎?膣∝??????????????ゃ?潟?帥???吾??莨若??綣???/span>
432 * @param accountsLen 罎?膣∝???????????*accounts???膣???
433 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION
434 * @return RES_DB_QUERY_ERROR
435 *
436 */
437 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen )
438 {
439 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
440 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
441
442 string sql;
443 MYSQL_RES* result;
444 MYSQL_ROW row;
445 account_t* dst = new account_t[ uidsLen ];
446
447 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.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.base_url, u2.notice_mail, u2.notice_mail_since ";
448 sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_vpaccount_users AS u2 ";
449 sql += "WHERE u1.uid = u2.uid AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) );
450 for( int i = 1; i < uidsLen; i++ ){
451 sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) );
452 }
453 sql += " ) ";
454 sql += criteria2str( cri );
455 if( mysql_query( mysql, sql.c_str( ) ) ){
456 fprintf( stderr, "%s\n", sql.c_str( ) );
457 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
458 return RES_DB_QUERY_ERROR;
459 }
460 result = mysql_use_result( mysql ) ;
461 *accountsLen=0;
462 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < uidsLen ; i++ ){
463 dst[ i ].setUID( atoi( row[ 0 ] ) );
464 dst[ i ].setName( row[ 1 ] );
465 dst[ i ].setUname( row[ 2 ] );
466 dst[ i ].setEmail( row[ 3 ] );
467 dst[ i ].setURL( row[ 4 ] );
468 dst[ i ].setUserAvatar( row[ 5 ] );
469 dst[ i ].setUserRegdate( atoi( row[ 6 ] ) );
470 dst[ i ].setUserIcq( row[ 7 ] );
471 dst[ i ].setUserFrom( row[ 8 ] );
472 dst[ i ].setUserSig( row[ 9 ] );
473 dst[ i ].setUserViewemail( atoi( row[ 10 ] ) );
474 dst[ i ].setActkey( row[ 11 ] );
475 dst[ i ].setUserAim( row[ 12 ] );
476 dst[ i ].setUserYim( row[ 13 ] );
477 dst[ i ].setUserMsnm( row[ 14 ] );
478 dst[ i ].setPass( row[ 15 ] );
479 dst[ i ].setPosts( atoi( row[ 16 ] ) );
480 dst[ i ].setAttachsig( atoi( row[ 17 ] ) );
481 dst[ i ].setRank( atoi( row[ 18 ] ) );
482 dst[ i ].setLevel( atoi( row[ 19 ] ) );
483 dst[ i ].setTheme( row[ 20 ] );
484 dst[ i ].setTimezoneOffset( atof( row[ 21 ] ) );
485 dst[ i ].setLastLogin( atoi( row[ 22 ] ) );
486 dst[ i ].setUmode( row[ 23 ] );
487 dst[ i ].setUorder( atoi( row[ 24 ] ) );
488 dst[ i ].setNotifyMethod( atoi( row[ 25 ] ) );
489 dst[ i ].setNotifyMode( atoi( row[ 26 ] ) );
490 dst[ i ].setUserOcc( row[ 27 ] );
491 dst[ i ].setBio( row[ 28 ] );
492 dst[ i ].setUserIntrest( row[ 29 ] );
493 dst[ i ].setUserMailok( atoi( row[ 30 ] ) );
494 dst[ i ].setActivate( atoi( row[ 31 ] ) );
495 dst[ i ].setAddress( row[ 32 ] );
496 dst[ i ].setDivision( row[ 33 ] );
497 dst[ i ].setTel( row[ 34 ] );
498 dst[ i ].setCompanyName( row[ 35 ] );
499 dst[ i ].setCountry( row[ 36 ] );
500 dst[ i ].setZipcode( row[ 37 ] );
501 dst[ i ].setFax( row[ 38 ] );
502 dst[ i ].setBaseURL( row[ 39 ] );
503 dst[ i ].setNoticeMail( atoi( row[ 40 ] ) );
504 dst[ i ].setNoticeMailSince( atoi( row[ 41 ] ) );
505 ( *accountsLen )++;
506 }
507 mysql_free_result( result );
508 *accounts = dst;
509 return RES_OK;
510 }
511
512 /**
513 *
514 * ?≪?????潟???脂??
515 * ???若?倶???宴?????若?帥???若?鴻???脂?蚊???障??鐚?/span>
516 * ?脂?蚊???????若?倶???宴???綽????????若??D??uid???主????障??.
517 *
518 * @param sid ?祉???激?с??/span>
519 * @param account ?脂?蚊?????≪?????潟??????/span>
520 * @param uid ?脂?蚊?????≪?????潟?????宴???綽????????若??D
521 * @return RES_OK
522 * @return RES_NO_SUCH_SESSION
523 * @return RES_DB_QUERY_ERROR
524 * @return RES_ERROR
525 *
526 */
527 result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid )
528 {
529 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
530 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
531
532 string sql;
533 string tmp;
534 char buf[ 12 ];
535
536 //xoops?????若?吟???若???????吾??莨若??
537 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 (";
538 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
539 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
540 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
541 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
542 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
543 snprintf( buf, 12, "%d", time( NULL ) );
544 sql += string( buf ) + ", ";
545 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
546 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
547 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
548 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
549 sql += string( buf ) + ", ";
550 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
551 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
552 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
553 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
554 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
555 snprintf( buf, 12, "%d", account -> getPosts( ) );
556 sql += string( buf ) + ", ";
557 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
558 sql += string( buf ) + ", ";
559 snprintf( buf, 12, "%d", account -> getRank( ) );
560 sql += string( buf ) + ", ";
561 snprintf( buf, 12, "%d", account -> getLevel( ) );
562 sql += string( buf ) + ", ";
563 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
564 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
565 sql += string( buf ) + ", ";
566 sql += "0, "; //last login
567 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
568 snprintf( buf, 12, "%d", account -> getUorder( ) );
569 sql += string( buf ) + ", ";
570 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
571 sql += string( buf ) + ", ";
572 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
573 sql += string( buf ) + ", ";
574 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
575 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
576 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
577 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
578 sql += string( buf ) + ")";
579 if( mysql_query( mysql, sql.c_str( ) ) ){
580 fprintf( stderr, "%s\n", sql.c_str( ) );
581 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
582 return RES_DB_QUERY_ERROR;
583 }
584
585 //???若??D????緇?????
586 *uid = mysql_insert_id( mysql );
587
588 //vpaccount?????若?吟???若??????????????宴???吾??莨若??
589 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
590 snprintf( buf, 12, "%d", *uid );
591 sql += string( buf ) + ", ";
592 if( account -> getActivate() ){
593 sql += "1, ";
594 }else{
595 sql += "0, ";
596 }
597 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
598 sql += "'" + string( addSlashes( account -> getDivision() ) ) + "', ";
599 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
600 sql += "'" + string( addSlashes( account -> getCompanyName() ) ) + "', ";
601 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
602 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
603 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
604 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
605 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
606 sql += string( buf ) + ", ";
607 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
608 sql += string( buf ) + ")";
609 if( mysql_query( mysql, sql.c_str( ) ) ){
610 fprintf( stderr, "%s\n", sql.c_str( ) );
611 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
612 //xoops_users??nsert???????潟?若???????ゃ????
613 sql = "DELETE FROM " + dbprefix + "_users where uid=";
614 snprintf( buf, 12, "%d", *uid );
615 sql += string( buf );
616 mysql_query( mysql, sql.c_str( ) );
617 return RES_DB_QUERY_ERROR;
618 }
619
620 return RES_OK;
621 }
622
623 /**
624 *
625 * ?≪?????潟?????宴??紊??眼????.
626 *
627 *
628 * @param sid ?祉???激?с??D
629 * @param account 紊??眼???????≪?????潟??????/span>
630 * @return RES_OK
631 * @return RES_NO_SUCH_SESSION
632 * @return RES_DB_QUERY_ERROR
633 * @return RES_NO_SUCH_USER
634 *
635 */
636 result_t updateAccount( sessionid_t sid, const account_t* account )
637 {
638 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
639 if( account == NULL ) return RES_ERROR;
640 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
641 if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER;
642
643 string sql;
644 string tmp;
645 char buf[ 12 ];
646
647 //xoops?????若?吟???若???????吾??莨若??
648 sql = "UPDATE " + dbprefix + "_users SET ";
649 sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', ";
650 sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', ";
651 sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
652 sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', ";
653 sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
654 sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", ";
655 sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
656 sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
657 sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
658 sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", ";
659 sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
660 sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
661 sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
662 sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
663 sql += "pass='" + string( account -> getPass( ) ) + "', ";
664 sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", ";
665 sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", ";
666 sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", ";
667 sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", ";
668 sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
669 snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) );
670 sql += "timezone_offset=" + string( buf ) + ", ";
671 sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", ";
672 sql += "umode='" + string( account -> getUmode( ) ) + "', ";
673 sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", ";
674 sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", ";
675 sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", ";
676 sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
677 sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', ";
678 sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
679 sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) );
680 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
681
682 if( mysql_query( mysql, sql.c_str( ) ) ){
683 fprintf( stderr, "%s\n", sql.c_str( ) );
684 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
685 return RES_DB_QUERY_ERROR;
686 }
687
688 //vpaccount?????若?吟???若??????????????宴??筝??吾??????
689 sql = "UPDATE " + dbprefix + "_vpaccount_users SET ";
690 sql += "activate=";
691 if( account -> getActivate() ){
692 sql += "1, ";
693 }else{
694 sql += "0, ";
695 }
696 sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', ";
697 sql += "division='" + string( addSlashes( account -> getDivision() ) ) + "', ";
698 sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', ";
699 sql += "company_name='" + string( addSlashes( account -> getCompanyName() ) ) + "', ";
700 sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', ";
701 sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', ";
702 sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', ";
703 sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
704 sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", ";
705 sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) );
706 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
707
708 if( mysql_query( mysql, sql.c_str( ) ) ){
709 fprintf( stderr, "%s\n", sql.c_str( ) );
710 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
711 return RES_DB_QUERY_ERROR;
712 }
713
714 return RES_OK;
715 }
716
717 /**
718 *
719 * criteria_t?ф??絎???????膀??蚊?????若??D??菴???.
720 * ???若??D????????腆坂????????????吾??莨若?随????????≪?????鴻??*uids???吾??莨若??.
721 * ???????泣?ゃ?冴??*uidsLen???吾??莨若??
722 *
723 * @param sid ?祉???激?с??D
724 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
725 * @param uids ???若?吟??ID??????
726 * @param uidsLen uids???????膣???/span>
727 * @return RES_OK| RES_DB_NOT_INITIALIZED| RES_NO_SUCH_SESSION
728 * @return RES_DB_QUERY_ERROR| RES_ERROR
729 *
730 */
731 result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen )
732 {
733 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
734 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
735
736 string sql;
737 MYSQL_RES* result;
738 MYSQL_ROW row;
739 userid_t* dst = 0;
740
741 sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users ";
742 sql += criteria2str( cri );
743 if( mysql_query( mysql, sql.c_str( ) ) ){
744 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
745 return RES_DB_QUERY_ERROR;
746 }
747 result = mysql_store_result( mysql ) ;
748 if( result == NULL ){
749 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
750 return RES_DB_QUERY_ERROR;
751 }
752 *uidsLen = mysql_num_rows( result );
753 dst = new userid_t[ *uidsLen ];
754 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){
755 dst[ i ] = atoi( row[ 0 ] );
756 }
757 mysql_free_result( result );
758 *uids = dst;
759
760 return RES_OK;
761 }
762
763 /**
764 *
765 * ?違???若???違??菴???.
766 * 筝?罩c???祉???激?с??D????0??菴???.
767 *
768 * @param sid ?祉???激?с??D
769 * @return ?違???若????/span>
770 *
771 */
772 int getGroupCount( sessionid_t sid )
773 {
774 if( mysql == NULL ) return 0;
775 if( !isValidSessionID( sid ) ) return 0;
776
777 string sql;
778 MYSQL_RES* result;
779 MYSQL_ROW row;
780 int groupLen = 0;
781
782 //?違???若???違??羆?????
783 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups";
784 if( mysql_query( mysql, sql.c_str( ) ) ){
785 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
786 return RES_DB_QUERY_ERROR;
787 }
788 result = mysql_store_result( mysql ) ;
789 if( row = mysql_fetch_row(result) ){
790 groupLen = atoi( row[ 0 ] );
791 }
792 mysql_free_result( result );
793 return groupLen;
794 }
795
796 /**
797 *
798 * ??絮??違???若??筝?荀у??
799 *
800 * @param
801 * @return
802 *
803 */
804 result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen )
805 {
806 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
807 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
808 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
809
810 string sql;
811 MYSQL_RES* result;
812 MYSQL_ROW row;
813 groupid_t* dst = 0;
814 int len = 0;
815
816 //??絮??????違???若??????紊у???違??羆?????
817 sql = "SELECT count(*) FROM " + dbprefix + "_vpaccount_groups_users_link";
818 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
819 sql += criteria2str( cri );
820 if( mysql_query( mysql, sql.c_str( ) ) ){
821 fprintf( stderr, "%s\n", sql.c_str( ) );
822 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
823 return RES_DB_QUERY_ERROR;
824 }
825 result = mysql_store_result( mysql ) ;
826 if( row = mysql_fetch_row(result) ){
827 len = atoi( row[ 0 ] );
828 }
829 mysql_free_result( result );
830
831 sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link";
832 sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
833 sql += criteria2str( cri );
834 if( mysql_query( mysql, sql.c_str( ) ) ){
835 fprintf( stderr, "%s\n", sql.c_str( ) );
836 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
837 return RES_DB_QUERY_ERROR;
838 }
839 *gidsLen = 0;
840 dst = new groupid_t[ len ];
841 result = mysql_store_result( mysql ) ;
842 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < len ; i++ ){
843 dst[ i ] = atoi( row[ 0 ] );
844 ( *gidsLen )++;
845 }
846 mysql_free_result( result );
847 *gids = dst;
848
849 return RES_OK;
850 }
851
852 /**
853 *
854 * ?違???若??膊∞??罔????????
855 *
856 * @param
857 * @return
858 *
859 */
860 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
861 {
862 if( mysql == NULL ) return false;
863 if( !isValidSessionID( sid ) ) return false;
864 if( !uidExists( uid ) ) return false;
865 if( !gidExists( gid ) ) return false;
866
867 string sql;
868 MYSQL_RES* result;
869 MYSQL_ROW row;
870 groupid_t* dst = 0;
871 result_t res;
872
873 sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups_users_link ";
874 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
875 sql += " AND uid=" + string( unsignedIntToString( uid ) );
876 sql += " AND is_admin=1";
877 if( mysql_query( mysql, sql.c_str( ) ) ){
878 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
879 return false;
880 }
881 result = mysql_store_result( mysql );
882 if( !mysql_fetch_row(result) ){
883 mysql_free_result( result );
884 return false;
885 }
886
887 mysql_free_result( result );
888 return true;;
889 }
890
891 /**
892 *
893 * ?違???若??ID筝?荀?/span>
894 *
895 * @param
896 * @return
897 *
898 */
899 result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen )
900 {
901 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
902 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
903
904 string sql;
905 MYSQL_RES* result;
906 MYSQL_ROW row;
907 groupid_t* dst = 0;
908
909 sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups ";
910 sql += criteria2str( cri );
911 if( mysql_query( mysql, sql.c_str( ) ) ){
912 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
913 return RES_DB_QUERY_ERROR;
914 }
915 result = mysql_store_result( mysql ) ;
916 if( result == NULL ){
917 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
918 return RES_DB_QUERY_ERROR;
919 }
920 *gidsLen = mysql_num_rows( result );
921 dst = new groupid_t[ *gidsLen ];
922 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){
923 dst[ i ] = atoi( row[ 0 ] );
924 }
925 mysql_free_result( result );
926 *gids = dst;
927
928 return RES_OK;
929 /*
930 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
931 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
932
933 string sql;
934 MYSQL_RES* result;
935 MYSQL_ROW row;
936 groupid_t* dst = 0;
937
938 //?違???若???違??羆?????
939 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups ";
940 sql += criteria2str( cri );
941 if( mysql_query( mysql, sql.c_str( ) ) ){
942 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
943 return RES_DB_QUERY_ERROR;
944 }
945 result = mysql_store_result( mysql ) ;
946 if( row = mysql_fetch_row(result) ){
947 *gidsLen = atoi( row[ 0 ] );
948 dst = new groupid_t[ *gidsLen ];
949 }else{
950 mysql_free_result( result );
951 return RES_ERROR;
952 }
953 mysql_free_result( result );
954
955 sql = "SELECT gid, gname, gdesc FROM " + dbprefix + "_vpaccount_groups ";
956 sql += criteria2str( cri );
957 if( mysql_query( mysql, sql.c_str( ) ) ){
958 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
959 return RES_DB_QUERY_ERROR;
960 }
961
962 result = mysql_use_result( mysql ) ;
963 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){
964 dst[ i ] = atoi( row[ 0 ] );
965 }
966 mysql_free_result( result );
967 *gids = dst;
968
969 return RES_OK;
970 */
971 }
972
973 /**
974 *
975 * ?違???若??膊∞????ID????緇?????
976 *
977 * @param sid ?祉???激?с??D
978 * @param gid ???????????違???若????ID?ф??絎?????
979 * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
980 * @param uids 膊∞??????ID???????????????????ゃ?潟??/span>
981 * @param uidsLen uids???????膣???/span>
982 * @return RES_OK
983 * @return RES_DB_NOT_INITIALIZED
984 * @return RES_NO_SUCH_SESSION
985 * @return RES_DB_QUERY_ERROR
986 * @return RES_ERROR
987 *
988 */
989 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
990 {
991 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
992 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
993
994 string sql;
995 MYSQL_RES* result;
996 MYSQL_ROW row;
997 userid_t* dst = 0;
998
999 sql = "SELECT uid FROM " + dbprefix + "_vpaccount_groups_users_link ";
1000 sql += " WHERE is_admin=1";
1001 if( mysql_query( mysql, sql.c_str( ) ) ){
1002 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1003 return RES_DB_QUERY_ERROR;
1004 }
1005
1006 result = mysql_store_result( mysql );
1007 if( result == NULL ){
1008 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1009 return RES_DB_QUERY_ERROR;
1010 }
1011
1012 *uidsLen = mysql_num_rows( result );
1013 dst = new userid_t[ *uidsLen ];
1014 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){
1015 dst[ i ] = atoi( row[ 0 ] );
1016 }
1017 mysql_free_result( result );
1018 *uids = dst;
1019
1020 return RES_OK;
1021 }
1022
1023 /**
1024 *
1025 * ?違???若????絮????若?九????/span>
1026 *
1027 * @param
1028 * @return
1029 *
1030 */
1031 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
1032 {
1033 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1034 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1035 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
1036 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1037
1038 string sql;
1039
1040 sql = "DELETE FROM " + dbprefix + "_vpaccount_groups_users_link ";
1041 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
1042 sql += " AND uid=" + string( unsignedIntToString( uid ) );
1043 if( mysql_query( mysql, sql.c_str( ) ) ){
1044 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1045 return RES_DB_QUERY_ERROR;
1046 }
1047 return RES_OK;
1048 }
1049
1050 /**
1051 *
1052 * ?違???若????絮????若?区申??
1053 *
1054 * @param sid ?祉???激?с??D
1055 * @param gid ??絮????違???若????D
1056 * @param uid ??絮??????????若?吟??D
1057 * @param admin 膊∞????罔?????筝?????????true
1058 * @return RES_OK
1059 * @return RES_DB_NOT_INITIALIZED
1060 * @return RES_NO_SUCH_SESSION
1061 * @return RES_DB_QUERY_ERROR
1062 * @return RES_ERROR
1063 *
1064 */
1065 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin )
1066 {
1067 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1068 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1069 if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid??????????с????/span>
1070 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1071
1072 string sql;
1073 MYSQL_RES* result;
1074 MYSQL_ROW row;
1075 groupid_t* dst = 0;
1076 result_t res;
1077
1078 //?<?潟???若??菴遵??
1079 sql = "INSERT INTO " + dbprefix + "_vpaccount_groups_users_link ( gid, uid, is_admin ) VALUES (";
1080 sql += string( unsignedIntToString( gid ) ) + ", ";
1081 sql += string( unsignedIntToString( uid ) ) + ", ";
1082 sql += string( admin ? "1" : "0" ) + ") ";
1083 if( mysql_query( mysql, sql.c_str( ) ) ){
1084 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1085 return RES_DB_QUERY_ERROR;
1086 }
1087 return RES_OK;
1088 }
1089
1090 /**
1091 *
1092 * ?違???若????絮????若?九??
1093 *
1094 * @param
1095 * @return
1096 *
1097 */
1098 result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen )
1099 {
1100 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1101 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1102 if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid??????????с????/span>
1103
1104 string sql;
1105 MYSQL_RES* result;
1106 MYSQL_ROW row;
1107 userid_t* dst = 0;
1108 int len = 0;
1109
1110 //?<?潟???惹?違??羆??????<?≪??∈篆?
1111 sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups_users_link ";
1112 sql += " WHERE gid=" + string( unsignedIntToString( gid ) );
1113 if( mysql_query( mysql, sql.c_str( ) ) ){
1114 fprintf( stderr, "%s\n", sql.c_str( ) );
1115 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1116 return RES_DB_QUERY_ERROR;
1117 }
1118 result = mysql_store_result( mysql ) ;
1119 if( row = mysql_fetch_row(result) ){
1120 len = atoi( row[ 0 ] );
1121 dst = new userid_t[ len ];
1122 }else{
1123 mysql_free_result( result );
1124 return RES_ERROR;
1125 }
1126 mysql_free_result( result );
1127
1128 sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link ";
1129 sql += " WHERE gid=" + string( unsignedIntToString( gid ) );
1130 sql += " " + string( criteria2str( cri ) );
1131 if( mysql_query( mysql, sql.c_str( ) ) ){
1132 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1133 delete[] dst;
1134 *uidsLen = 0;
1135 return RES_DB_QUERY_ERROR;
1136 }
1137 *uidsLen = 0;
1138 result = mysql_use_result( mysql ) ;
1139 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < len ; i++ ){
1140 dst[ i ] = atoi( row[ 0 ] );
1141 ( *uidsLen )++;
1142 }
1143 mysql_free_result( result );
1144 *uids = dst;
1145 return RES_OK;
1146 }
1147
1148 /**
1149 *
1150 * ?違???若????????/span>
1151 *
1152 * @param
1153 * @return RES_OK
1154 * @return RES_DB_QUERY_ERROR
1155 * @return RES_NO_SUCH_SESSION
1156 * @return RES_DB_NOT_INITIALIZED
1157 *
1158 */
1159 result_t deleteGroup( sessionid_t sid, groupid_t gid )
1160 {
1161 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1162 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1163
1164 string sql;
1165 sql = "DELETE FROM " + dbprefix + "_vpaccount_groups ";
1166 sql += "WHERE gid = " + string( unsignedIntToString( gid ) );
1167 if( mysql_query( mysql, sql.c_str( ) ) ){
1168 fprintf( stderr, "%s\n", sql.c_str( ) );
1169 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1170 return RES_DB_QUERY_ERROR;
1171 }
1172 return RES_OK;
1173 }
1174
1175 /**
1176 *
1177 * ?違???若???脂??
1178 * ?違???若???????宴?????若?帥???若?鴻????蚊???障??.
1179 * ?脂?蚊?????違???若?????綽??????違???若??ID??gid???主????障??.
1180 *
1181 * @param sid ?祉???激?с??D
1182 * @param group ?脂?蚊???????違???若????????/span>
1183 * @param gid ?脂?蚊?????違???若?????綽??????違???若??ID
1184 * @return RES_OK
1185 * @return RES_DB_NOT_INITIALIZED
1186 * @return RES_NO_SUCH_SESSION
1187 * @return RES_DB_QUERY_ERROR
1188 *
1189 */
1190 result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid )
1191 {
1192 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1193 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1194
1195 string sql;
1196 sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES (";
1197 sql += "'" + string( addSlashes( group -> getGname( ) ) ) + "', ";
1198 sql += "'" + string( addSlashes( group -> getDesc( ) ) ) + "' )";
1199 if( mysql_query( mysql, sql.c_str( ) ) ){
1200 fprintf( stderr, "%s\n", sql.c_str( ) );
1201 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1202 return RES_DB_QUERY_ERROR;
1203 }
1204 *gid = mysql_insert_id( mysql );
1205 return RES_OK;
1206 }
1207
1208 /**
1209 *
1210 * ?違???若?????宴??紊??眼????
1211 *
1212 * @param sid ?祉???激?с??D
1213 * @param group ?違?????違???若??????/span>
1214 * @return RES_OK
1215 * @return RES_ERROR
1216 * @return RES_DB_NOT_INITIALIZED
1217 * @return RES_NO_SUCH_SESSION
1218 * @return RES_NO_SUCH_GROUP
1219 * @return RES_DB_QUERY_ERROR
1220 *
1221 */
1222 result_t updateGroup( sessionid_t sid, const group_t* group )
1223 {
1224 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1225 if( group == NULL ) return RES_ERROR;
1226 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1227 if( !gidExists( group -> getGID( ) ) ) return RES_NO_SUCH_GROUP;
1228
1229 string sql;
1230 sql = "UPDATE " + dbprefix + "_vpaccount_groups SET ";
1231 sql += "gname='" + string( addSlashes( group -> getGname( ) ) ) + "', ";
1232 sql += "gdesc='" + string( addSlashes( group -> getDesc( ) ) ) + "' ";
1233 sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) );
1234 if( mysql_query( mysql, sql.c_str( ) ) ){
1235 fprintf( stderr, "%s\n", sql.c_str( ) );
1236 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1237 return RES_DB_QUERY_ERROR;
1238 }
1239 return RES_OK;
1240 }
1241
1242 /**
1243 *
1244 * ?違???若?????怨??
1245 *
1246 * @param sid ?祉???激?с??D
1247 * @param gid ??緇????????違???若????ID
1248 * @param group ??緇??????違???若?????宴???≪?????鴻???吾??莨若?????ゃ?潟??/span>
1249 * @return RES_OK
1250 * @return RES_DB_NOT_INITIALIZED
1251 * @return RES_NO_SUCH_SESSION
1252 * @return RES_NO_SUCH_GROUP
1253 * @return RES_DB_QUERY_ERROR
1254 *
1255 */
1256 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
1257 {
1258 int len;
1259 static criteria c;
1260 result_t res = getGroups( sid, &gid, 1, &c, group, &len );
1261 if( len == 0 ) return RES_NO_SUCH_GROUP;
1262 return res;
1263 }
1264
1265 /**
1266 *
1267 * 茲??違???違???若?????宴??筝?綺?????????.
1268 *
1269 * @param sid ?祉???激?с??D
1270 * @param gids ??緇????????違???若????ID??????
1271 * @param gidsLen gids???????膣???/span>
1272 * @param cri 腟???????膀??駕??純?若???>散????絎?
1273 * @param groups ??緇?腟??????違???若?????宴?????????≪?????鴻???吾??莨若?????ゃ?潟??/span>
1274 * @param groupsLen ??緇?腟????????????膣???/span>
1275 * @return RES_OK
1276 * @return RES_DB_NOT_INITIALIZED
1277 * @return RES_NO_SUCH_SESSION
1278 * @return RES_DB_QUERY_ERROR
1279 *
1280 */
1281 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen )
1282 {
1283 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1284 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1285
1286 string sql;
1287 MYSQL_RES* result;
1288 MYSQL_ROW row;
1289 group_t* dst = new group_t[ gidsLen ];
1290
1291 sql += "SELECT gid, gname, gdesc ";
1292 sql += "FROM " + dbprefix + "_vpaccount_groups ";
1293 sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) );
1294 for( int i = 1; i < gidsLen; i++ ){
1295 sql += " OR gid=" + string( unsignedIntToString( gids[ i ] ) );
1296 }
1297 sql += criteria2str( cri );
1298 if( mysql_query( mysql, sql.c_str( ) ) ){
1299 fprintf( stderr, "%s\n", sql.c_str( ) );
1300 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1301 return RES_DB_QUERY_ERROR;
1302 }
1303 result = mysql_use_result( mysql ) ;
1304 *groupsLen=0;
1305 for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < gidsLen ; i++ ){
1306 dst[ i ].setGID( atoi( row[ 0 ] ) );
1307 dst[ i ].setGname( row[ 1 ] );
1308 dst[ i ].setDesc( row[ 2 ] );
1309 ( *groupsLen )++;
1310 }
1311 mysql_free_result( result );
1312 *groups = dst;
1313 return RES_OK;
1314 }
1315
1316 /**
1317 *
1318 * ?≪?????若?炊┤???????<??菴???
1319 *
1320 * @param sid ?祉???激?с??D
1321 * @param uid ???????????????若?吟??ID
1322 * @return true 罔???????
1323 * @return false 罔???????
1324 *
1325 */
1326 bool isModerator( sessionid_t sid, userid_t uid )
1327 {
1328 if( mysql == NULL ) return false;
1329 if( !isValidSessionID( sid ) ) return false;
1330 //if( !uidExists( uid ) ) return false;
1331
1332 string sql;
1333 MYSQL_RES* result;
1334 MYSQL_ROW row;
1335 groupid_t* dst = 0;
1336 result_t res;
1337
1338 sql = "SELECT value FROM " + dbprefix + "_vpaccount_config";
1339 sql += " WHERE name='moderator_gid'";
1340 if( mysql_query( mysql, sql.c_str( ) ) ){
1341 fprintf( stderr, "%s\n", sql.c_str( ) );
1342 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1343 return false;
1344 }
1345 result = mysql_store_result( mysql ) ;
1346 if( result == NULL ){
1347 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1348 return false;
1349 }
1350 if( row = mysql_fetch_row(result) ){
1351 sql = "SELECT * from " + dbprefix + "_groups_users_link ";
1352 sql += "WHERE groupid=" + string( row[ 0 ] );
1353 sql += " AND uid=" + string( unsignedIntToString( uid ) );
1354 mysql_free_result( result );
1355
1356 if( mysql_query( mysql, sql.c_str( ) ) ){
1357 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1358 return false;
1359 }
1360 result = mysql_store_result( mysql );
1361 if( result == NULL ){
1362 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1363 return false;
1364 }
1365 if( !mysql_fetch_row(result) ){
1366 mysql_free_result( result );
1367 return false;
1368 }
1369 mysql_free_result( result );
1370 return true;
1371 }else{
1372 mysql_free_result( result );
1373 return false;
1374 }
1375 }
1376
1377 /**
1378 *
1379 * ???若??D??緇?
1380 *
1381 * @param uname ID????緇??????????若?吟?弱??
1382 * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
1383 * @return RES_ERROR
1384 * @return RES_OK
1385 * @refer result_t
1386 *
1387 */
1388 result_t getUid( const char* uname, userid_t* uid )
1389 {
1390 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1391 if( uname == NULL ) return RES_ERROR;
1392
1393 string sql;
1394 string uname2 = addSlashes( uname );
1395 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
1396 if( mysql_query( mysql, sql.c_str( ) ) ){
1397 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
1398 return RES_DB_QUERY_ERROR;
1399 }
1400 MYSQL_RES* result = mysql_store_result( mysql ) ;
1401 MYSQL_ROW row = mysql_fetch_row(result);
1402 if( row ){
1403 *uid = atoi( row[0] );
1404 mysql_free_result( result );
1405 return RES_OK;
1406 }else{
1407 mysql_free_result( result );
1408 return RES_NO_SUCH_USER;
1409 }
1410 }
1411
1412 /**
1413 *
1414 * ?祉???激?с?潟??篏?????xoops_vpaccount_session???吾??莨若???? sessionid_t??session???????
1415 *
1416 * @param uid xoops_users??id
1417 * @param session sessionid_t???????????????????ゃ?潟?帥??
1418 * @return RES_OK ????
1419 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
1420 */
1421 static result_t addSession( userid_t uid, sessionid_t* session )
1422 {
1423 result_t ret;
1424 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid) values (" +
1425 unsignedIntToString(uid) + ")";
1426 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
1427 *session = (int)mysql_insert_id(mysql);
1428 ret = RES_OK;
1429 }
1430 else {
1431 ret = RES_DB_QUERY_ERROR;
1432 }
1433 return ret;
1434 }
1435
1436
1437 /**
1438 *
1439 * ???違?ゃ?活?荐若???祉???激?с?割???
1440 *
1441 * @param uname ???違?ゃ?喝??
1442 * @param passwd ???鴻???若??
1443 * @param session sessionid_t???????????????????ゃ?潟?帥??
1444 * @return RES_OK ???違?ゃ?恰??????session??essionid_t???吾??莨若??????<br>
1445 * @return RES_LOGIN_FAILURE uname?障????asswd???医幻<br>
1446 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
1447 *
1448 */
1449 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
1450 {
1451 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1452
1453 result_t ret;
1454 string sql;
1455
1456 // uname, passwd -> uid
1457 string escUname = addSlashes( uname );
1458 string escPasswd = addSlashes( passwd );
1459 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
1460 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1461 MYSQL_RES* result = mysql_store_result( mysql );
1462 if( result ){
1463 MYSQL_ROW row = mysql_fetch_row(result);
1464 if( row ){
1465 userid_t uid = atoi(row[0]);
1466 ret = addSession( uid, session );
1467 }else{
1468 ret = RES_LOGIN_FAILURE;
1469 }
1470 mysql_free_result( result );
1471 }else {
1472 ret = RES_DB_QUERY_ERROR;
1473 }
1474 }else{
1475 ret = RES_DB_QUERY_ERROR;
1476 }
1477
1478 return ret;
1479 }
1480
1481 /**
1482 *
1483 * ???違?≪???????祉???激?с?括?篋?
1484 *
1485 * @param sid session id
1486 * @return ????
1487 *
1488 */
1489 void logoutUser( sessionid_t sid )
1490 {
1491 if( mysql == NULL ) return; // RES_DB_NOT_INITIALIZED;
1492
1493 result_t ret;
1494 string sql;
1495
1496 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
1497 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
1498 if ( mysql_affected_rows(mysql) == 1 ){
1499 // ???違?≪????????
1500 }
1501 else {
1502 // sid???≦??/span>
1503 }
1504 }
1505 else {
1506 // DB????????筝?????????/span>
1507 }
1508 }
1509
1510 /**
1511 *
1512 * ?祉???激?с?潟?????.<br>
1513 * XOOPS??ession???若????????蚊??????sess_id?????ess_id??膈???????
1514 * ?逸?session_t??篏?????????
1515 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
1516 *
1517 * @param sessionid xoops??ession_id
1518 * @param uid xoops_users??id
1519 * @param session sessionid_t???????????????????ゃ?潟?帥??
1520 * @return RES_OK ??????<br>
1521 * @return RES_ERROR
1522 * @return RES_DB_QUERY_ERROR
1523 *
1524 */
1525 result_t createSession( const char* sess_id, userid_t uid, sessionid_t* session )
1526 {
1527 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1528
1529 result_t ret;
1530 string sql;
1531
1532 string escSess_id = addSlashes(sess_id);
1533 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSess_id + "'";
1534 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1535 MYSQL_RES* result = mysql_store_result( mysql );
1536 if( result ){
1537 MYSQL_ROW row = mysql_fetch_row(result);
1538 if( row ){
1539 ret = addSession( uid, session );
1540 }else{
1541 ret = RES_ERROR;
1542 }
1543 mysql_free_result( result );
1544 }else {
1545 ret = RES_DB_QUERY_ERROR;
1546 }
1547 }else{
1548 ret = RES_DB_QUERY_ERROR;
1549 }
1550
1551 return ret;
1552 }
1553
1554 /**
1555 *
1556 * ?祉???激?с?潟???膣違??session_t?у??????.<br>
1557 *
1558 * @param sid ?祉???激?с??D
1559 * @param ppsession sessionid_t*???????????????????ゃ?潟?帥??
1560 * @return RES_OK ??????freeResult(*ppsession)??綽?荀???<br>
1561 * @return RES_NO_SUCH_SESSION<br>
1562 * @return RES_DB_QUERY_ERROR<br>
1563 * @return RES_DB_NOT_INITIALIZED
1564 *
1565 */
1566 result_t getSession( sessionid_t sid, const session_t** ppsession )
1567 {
1568 if( mysql == NULL ) return RES_DB_NOT_INITIALIZED;
1569
1570 result_t ret;
1571 string sql;
1572
1573 sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix +
1574 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sid);
1575 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
1576 MYSQL_RES* result = mysql_store_result( mysql );
1577 if( result ){
1578 MYSQL_ROW row = mysql_fetch_row(result);
1579 if( row ){
1580 session_t *p = new session[1];
1581 p->setSessionID(sid);
1582 p->setUserID(atoi(row[1]));
1583 p->setDate(atoi(row[2]));
1584 *ppsession = p;
1585 ret = RES_OK;
1586 }else{
1587 ret = RES_NO_SUCH_SESSION;
1588 }
1589 mysql_free_result( result );
1590 }else {
1591 ret = RES_DB_QUERY_ERROR;
1592 }
1593 }else{
1594 ret = RES_DB_QUERY_ERROR;
1595 }
1596
1597 return ret;
1598 }
1599
1600 /**
1601 *
1602 * ?祉???激?с?潟???綵??с?????с????????.
1603 *
1604 * @param sid ???с??????????session
1605 * @return true 罩e?
1606 * @return false 筝?罩?/span>
1607 *
1608 */
1609 bool isValidSessionID( sessionid_t sid )
1610 {
1611 if( mysql == NULL ) return false;
1612
1613 string sql;
1614 string sidstr;
1615 char buf[ 12 ];
1616 snprintf( buf, 12, "%d", sid );
1617
1618 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
1619 if( mysql_query( mysql, sql.c_str( ) ) ){
1620 return false;
1621 }
1622 MYSQL_RES* result = mysql_store_result( mysql ) ;
1623 MYSQL_ROW row = mysql_fetch_row(result);
1624 mysql_free_result( result );
1625 if( row ){
1626 return true;
1627 }else{
1628 return false;
1629 }
1630 }
1631
1632 void freeResult( const account_t* ptr ){ delete[] ( account_t* )ptr; }
1633 void freeResult( const group_t* ptr ){ delete[] ( group_t* )ptr; }
1634 void freeResult( const session_t* ptr ){ delete[] ( session_t* )ptr; }
1635 void freeResult( const int* ptr ){ delete[] ( int* )ptr; }
1636
1637 static string errstr;
1638 const char* getLastErrorString()
1639 {
1640 return errstr.c_str( );
1641 }
1642
1643 void setLastErrorString( const char* str )
1644 {
1645 errstr = str;
1646 }

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