Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.11 - (hide annotations) (download) (as text)
Fri Nov 26 08:16:26 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.10: +9 -6 lines
File MIME type: text/x-c++src
。ヲgetSession, loginUser, createSession, freeResult(const session_t*) ス、タオ.

1 youi 1.1 /*
2     *
3 aga 1.11 * $Revision: 1.10 $
4 youi 1.2 * $Log: commonal.cc,v $
5 aga 1.11 * Revision 1.10 2004/11/26 07:57:42 youi
6     * updateAccount, deleteAccount繧貞ョ夂セゥ.
7     * mysql_query螟ア謨玲凾縺ッstderr縺ク繧ィ繝ゥ繝シ繧ウ繝シ繝峨→繧ィ繝ゥ繝シ繝。繝?そ繝シ繧ク繧貞?蜉?
8     *
9 youi 1.10 * Revision 1.9 2004/11/26 07:38:02 aga
10     * 繝サFAILUE -> FAILURE.
11     *
12 aga 1.9 * Revision 1.8 2004/11/26 06:36:55 aga
13     * 繝サcreateSession, getSession 繧剃ス懈?.
14     *
15 aga 1.8 * Revision 1.7 2004/11/26 04:51:47 youi
16     * dbprefix繧貞ョ夂セゥ縺励◆.
17     * insertAccount繧貞ョ夂セゥ縺励◆.
18     * isValidSessionID繧貞ョ夂セゥ縺励◆.
19     *
20 youi 1.7 * Revision 1.6 2004/11/26 04:35:55 aga
21     * 繝サloginUser(), logoutUser()繧剃ス懈?.
22     *
23 aga 1.6 * Revision 1.5 2004/11/26 01:08:25 aga
24     * 繝サaddSlashes()菴懈?.
25     *
26 aga 1.5 * Revision 1.4 2004/11/25 12:14:29 youi
27     * getUid縺ョ蜃ヲ逅?r螳夂セゥ縺励◆.
28     *
29 youi 1.4 * Revision 1.3 2004/11/25 11:13:59 youi
30     * getLastErrorString/setLastErrorString繧貞ョ夂セゥ.
31     *
32 youi 1.3 * Revision 1.2 2004/11/25 08:55:19 youi
33     * 蠑墓焚縺ョ蝙九r菫ョ豁」.
34     * freeResult繧定ソス蜉?.
35     *
36 youi 1.2 * Revision 1.1 2004/11/25 05:14:58 youi
37     * initial version
38     *
39 youi 1.1 *
40     */
41     #include <stdio.h>
42 aga 1.6 #include <stdlib.h>
43 youi 1.1 #include <string.h>
44     #include <mysql.h>
45 youi 1.10 #include <errmsg.h>
46 youi 1.3 #include <string>
47 youi 1.7 using namespace std;
48 youi 1.1
49     #include "common.h"
50     #include "account.h"
51     #include "group.h"
52     #include "session.h"
53     #include "criteria.h"
54     #include "commonal.h"
55    
56 youi 1.7
57 youi 1.1 static MYSQL* mysql = NULL; //!< MySQL縺ョ繝上Φ繝峨Ν
58 youi 1.7 static string dbprefix; //!< XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
59 aga 1.5
60     /**
61     *
62     * php縺ョaddslashes縺ィ蜷後§縲?/span>
63     *
64     * @param addslashes縺吶∋縺肴枚蟄怜?縲?ULL謖?ョ壻ク榊庄縲?/span>
65     * @return addslashes縺輔l縺滓枚蟄怜?
66     */
67     string addSlashes( const char *str )
68     {
69     int len = strlen(str);
70     char *buf = new char[len*2+1];
71     int bufLen = mysql_real_escape_string( mysql, buf, str, len );
72     string s( buf, bufLen );
73     return s;
74     }
75    
76 youi 1.1
77     /**
78     *
79     * 繝??繧ソ繝吶?繧ケ縺ョ蛻晄悄蛹?/span>
80     *
81     * @param host 繝??繧ソ繝吶?繧ケ縺ョ繝帙せ繝亥錐
82     * @param user 繝??繧ソ繝吶?繧ケ縺ォ繧「繧ッ繧サ繧ケ縺吶k繝ヲ繝シ繧カ蜷?/span>
83     * @param password 荳願ィ倥Θ繝シ繧カ縺ョ繝代せ繝ッ繝シ繝?/span>
84     * @param dbname 繝??繧ソ繝吶?繧ケ縺ョ蜷榊燕
85     * @param prefix XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
86     * @return result_t
87     * @refer result_t
88     */
89     result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
90     {
91     // 譌「縺ォ謗・邯壻クュ縺ェ繧峨?∽ク?譌ヲ蛻?妙
92     if ( mysql != NULL )
93     mysql_close( mysql );
94    
95 youi 1.7 dbprefix = prefix;
96    
97 youi 1.1 // 蛻晄悄蛹悶→謗・邯?/span>
98     mysql = mysql_init(NULL);
99     if ( mysql == NULL ){
100     return RES_DB_INITIALIZE_ERROR;
101     }
102     char *unix_socket = NULL; // ?
103     uint flag = 0; // ?
104     if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
105     return RES_DB_CONNECT_ERROR;
106     }
107    
108 youi 1.2 return RES_OK;
109 youi 1.1 }
110    
111    
112     /**
113     *
114     * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句叙蠕?/span>
115     *
116     * @param
117     * @return
118     *
119     */
120 youi 1.2 bool isActivated( sessionid_t sid, userid_t uid )
121 youi 1.1 {
122     return false;
123     }
124    
125     /**
126     *
127     * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句、画峩
128     *
129     * @param
130     * @return
131     *
132     */
133 youi 1.2 result_t activate( sessionid_t sid, userid_t uid, bool activate )
134 youi 1.1 {
135     return RES_ERROR;
136     }
137    
138     /**
139     *
140     * 繧「繧ォ繧ヲ繝ウ繝域焚
141     *
142     * @param
143     * @return
144     *
145     */
146 youi 1.2 int getAccountCount( sessionid_t sid )
147 youi 1.1 {
148     return 0;
149     }
150    
151     /**
152     *
153     * 繧「繧ォ繧ヲ繝ウ繝亥炎髯、
154     *
155     * @param
156 youi 1.10 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
157 youi 1.1 *
158     */
159 youi 1.2 result_t deleteAccount( sessionid_t sid, userid_t uid )
160 youi 1.1 {
161 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
162    
163     string sql;
164     sql = "DELETE FROM " + dbprefix + "_users ";
165     sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
166     if( mysql_query( mysql, sql.c_str( ) ) ){
167     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
168     return RES_DB_QUERY_ERROR;
169     }
170    
171     sql = "DELETE FROM " + dbprefix + "_vpaccount_users ";
172     sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
173     if( mysql_query( mysql, sql.c_str( ) ) ){
174     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
175     return RES_DB_QUERY_ERROR;
176     }
177    
178     return RES_OK;
179 youi 1.1 }
180    
181     /**
182     *
183     * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
184     *
185     * @param
186     * @return
187     *
188     */
189 youi 1.2 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** )
190 youi 1.1 {
191     return RES_ERROR;
192     }
193    
194     /**
195     *
196     * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
197     *
198     * @param
199     * @return
200     *
201     */
202 youi 1.2 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, const criteria_t* cri, const account_t** accounts, int* accountsLen )
203 youi 1.1 {
204     return RES_ERROR;
205     }
206    
207     /**
208     *
209     * 繧「繧ォ繧ヲ繝ウ繝育匳骭イ
210     *
211 youi 1.7 * @param sid 繧サ繝?す繝ァ繝ウ
212 youi 1.10 * @param account 逋サ骭イ縺吶k繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア
213     * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
214 youi 1.1 *
215     */
216 youi 1.2 result_t insertAccount( sessionid_t sid, const account_t* account )
217 youi 1.1 {
218 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
219    
220 youi 1.7 string sql;
221     string tmp;
222     char buf[ 12 ];
223    
224     //xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧?
225     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 (";
226     sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
227     sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
228     sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
229     sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
230     sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
231     snprintf( buf, 12, "%d", time( NULL ) );
232     sql += string( buf ) + ", ";
233     sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
234     sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
235     sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
236     snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
237     sql += string( buf ) + ", ";
238     sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
239     sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
240     sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
241     sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
242     sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
243     snprintf( buf, 12, "%d", account -> getPosts( ) );
244     sql += string( buf ) + ", ";
245     snprintf( buf, 12, "%d", account -> getAttachsig( ) );
246     sql += string( buf ) + ", ";
247     snprintf( buf, 12, "%d", account -> getRank( ) );
248     sql += string( buf ) + ", ";
249     snprintf( buf, 12, "%d", account -> getLevel( ) );
250     sql += string( buf ) + ", ";
251     sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
252     snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
253     sql += string( buf ) + ", ";
254     sql += "0, "; //last login
255     sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
256     snprintf( buf, 12, "%d", account -> getUorder( ) );
257     sql += string( buf ) + ", ";
258     snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
259     sql += string( buf ) + ", ";
260     snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
261     sql += string( buf ) + ", ";
262     sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
263     sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
264     sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
265     snprintf( buf, 12, "%d", account -> getUserMailok( ) );
266     sql += string( buf ) + ")";
267     if( mysql_query( mysql, sql.c_str( ) ) ){
268 youi 1.10 fprintf( stderr, "%s\n", sql.c_str( ) );
269     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
270 youi 1.7 return RES_DB_QUERY_ERROR;
271     }
272    
273     //繝ヲ繝シ繧カID繧貞叙蠕励☆繧?/span>
274     userid_t uid;
275     if( getUid( account -> getUname( ), &uid ) != RES_OK ){
276     return RES_ERROR;
277     }
278    
279     //vpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧呈嶌縺崎セシ繧?
280 youi 1.10 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
281 youi 1.7 snprintf( buf, 12, "%d", uid );
282     sql += string( buf ) + ", ";
283     if( account -> getActivate() ){
284     sql += "1, ";
285     }else{
286     sql += "0, ";
287     }
288     sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
289     sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', ";
290     sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
291     sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', ";
292     sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
293     sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
294     sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
295     sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
296     snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
297     sql += string( buf ) + ", ";
298     snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
299     sql += string( buf ) + ")";
300     if( mysql_query( mysql, sql.c_str( ) ) ){
301 youi 1.10 fprintf( stderr, "%s\n", sql.c_str( ) );
302     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
303 youi 1.7 //xoops_users縺クinsert縺励◆繝ャ繧ウ繝シ繝峨r蜑企勁縺吶k
304     sql = "DELETE FROM " + dbprefix + "_users where uid=";
305     snprintf( buf, 12, "%d", uid );
306     sql += string( buf );
307 youi 1.10 mysql_query( mysql, sql.c_str( ) );
308 youi 1.7 return RES_DB_QUERY_ERROR;
309     }
310    
311     return RES_OK;
312 youi 1.1 }
313    
314     /**
315     *
316     * 繧「繧ォ繧ヲ繝ウ繝亥、画峩
317     *
318     * @param
319 youi 1.10 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
320 youi 1.1 *
321     */
322 youi 1.2 result_t updateAccount( sessionid_t sid, const account_t* account )
323 youi 1.1 {
324 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
325    
326     string sql;
327     string tmp;
328     char buf[ 12 ];
329    
330     //xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧?
331     sql = "UPDATE " + dbprefix + "_users SET ";
332     sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', ";
333     sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', ";
334     sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
335     sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', ";
336     sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
337     sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", ";
338     sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
339     sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
340     sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
341     sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", ";
342     sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
343     sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
344     sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
345     sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
346     sql += "pass='" + string( account -> getPass( ) ) + "', ";
347     sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", ";
348     sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", ";
349     sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", ";
350     sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", ";
351     sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
352     snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) );
353     sql += "timezone_offset=" + string( buf ) + ", ";
354     sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", ";
355     sql += "umode='" + string( account -> getUmode( ) ) + "', ";
356     sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", ";
357     sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", ";
358     sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", ";
359     sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
360     sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', ";
361     sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
362     sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) );
363     sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
364    
365     if( mysql_query( mysql, sql.c_str( ) ) ){
366     fprintf( stderr, "%s\n", sql.c_str( ) );
367     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
368     return RES_DB_QUERY_ERROR;
369     }
370    
371     //vpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧剃ク頑嶌縺阪☆繧?/span>
372     sql = "UPDATE " + dbprefix + "_vpaccount_users SET ";
373     sql += "activate=";
374     if( account -> getActivate() ){
375     sql += "1, ";
376     }else{
377     sql += "0, ";
378     }
379     sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', ";
380     sql += "institute='" + string( addSlashes( account -> getInstitute() ) ) + "', ";
381     sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', ";
382     sql += "organization='" + string( addSlashes( account -> getOrganization() ) ) + "', ";
383     sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', ";
384     sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', ";
385     sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', ";
386     sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
387     sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", ";
388     sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) );
389     sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
390    
391     if( mysql_query( mysql, sql.c_str( ) ) ){
392     fprintf( stderr, "%s\n", sql.c_str( ) );
393     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
394     return RES_DB_QUERY_ERROR;
395     }
396    
397     return RES_OK;
398 youi 1.1 }
399    
400     /**
401     *
402     * 繝ヲ繝シ繧カID荳?隕ァ
403     *
404     * @param
405     * @return
406     *
407     */
408 youi 1.2 result_t dumpUids( sessionid_t sid, const criteria_t* cri, userid_t** uids, int* uidsLen )
409 youi 1.1 {
410     return RES_ERROR;
411     }
412    
413     /**
414     *
415     * 繧ー繝ォ繝シ繝玲焚
416     *
417     * @param
418     * @return
419     *
420     */
421 youi 1.2 int getGroupCount( sessionid_t sid )
422 youi 1.1 {
423     return 0;
424     }
425    
426     /**
427     *
428     * 謇?螻槭げ繝ォ繝シ繝嶺ク?隕ァ蜿門セ?/span>
429     *
430     * @param
431     * @return
432     *
433     */
434 youi 1.2 result_t getGroupsByUid( sessionid_t sid, userid_t uid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
435 youi 1.1 {
436     return RES_ERROR;
437     }
438    
439     /**
440     *
441     * 繧ー繝ォ繝シ繝礼ョ。逅?ィゥ髯仙撫蜷医○
442     *
443     * @param
444     * @return
445     *
446     */
447 youi 1.2 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
448 youi 1.1 {
449     return RES_ERROR;
450     }
451    
452     /**
453     *
454     * 繧ー繝ォ繝シ繝悠D荳?隕ァ
455     *
456     * @param
457     * @return
458     *
459     */
460 youi 1.2 result_t dumpGids( sessionid_t sid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
461 youi 1.1 {
462     return RES_ERROR;
463     }
464    
465     /**
466     *
467     * 繧ー繝ォ繝シ繝礼ョ。逅???D蜿門セ?/span>
468     *
469     * @param
470     * @return
471     *
472     */
473 youi 1.2 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
474 youi 1.1 {
475     return RES_ERROR;
476     }
477    
478     /**
479     *
480     * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜑企勁
481     *
482     * @param
483     * @return
484     *
485     */
486 youi 1.2 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
487 youi 1.1 {
488     return RES_ERROR;
489     }
490    
491     /**
492     *
493     * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ霑ス蜉?
494     *
495     * @param
496     * @return
497     *
498     */
499 youi 1.2 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
500 youi 1.1 {
501     return RES_ERROR;
502     }
503    
504     /**
505     *
506     * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜿門セ?/span>
507     *
508     * @param
509     * @return
510     *
511     */
512 youi 1.2 result_t getMembers( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
513 youi 1.1 {
514     return RES_ERROR;
515     }
516    
517     /**
518     *
519     * 繧ー繝ォ繝シ繝励?蜑企勁
520     *
521     * @param
522     * @return
523     *
524     */
525 youi 1.2 result_t deleteGroup( sessionid_t sid, groupid_t gid )
526 youi 1.1 {
527     return RES_ERROR;
528     }
529    
530     /**
531     *
532     * 繧ー繝ォ繝シ繝励?逋サ骭イ
533     *
534     * @param
535     * @return
536     *
537     */
538 youi 1.2 result_t insertGroup( sessionid_t sid, const group_t* group )
539 youi 1.1 {
540     return RES_ERROR;
541     }
542    
543     /**
544     *
545     * 繧ー繝ォ繝シ繝励?螟画峩
546     *
547     * @param
548     * @return
549     *
550     */
551 youi 1.2 result_t updateGroup( sessionid_t sid, const group_t* group )
552 youi 1.1 {
553     return RES_ERROR;
554     }
555    
556     /**
557     *
558     * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
559     *
560     * @param
561     * @return
562     *
563     */
564 youi 1.2 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
565 youi 1.1 {
566     return RES_ERROR;
567     }
568    
569     /**
570     *
571     * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
572     *
573     * @param
574     * @return
575     *
576     */
577 youi 1.2 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, const criteria_t* cri, const group_t** groups, int* groupsLen )
578 youi 1.1 {
579     return RES_ERROR;
580     }
581    
582     /**
583     *
584     * 繝「繝?Ξ繝シ繧ソ讓ゥ髯仙撫蜷医○
585     *
586     * @param
587     * @return
588     *
589     */
590 youi 1.2 bool isModerator( sessionid_t sid, userid_t uid )
591 youi 1.1 {
592     return RES_ERROR;
593     }
594    
595     /**
596     *
597     * 繝ヲ繝シ繧カID蜿門セ?/span>
598     *
599 youi 1.7 * @param uname ID繧貞叙蠕励@縺溘>繝ヲ繝シ繧カ繝シ蜷?/span>
600     * @param uid ID繧剃サ」蜈・縺励◆縺?、画焚縺ョ繝昴う繝ウ繧ソ
601     * @return RES_ERROR | RES_OK
602     * @refer result_t
603 youi 1.1 *
604     */
605 youi 1.2 result_t getUid( const char* uname, userid_t* uid )
606 youi 1.1 {
607 youi 1.4 string sql;
608    
609 youi 1.7 if( uname == NULL ) return RES_ERROR;
610    
611     string uname2 = addSlashes( uname );
612 youi 1.10 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
613 youi 1.4 if( mysql_query( mysql, sql.c_str( ) ) ){
614 youi 1.10 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
615 youi 1.4 return RES_DB_QUERY_ERROR;
616     }
617 youi 1.10 MYSQL_RES* result = mysql_store_result( mysql ) ;
618 youi 1.4 MYSQL_ROW row = mysql_fetch_row(result);
619     if( row ){
620     *uid = atoi( row[0] );
621     mysql_free_result( result );
622     return RES_OK;
623     }else{
624     mysql_free_result( result );
625     return RES_NO_SUCH_USER;
626     }
627 youi 1.1 }
628    
629     /**
630     *
631 aga 1.8 * 繧サ繝?す繝ァ繝ウ繧剃ス懈?縺踊oops_vpaccount_session縺ォ譖ク縺崎セシ繧?縲 sessionid_t繧痴ession縺ォ霑斐☆縲?/span>
632     *
633     * @param uid xoops_users縺ョuid
634     * @param remoteHost remote ip (host order)
635     * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
636     * @return RES_OK 謌仙粥
637     * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
638     */
639     static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session )
640     {
641     result_t ret;
642     string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" +
643     unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")";
644     if ( 0 == mysql_query( mysql, sql.c_str() ) ){
645     *session = (int)mysql_insert_id(mysql);
646     ret = RES_OK;
647     }
648     else {
649     ret = RES_DB_QUERY_ERROR;
650     }
651     return ret;
652     }
653    
654    
655     /**
656     *
657 youi 1.1 * 繝ュ繧ー繧、繝ウ隱崎ィシ縺ィ繧サ繝?す繝ァ繝ウ菴懈?
658     *
659 aga 1.6 * @param uname 繝ュ繧ー繧、繝ウ蜷?/span>
660     * @param passwd 繝代せ繝ッ繝シ繝?/span>
661     * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
662     * @return RES_OK 繝ュ繧ー繧、繝ウ謌仙粥縲Tession縺ォsessionid_t繧呈嶌縺崎セシ繧薙□縲?/span>
663     * @return RES_LOGIN_FAILURE uname縺セ縺溘?passwd縺檎焚蟶ク
664     * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
665 youi 1.1 *
666     */
667 aga 1.6 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
668 youi 1.1 {
669 aga 1.6 result_t ret;
670     string sql;
671    
672     // uname, passwd -> uid
673     string escUname = addSlashes( uname );
674     string escPasswd = addSlashes( passwd );
675 youi 1.10 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
676 aga 1.6 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
677     MYSQL_RES* result = mysql_store_result( mysql );
678     if( result ){
679     MYSQL_ROW row = mysql_fetch_row(result);
680     if( row ){
681 aga 1.8 userid_t uid = atoi(row[0]);
682     ret = addSession( uid, 0, session );
683 aga 1.6 }else{
684 aga 1.9 ret = RES_LOGIN_FAILURE;
685 aga 1.6 }
686     mysql_free_result( result );
687     }else {
688     ret = RES_DB_QUERY_ERROR;
689     }
690     }else{
691     ret = RES_DB_QUERY_ERROR;
692     }
693    
694     return ret;
695 youi 1.1 }
696    
697     /**
698     *
699     * 繝ュ繧ー繧「繧ヲ繝医→繧サ繝?す繝ァ繝ウ邨ゆコ?/span>
700     *
701 aga 1.6 * @param sid session id
702     * @return 縺ェ縺?/span>
703 youi 1.1 *
704     */
705 youi 1.10 void logoutUser( sessionid_t sid )
706     {
707 aga 1.6 result_t ret;
708     string sql;
709 youi 1.10
710 aga 1.6 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
711     if ( 0 == mysql_query( mysql, sql.c_str() ) ){
712     if ( mysql_affected_rows(mysql) == 1 ){
713     // 繝ュ繧ー繧「繧ヲ繝医@縺?/span>
714     }
715     else {
716     // sid縺檎┌蜉ケ
717     }
718     }
719     else {
720     // DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
721     }
722     }
723 youi 1.1
724     /**
725     *
726     * 繧サ繝?す繝ァ繝ウ縺ョ菴懈?.<br>
727     * XOOPS縺ョsession繝??繝悶Ν縺ォ險倬鹸縺輔l縺殱ess_id縺ィ蠑墓焚sessionid縺檎ュ峨@縺代l
728     * 縺ー?茎ession_t繧剃ス懈?縺吶k縲?/span>
729 youi 1.2 * 繝??繧ソ繝吶?繧ケ縺ォ繧サ繝?す繝ァ繝ウ縺ィ蠑墓焚縺ョ諠??ア繧定ィ倬鹸縺吶k
730 youi 1.1 *
731 aga 1.8 * @param sessionid xoops縺ョsession_id
732     * @param uid xoops_users縺ョuid
733     * @param remoteHost remote ip (host order)
734     * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
735     * @return RES_OK
736     * @return RES_ERROR
737     * @return RES_DB_QUERY_ERROR
738 youi 1.1 *
739     */
740 aga 1.8 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
741 youi 1.1 {
742 aga 1.8 result_t ret;
743     string sql;
744    
745     string escSessionid = addSlashes(sessionid);
746     sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'";
747     if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
748     MYSQL_RES* result = mysql_store_result( mysql );
749     if( result ){
750     MYSQL_ROW row = mysql_fetch_row(result);
751     if( row ){
752     ret = addSession( uid, remoteHost, session );
753     }else{
754     ret = RES_ERROR;
755     }
756     mysql_free_result( result );
757     }else {
758     ret = RES_DB_QUERY_ERROR;
759     }
760     }else{
761     ret = RES_DB_QUERY_ERROR;
762     }
763    
764 aga 1.11 return ret;
765 youi 1.1 }
766    
767     /**
768     *
769     * 繧サ繝?す繝ァ繝ウ縺ョ隧ウ邏ー繧痴ession_t縺ァ蜿門セ励☆繧?<br>
770     *
771 aga 1.8 * @param sess_id
772     * @param session
773 youi 1.1 * @return
774     *
775     */
776 aga 1.8 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
777 youi 1.1 {
778 aga 1.8 result_t ret;
779     string sql;
780    
781     sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix +
782     "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id);
783     if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
784     MYSQL_RES* result = mysql_store_result( mysql );
785     if( result ){
786     MYSQL_ROW row = mysql_fetch_row(result);
787     if( row ){
788 aga 1.11 session_t *p = new session[1];
789 aga 1.8 p->setSessionID(sess_id);
790     p->setUserID(atoi(row[1]));
791     p->setDate(atoi(row[2]));
792     p->setRemoteHost(atoi(row[3]));
793     *ppsession = p;
794     ret = RES_OK;
795     }else{
796     ret = RES_NO_SUCH_SESSION;
797     }
798     mysql_free_result( result );
799     }else {
800     ret = RES_DB_QUERY_ERROR;
801     }
802     }else{
803     ret = RES_DB_QUERY_ERROR;
804     }
805    
806 aga 1.11 return ret;
807 youi 1.1 }
808 youi 1.2
809 youi 1.7 /**
810     *
811     * 繧サ繝?す繝ァ繝ウ縺ョ豁」蠖捺?ァ繧偵メ繧ァ繝?け縺吶k.
812     *
813     * @param sid 繝√ぉ繝?け縺励◆縺гession
814     * @return true 豁」蠖?/span>
815     * @return false 荳肴ュ」
816     *
817     */
818     bool isValidSessionID( sessionid_t sid )
819     {
820     string sql;
821     string sidstr;
822     char buf[ 12 ];
823     snprintf( buf, 12, "%d", sid );
824    
825 youi 1.10 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
826 youi 1.7 if( mysql_query( mysql, sql.c_str( ) ) ){
827     return false;
828     }
829 youi 1.10 MYSQL_RES* result = mysql_store_result( mysql ) ;
830 youi 1.7 MYSQL_ROW row = mysql_fetch_row(result);
831     if( row ){
832     return true;
833     }else{
834     return false;
835     }
836     }
837    
838 youi 1.2 void freeResult( account_t* ptr ){ delete[] ptr; }
839    
840     void freeResult( group_t* ptr ){ delete[] ptr; }
841    
842 aga 1.11 void freeResult( const session_t* ptr ){ delete[] ptr; }
843 youi 1.2
844     void freeResult( int* ptr ){ delete[] ptr; }
845    
846 youi 1.3 static string errstr;
847     const char* getLastErrorString()
848     {
849     return errstr.c_str( );
850     }
851    
852     void setLastErrorString( const char* str )
853     {
854     errstr = str;
855     }

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