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.23 - (show annotations) (download) (as text)
Sat Dec 4 09:21:10 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.22: +5 -2 lines
File MIME type: text/x-c++src
。ヲvp_config 「ェ vpaccount_config.

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

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