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.19 - (show annotations) (download) (as text)
Tue Nov 30 06:40:11 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.18: +375 -37 lines
File MIME type: text/x-c++src
関数を追加(gidExists, uidExists)
getGroupCountを定義.
getGroupsByUidを定義.
isGroupAdminを修正.
dumpGroupAdminsを定義.
deleteMemberを定義.
insertMemberを定義.
getMembersを定義.
isModeratorを定義.

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

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