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.21 - (show annotations) (download) (as text)
Wed Dec 1 10:28:58 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.20: +13 -9 lines
File MIME type: text/x-c++src
DB・ォ・鬣猯セ、ホハムケケ、ヒネシ、ヲス、タオ
    institute -> division
    organizaion -> company_name

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

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