Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/xnpal.cc

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


Revision 1.20 - (hide annotations) (download) (as text)
Wed Jan 12 04:37:43 2005 UTC (19 years, 3 months ago) by aga
Branch: MAIN
Changes since 1.19: +2 -2 lines
File MIME type: text/x-c++src
。ヲgetUserID() -> getUID().

1 aga 1.1 /*
2 aga 1.20 $Revision: 1.19 $
3 aga 1.1 VPAL: Visiome Platform Abstract Layer
4    
5     zend_parse_parameters縺ッphp4.1.0縺悟ソ?ヲ?/span>
6     .so繝輔ぃ繧、繝ォ縺ッ螟悶°繧芽ヲ九∴縺ェ縺??エ謇?縺ォ鄂ョ縺上∋縺阪??/span>
7     C++縺ァ縺ッ縲‘xtern "C"{}, BEGIN/END_EXTERN_C()縺悟ソ?ヲ√??/span>
8     */
9    
10    
11     #include <stdio.h>
12 aga 1.2 #include "criteria.h"
13     #include "common.h"
14     #include "commonal.h"
15     #include "session.h"
16     #include "group.h"
17     #include "account.h"
18 aga 1.1 #include "vpal.h"
19    
20 aga 1.2 // for inet_aton
21     #include <sys/socket.h>
22     #include <netinet/in.h>
23     #include <arpa/inet.h>
24    
25 aga 1.1 // global variables
26    
27 aga 1.18 PHP_MSHUTDOWN_FUNCTION(vpalmod)
28     {
29     uninitializeDB();
30     return SUCCESS;
31     }
32 aga 1.1
33     /* declaration of functions to be exported */
34     extern "C" {
35 aga 1.2 ZEND_FUNCTION(first_module );
36     ZEND_FUNCTION(vp_initialize_db );
37     ZEND_FUNCTION(vp_login_user );
38     ZEND_FUNCTION(vp_logout_user );
39 aga 1.4 ZEND_FUNCTION(vp_create_session );
40     ZEND_FUNCTION(vp_get_session );
41 aga 1.2 ZEND_FUNCTION(vp_is_activated );
42     ZEND_FUNCTION(vp_activate );
43     ZEND_FUNCTION(vp_get_account_count );
44     ZEND_FUNCTION(vp_delete_account );
45     ZEND_FUNCTION(vp_get_account );
46     ZEND_FUNCTION(vp_get_accounts );
47     ZEND_FUNCTION(vp_insert_account );
48     ZEND_FUNCTION(vp_update_account );
49     ZEND_FUNCTION(vp_dump_uids );
50     ZEND_FUNCTION(vp_get_group_count );
51     ZEND_FUNCTION(vp_get_groups_by_uid );
52     ZEND_FUNCTION(vp_is_group_admin );
53     ZEND_FUNCTION(vp_dump_gids );
54 aga 1.8 ZEND_FUNCTION(vp_dump_group_admins );
55 aga 1.2 ZEND_FUNCTION(vp_delete_member );
56     ZEND_FUNCTION(vp_insert_member );
57     ZEND_FUNCTION(vp_get_members );
58     ZEND_FUNCTION(vp_delete_group );
59     ZEND_FUNCTION(vp_insert_group );
60     ZEND_FUNCTION(vp_update_group );
61     ZEND_FUNCTION(vp_get_group );
62     ZEND_FUNCTION(vp_get_groups );
63     ZEND_FUNCTION(vp_is_moderator );
64     ZEND_FUNCTION(vp_get_uid );
65    
66 aga 1.10 ZEND_FUNCTION(vp_is_valid_session_id );
67 aga 1.9 ZEND_FUNCTION(vp_get_last_error_string );
68    
69 aga 1.2 ZEND_FUNCTION(vp_test_criteria );
70     ZEND_FUNCTION(vp_test_uids );
71 aga 1.1 };
72     /* compiled function list so Zend knows what's in this module */
73     zend_function_entry vpalmod_functions[] =
74     {
75 aga 1.2 ZEND_FE(first_module ,NULL)
76     ZEND_FE(vp_initialize_db ,NULL)
77     ZEND_FE(vp_login_user ,NULL)
78     ZEND_FE(vp_logout_user ,NULL)
79 aga 1.4 ZEND_FE(vp_create_session ,NULL)
80     ZEND_FE(vp_get_session ,NULL)
81 aga 1.2 ZEND_FE(vp_is_activated ,NULL)
82     ZEND_FE(vp_activate ,NULL)
83     ZEND_FE(vp_get_account_count ,NULL)
84     ZEND_FE(vp_delete_account ,NULL)
85     ZEND_FE(vp_get_account ,NULL)
86     ZEND_FE(vp_get_accounts ,NULL)
87     ZEND_FE(vp_insert_account ,NULL)
88     ZEND_FE(vp_update_account ,NULL)
89     ZEND_FE(vp_dump_uids ,NULL)
90     ZEND_FE(vp_get_group_count ,NULL)
91     ZEND_FE(vp_get_groups_by_uid ,NULL)
92     ZEND_FE(vp_is_group_admin ,NULL)
93     ZEND_FE(vp_dump_gids ,NULL)
94 aga 1.8 ZEND_FE(vp_dump_group_admins ,NULL)
95 aga 1.2 ZEND_FE(vp_delete_member ,NULL)
96     ZEND_FE(vp_insert_member ,NULL)
97     ZEND_FE(vp_get_members ,NULL)
98     ZEND_FE(vp_delete_group ,NULL)
99     ZEND_FE(vp_insert_group ,NULL)
100     ZEND_FE(vp_update_group ,NULL)
101     ZEND_FE(vp_get_group ,NULL)
102     ZEND_FE(vp_get_groups ,NULL)
103     ZEND_FE(vp_is_moderator ,NULL)
104     ZEND_FE(vp_get_uid ,NULL)
105 aga 1.10 ZEND_FE(vp_is_valid_session_id ,NULL)
106 aga 1.9 ZEND_FE(vp_get_last_error_string ,NULL)
107 aga 1.2 ZEND_FE(vp_test_criteria ,NULL)
108     ZEND_FE(vp_test_uids ,NULL)
109 aga 1.1 {NULL, NULL, NULL}
110     };
111    
112     /* compiled module information */
113     zend_module_entry vpalmod_module_entry =
114     {
115     STANDARD_MODULE_HEADER,
116     "Visiome Platform Abstract Layer",
117     vpalmod_functions,
118     NULL,
119 aga 1.18 PHP_MSHUTDOWN(vpalmod),
120 aga 1.1 NULL,
121     NULL,
122 aga 1.16 NULL,
123 aga 1.1 NO_VERSION_YET,
124     STANDARD_MODULE_PROPERTIES
125     };
126    
127     /* implement standard "stub" routine to introduce ourselves to Zend */
128     #if COMPILE_DL_FIRST_MODULE
129     BEGIN_EXTERN_C()
130     ZEND_GET_MODULE(vpalmod)
131     END_EXTERN_C()
132     #endif
133    
134 aga 1.16
135 aga 1.1 /* implement function that is meant to be made available to PHP */
136     ZEND_FUNCTION(first_module)
137     {
138     long parameter;
139     // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
140     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
141     return;
142     }
143     parameter++;
144     RETURN_LONG(parameter);
145     }
146     /** zval縺九iC縺ョ譁?ュ怜?繧貞セ励k縲?/span>
147     */
148     char *getZvalString( zval **p ){
149     convert_to_string_ex(p);
150     return Z_STRVAL_PP(p); //(**p).value.str.val;
151     }
152    
153     /** zval縺九iint繧貞セ励k縲?/span>
154     */
155     int getZvalInt( zval **p ){
156     convert_to_long_ex(p);
157     return Z_LVAL_PP(p); // (int)(**p).value.lval;
158     }
159    
160 aga 1.2 // keylen縺ッ譛ォ蟆セ縺ョ\0繧貞性繧?縲?/span>
161     static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
162     zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
163     if ( res == HASH_KEY_IS_STRING ){
164     char *p = new char[keyLen+1];
165     memcpy( p, key, keyLen );
166     p[keyLen] = 0;
167     zend_printf( " key is string[%s]<br>\n", p );
168     }
169     else {
170     zend_printf( " key is integer[%d]<br>\n", index );
171     }
172     }
173    
174    
175 aga 1.16 /** zval*縺九icriteria_t繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲ら函謌仙、ア謨励↑繧曳etResult()!=RES_OK <br>
176     criteria :
177 aga 1.2 array( 'start'=>0, 'rows'=>10,
178     'orders'=>array(
179     array('name'=>'id','order'=>'0'),
180     array('name'=>'timestamp','name'=>'1'), ...)
181     ); 縺薙s縺ェ蠖「縺ョ騾」諠ウ驟榊?
182     */
183     class zCriteria_t : public criteria {
184     private:
185     result_t result;
186 aga 1.16
187 aga 1.2 // pz: array('name'=>'timestamp','name'=>'1')
188     // 縺薙l縺九iorderby繧剃ス懈?縺励※霑ス蜉?縲?/span>
189     void setOrder( zval *pz ){
190     char *column = 0;
191     order_t order = (order_t)0;
192    
193     HashPosition pos;
194     zval **ppzTmp = 0;
195     int res2;
196     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
197     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
198     char *key = 0;
199     uint keyLen = 0;
200     ulong index = 0;
201     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
202     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
203 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
204     if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
205 aga 1.2 SEPARATE_ZVAL(ppzTmp);
206     column = getZvalString(ppzTmp);
207     // zend_printf( "column=%s<br>\n", column );
208     }
209     else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
210     SEPARATE_ZVAL(ppzTmp);
211     order = (order_t)getZvalInt(ppzTmp);
212     // zend_printf( "order=%d<br>\n", order );
213     }
214     }
215    
216     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
217     }
218     if ( column ){
219     orderby *o = new orderby( column, order );
220     addOrderBy( o );
221     }
222    
223     result = RES_OK;
224     }
225    
226     // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
227     void setOrders( zval *pz ){
228     HashPosition pos;
229    
230     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
231    
232     zval **ppzTmp = 0;
233     int res2;
234     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
235     char *key = 0;
236     uint keyLen = 0;
237     ulong index = 0;
238     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
239     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
240 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
241 aga 1.2 setOrder( *ppzTmp );
242     }
243     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
244     }
245     result = RES_OK;
246     }
247    
248     void initialize( zval *pz ){
249     HashPosition pos;
250     zval **ppzTmp = 0;
251     int res2;
252     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
253     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
254     char *key = 0;
255     uint keyLen = 0;
256     ulong index = 0;
257     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
258     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
259 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
260 aga 1.2 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
261     SEPARATE_ZVAL(ppzTmp);
262     int tmp = getZvalInt(ppzTmp);
263     // zend_printf( "start=%d<br>\n", tmp );
264     setLimit( tmp, getLimitRows() );
265     }
266     else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
267     SEPARATE_ZVAL(ppzTmp);
268     int tmp = getZvalInt(ppzTmp);
269     // zend_printf( "rows=%d<br>\n", tmp );
270     setLimit( getLimitStart(), tmp );
271     }
272     else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
273     setOrders( *ppzTmp );
274     }
275     else
276     ; // ignore unknown key
277     }
278     else
279     ; // ignore bad key
280     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
281     }
282     result = RES_OK;
283     }
284 aga 1.16
285     public:
286 aga 1.2 zCriteria_t() : criteria(){ result = RES_ERROR; }
287     zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
288     zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
289     result_t getResult(){ return result; };
290    
291     void dump(){
292     zend_printf( "dumping zCriteria...<br>\n" );
293     zend_printf( "result=%d<br>\n", (int)result );
294     zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
295     const orderby *p = headOrderBy();
296     while ( p ){
297     zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
298     p = nextOrderBy();
299     }
300     }
301     };
302    
303 aga 1.16
304     /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※long蛟、繧貞セ励k縲?/span>
305     @param ht 騾」諠ウ驟榊?
306     @param key 繧ュ繝シ
307     @param val long蛟、繧貞女縺大叙繧九?繧、繝ウ繧ソ
308     @return 謌仙粥縺ェ繧液rue
309     */
310     static bool hashGetLong( HashTable *ht, const char *key, long *val ){
311 aga 1.14 zval **tmp;
312     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
313     convert_to_long_ex( tmp );
314     *val = Z_LVAL_PP(tmp);
315     return true;
316     }
317     return false;
318     }
319    
320 aga 1.16 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※譁?ュ怜?繧貞セ励k縲?/span>
321     @param ht 騾」諠ウ驟榊?
322     @param key 繧ュ繝シ
323     @param val 譁?ュ怜?繧貞女縺大叙繧九?繧、繝ウ繧ソ
324     @return 謌仙粥縺ェ繧液rue
325     */
326     static bool hashGetString( HashTable *ht, const char *key, char **val ){
327 aga 1.14 zval **tmp;
328     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
329     convert_to_string_ex( tmp );
330     *val = Z_STRVAL_PP(tmp);
331     return true;
332     }
333     return false;
334     }
335    
336 aga 1.16 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※double蛟、繧貞セ励k縲?/span>
337     @param ht 騾」諠ウ驟榊?
338     @param key 繧ュ繝シ
339     @param val double蛟、繧貞女縺大叙繧九?繧、繝ウ繧ソ
340     @return 謌仙粥縺ェ繧液rue
341     */
342     static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
343 aga 1.14 zval **tmp;
344     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
345     convert_to_double_ex( tmp );
346     *val = Z_DVAL_PP(tmp);
347     return true;
348     }
349     return false;
350     }
351 aga 1.2
352 aga 1.16 /** zval*縺九iaccount繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
353     逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
354     */
355 aga 1.2 class zAccount_t : public account {
356     private:
357     result_t result;
358     void initialize(zval *pz){
359 aga 1.14 HashTable *ht = Z_ARRVAL_P(pz);
360     long l;
361     char *p;
362     double d;
363     if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
364     if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
365     if ( hashGetString( ht, "name" , &p ) ) setName ( p );
366     if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
367     if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
368     if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
369     if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
370     if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
371     if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
372     if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
373     if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
374     if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
375     if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
376     if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
377     if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
378     if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
379     if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
380     if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
381     if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
382     if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
383     if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
384     if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
385     if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
386     if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
387     if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
388     if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
389     if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
390     if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
391     if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
392     if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
393     if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
394     if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
395     if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
396 aga 1.16 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
397 aga 1.14 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
398 aga 1.16 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
399 aga 1.14 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
400     if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
401     if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
402     if ( hashGetString( ht, "base_url" , &p ) ) setBaseURL ( p );
403     if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
404     if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
405    
406     result = RES_OK;
407 aga 1.2 }
408 aga 1.16 public:
409 aga 1.2 zAccount_t() : account(){ result = RES_ERROR; }
410 aga 1.16
411     /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
412     @param pz array( 'uid'=>1, 'uname'=>'root', ... ); 縺薙s縺ェ蠖「縺ョ騾」諠ウ驟榊? */
413 aga 1.2 zAccount_t( zval *pz ) : account(){ initialize(pz); }
414     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
415     result_t getResult(){ return result; };
416     };
417    
418 aga 1.16 /** zval*縺九i(userid_t *puid,int uidLen)繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
419     逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
420 aga 1.2 */
421     class zUIDs_t {
422     private:
423     result_t result;
424     userid_t *pUID;
425     int len;
426     public:
427     zUIDs_t(){
428     pUID = 0;
429     len = 0;
430     result = RES_ERROR;
431     }
432    
433 aga 1.16 /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
434     @param pza array( '1', '3', '4', '6', ... ); 縺薙s縺ェ蠖「縺ョ驟榊? */
435 aga 1.2 zUIDs_t( zval *pza ){
436     pUID = 0;
437     len = 0;
438     result = RES_ERROR;
439    
440     if ( Z_TYPE_P(pza) != IS_ARRAY ){
441     result = RES_ERROR;
442     }
443     else {
444     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
445     if(len == 0) {
446     pUID = new userid_t[1];
447     result = RES_OK;
448     }
449     else {
450     /* php/ext/standard/string.c 縺ョ implode縺ョ縺ゅ◆繧翫r蜿り??↓縲?/span>
451     zend_hash_*縺ョ繝峨く繝・繝。繝ウ繝医▲縺ヲ縺ゅk縺ョ縺?繧阪≧縺具シ?/span>
452     */
453     zval **tmp;
454     HashPosition pos;
455     int i = 0;
456     pUID = new userid_t[len];
457    
458     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
459     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
460     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html 蜿ら?
461     convert_to_long_ex(tmp);
462     if ( i < len )
463     pUID[i++] = Z_LVAL_PP(tmp);
464     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
465     }
466     len = i;
467     result = RES_OK;
468     }
469     }
470     }
471    
472     ~zUIDs_t(){
473     if ( pUID ) delete[] pUID;
474     }
475     result_t getResult(){ return result; }
476     userid_t *getPUID(){ return pUID; }
477     int getLen(){ return len; }
478     void dump(){
479     zend_printf( "dumping zUIDs...<br>\n" );
480     zend_printf( "result=%d<br>\n", (int)result );
481     zend_printf( "len=%d<br>\n", len );
482     for ( int i = 0; i < len; i++ ){
483     zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
484     }
485     }
486     };
487    
488 aga 1.8 /**
489     *
490     * uids_t縺ョ驟榊?繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
491     *
492 aga 1.16 * @param pUID 螟画鋤蜈??userid_t縺ョ驟榊?
493 aga 1.8 * @param len pUID縺ョ驟榊?縺ョ髟キ縺?/span>
494     * @param pz 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
495     * @return RES_OK
496     *
497     */
498 aga 1.4 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
499     {
500 aga 1.8 zend_hash_clean( Z_ARRVAL_PP(ppz) );
501 aga 1.2
502     // add UIDs
503     for ( int i = 0; i < len; i++ ){
504 aga 1.8 add_next_index_long(*ppz, (long)(pUID[i]) );
505 aga 1.2 }
506    
507     return RES_OK;
508     }
509 aga 1.16 /**
510     *
511     * groupid_t縺ョ驟榊?繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
512     * @param pGID 螟画鋤蜈??groupid_t縺ョ驟榊?
513     * @param len pGID縺ョ驟榊?縺ョ髟キ縺?/span>
514     * @param ppz 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
515     * @return RES_OK
516     *
517     */
518 aga 1.4 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
519     {
520 aga 1.8 zend_hash_clean( Z_ARRVAL_PP(ppz) );
521 aga 1.2
522     // add GIDs
523     for ( int i = 0; i < len; i++ ){
524 aga 1.8 add_next_index_long(*ppz, (long)(pGID[i]) );
525 aga 1.2 }
526    
527     return RES_OK;
528     }
529    
530 aga 1.16
531     /**
532     *
533     * account_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
534     * @param pAccount 螟画鋤蜈??account_t*
535     * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
536     * @return RES_OK
537     *
538     */
539 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
540     {
541     zend_hash_clean( z -> value.ht );
542    
543 youi 1.7 add_assoc_long( z, "uid", pAccount -> getUID( ) );
544 youi 1.6 add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
545     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
546     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
547     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
548     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
549     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
550     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
551     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
552     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
553     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
554     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
555     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
556     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
557     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
558     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
559     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
560     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
561     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
562     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
563     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
564     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
565     add_assoc_long( z, "level", pAccount -> getLevel( ) );
566     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
567     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
568     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
569     add_assoc_long( z, "rank", pAccount -> getRank( ) );
570     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
571     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
572     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
573     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
574    
575     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
576     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
577 youi 1.15 add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
578 youi 1.6 add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
579 youi 1.15 add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
580 youi 1.6 add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
581     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
582     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
583     add_assoc_string( z, "base_url", ( char* )pAccount -> getBaseURL( ), 1 );
584     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
585     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
586     return RES_OK;
587     }
588 aga 1.16 /**
589     *
590     * 隍?焚縺ョaccount_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ョ驟榊?縺ォ螟画鋤縺吶k
591     * @param pAccounts 螟画鋤蜈??account_t*
592     * @param accountsLen pAccounts縺ョ驟榊?縺ョ髟キ縺?/span>
593     * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
594     * @return RES_OK
595     *
596     z: 縺薙s縺ェ諢溘§縺ョ驟榊?縺ォ縺ェ繧九?や? <br>
597 aga 1.2 array(
598     array(
599     'uid'=>100,
600     'activate'=>1,
601 youi 1.15 'division'=>'foo',
602 aga 1.2 'tel'=>'123-456-789',
603     ...
604     ),
605     ...
606     )
607 aga 1.16 */
608 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
609 aga 1.4 {
610 youi 1.6 zend_hash_clean( z -> value.ht );
611     for( int i = 0; i < accountsLen; i++ ){
612     zval *new_array;
613     MAKE_STD_ZVAL(new_array);
614     if(array_init(new_array) != SUCCESS){
615     return RES_ERROR;
616     }
617     add_index_zval( z, i, new_array );
618     accountToZval( &pAccounts[ i ], new_array );
619     }
620     return RES_OK;
621 aga 1.2 }
622    
623 aga 1.16 /**
624     *
625     * 隍?焚縺ョgroup_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ョ驟榊?縺ォ螟画鋤縺吶k
626     * @param pGroups 螟画鋤蜈??group_t*
627     * @param groupsLen pGroups縺ョ驟榊?縺ョ髟キ縺?/span>
628     * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
629     * @return RES_OK
630     *
631     z: 縺薙s縺ェ諢溘§縺ョ驟榊?縺ォ縺ェ繧九?や? <br>
632     array(
633     array(
634     'gid'=>1,
635     'gname'=>'foo group',
636     'gdesc'=>'group of foo'
637     ),
638     ...
639     )
640     */
641 youi 1.6 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
642 aga 1.4 {
643 youi 1.6 zend_hash_clean( z -> value.ht );
644     for( int i = 0; i < groupsLen; i++ ){
645     zval *new_array;
646     MAKE_STD_ZVAL(new_array);
647     if(array_init(new_array) != SUCCESS){
648     return RES_ERROR;
649     }
650     add_index_zval( z, i, new_array );
651     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
652     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
653     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
654     }
655     return RES_OK;
656 aga 1.2 }
657    
658 youi 1.7 /**
659     *
660     * group_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
661     *
662 aga 1.16 * @param pGroup 螟画鋤蜈??繧ー繝ォ繝シ繝玲ュ蝣ア
663 youi 1.7 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
664     * @return RES_OK
665     *
666     */
667     result_t groupToZval( const group_t *pGroup, zval *z )
668 youi 1.6 {
669     zend_hash_clean( z -> value.ht );
670     add_assoc_long( z, "gid", pGroup -> getGID( ) );
671     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
672     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
673     return RES_OK;
674     }
675    
676 aga 1.16 /**
677     *
678     * PHP縺ョ騾」諠ウ驟榊?縺ョ蜀?ョケ繧暖roup_t縺ォ螟画鋤縺吶k
679     *
680     * @param z 螟画鋤蜈??騾」諠ウ驟榊?
681     * @param pGroup 螟画鋤邨先棡繧呈嶌縺崎セシ繧?繧ー繝ォ繝シ繝?/span>
682     * @return RES_OK
683     *
684     */
685 youi 1.7 result_t zvalToGroup( zval *z, group_t *pGroup )
686     {
687     zval **tmp;
688     HashPosition pos;
689     int i = 0;
690     char* key = 0;
691    
692     key = "gid";
693 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
694     convert_to_long_ex( tmp ) ;
695     pGroup -> setGID( (*tmp) -> value.lval );
696     }
697 youi 1.7 key = "gname";
698 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
699     convert_to_string_ex( tmp ) ;
700     pGroup -> setGname( (*tmp) -> value.str.val );
701     }
702 youi 1.7 key = "gdesc";
703 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
704     convert_to_string_ex( tmp ) ;
705     pGroup -> setDesc( (*tmp) -> value.str.val );
706     }
707 youi 1.7 return RES_OK;
708     }
709    
710 aga 1.16 /**
711     *
712     * session_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
713     *
714     * @param pSession 螟画鋤蜈??session_t
715     * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
716     * @return RES_OK
717     *
718     */
719     result_t sessionToZval( const session_t *pSession, zval *z )
720     {
721     string sessionID(unsignedIntToString(pSession->getSessionID()));
722     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
723    
724     string date(unsignedIntToString((unsigned int)pSession->getDate()));
725     add_assoc_string(z, "date", (char *)date.c_str(), 1);
726    
727 aga 1.20 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
728 aga 1.16 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
729    
730     return RES_OK;
731     }
732    
733 youi 1.7
734 aga 1.16
735     /** 謖?ョ壹@縺溘げ繝ォ繝シ繝励?諠??ア繧貞セ励k<br>
736     int vp_get_group( int sid, int gid, array group );
737     @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
738     @param gid VP 縺ョ group_id
739     @param group 邨先棡繧貞女縺大叙繧矩?蛻?/span>
740     @return 0 success <br>
741     */
742 youi 1.6 ZEND_FUNCTION(vp_get_group)
743 aga 1.4 {
744 youi 1.6 long sid, gid;
745     zval *zgroup;
746    
747     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
748     &sid, &gid, &zgroup) == FAILURE) {
749     return;
750     }
751    
752     const group_t *pgroup;
753     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
754     if ( RES_OK == result ){
755 youi 1.7 groupToZval( pgroup, zgroup );
756 youi 1.19 freeGroup( pgroup );
757 youi 1.6 }
758    
759     RETURN_LONG(result);
760     }
761    
762 aga 1.2
763 aga 1.16 /** 謖?ョ壹@縺溘げ繝ォ繝シ繝?隍?焚)縺ョ諠??ア繧貞セ励k<br>
764     vp_get_groups( int sid, array gids, array criteria, array groups );
765     @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
766     @param gids VP 縺ョ group_id 縺ョ驟榊?
767     @param criteria 譚。莉カ
768     @param groups 邨先棡繧貞女縺大叙繧矩?蛻励?驟榊?
769     @return 0 success <br>
770     */
771 youi 1.6 ZEND_FUNCTION(vp_get_groups)
772     {
773     result_t result;
774     long sid, uid;
775     zval *zcriteria;
776     zval *zgids;
777     zval *zgroups;
778     zval **ppzTmp = 0;
779     HashPosition pos;
780     int res2;
781     int gidsLen;
782     const group_t* groups;
783     int groupsLen;
784    
785     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
786     &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
787     return;
788     }
789    
790     //gids縺ォ繧ー繝ォ繝シ繝悠D繧偵さ繝斐?縺吶k
791     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
792     groupid_t *gids = new groupid_t[ gidsLen ];
793     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
794     for( int i = 0; i < gidsLen; i++ ){
795     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
796     SEPARATE_ZVAL(ppzTmp);
797     convert_to_long_ex(ppzTmp);
798     gids[ i ] = Z_LVAL_PP(ppzTmp);
799     }
800     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
801     }
802    
803     zCriteria_t zcri(zcriteria);
804     result = zcri.getResult();
805     if ( RES_OK == result ){
806     result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
807     if ( RES_OK == result ){
808 aga 1.14 groupsToZval( groups, groupsLen, zgroups );
809 youi 1.6 delete[] gids;
810 youi 1.19 freeGroup( groups );
811 youi 1.6 }
812     }
813     RETURN_LONG(result);
814     }
815    
816    
817 aga 1.16 /** 謖?ョ壹@縺溘Θ繝シ繧カ縺後Δ繝?Ξ繝シ繧ソ縺九←縺?°繧定ェソ縺ケ繧?lt;br>
818     int vp_is_moderator(int sid, int uid)
819     @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
820     @param uid xoops 縺ョ uid (xoops_users.uid)
821     @return true 繝「繝?Ξ繝シ繧ソ縺ァ縺ゅk <br>
822     */
823 youi 1.6 ZEND_FUNCTION(vp_is_moderator)
824     {
825     long vpSessionID;
826     userid_t uid;
827    
828     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
829     &vpSessionID, &uid) == FAILURE) {
830     return;
831     }
832    
833     bool result = isModerator( (sessionid_t)vpSessionID, uid );
834     RETURN_BOOL(result)
835     }
836    
837 aga 1.16 /** 繝ヲ繝シ繧カ蜷阪°繧疫id繧定ェソ縺ケ繧?lt;br>
838     int vp_get_uid(string uname,int &uid)
839     @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
840     @param uname xoops 縺ョ uname (xoops_users.uname)
841     @param uid xoops 縺ョ uid (xoops_users.uid) 繧貞女縺大叙繧句、画焚
842     @return 0 success
843     */
844 youi 1.6 ZEND_FUNCTION(vp_get_uid)
845     {
846     char *uname;
847     int unameLen;
848 aga 1.14 zval *zuid;
849 youi 1.6 userid_t uid;
850    
851 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
852     &uname, &unameLen, &zuid) == FAILURE) {
853 youi 1.6 return;
854     }
855    
856 aga 1.14 if (!PZVAL_IS_REF(zuid)) {
857     zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
858     RETURN_LONG(RES_PHP_NONREF);
859     }
860    
861 youi 1.6 string strUname( uname, unameLen );
862     result_t result = getUid( strUname.c_str(), &uid );
863 aga 1.14 ZVAL_LONG(zuid, (long)uid);
864     RETURN_LONG((long)result);
865 aga 1.2 }
866    
867     ZEND_FUNCTION(vp_test_criteria)
868     {
869     zval *z;
870    
871     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
872     &z) == FAILURE) {
873     return;
874     }
875     zend_printf("zend_printf...<br>\n");
876     zCriteria_t zcri(z);
877     zcri.dump();
878     RETURN_FALSE
879     }
880    
881     ZEND_FUNCTION(vp_test_uids)
882     {
883     zval *z;
884    
885     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
886     &z) == FAILURE) {
887     return;
888     }
889     zend_printf("zend_printf...<br>\n");
890     zUIDs_t zuids(z);
891     zuids.dump();
892     RETURN_FALSE
893     }
894    
895    
896    
897 aga 1.4 /** DB縺ォ謗・邯壹☆繧九?よ里縺ォ謗・邯壻クュ縺ョ謗・邯壹?髢峨§繧峨l繧九??lt;br>
898     int initialize_db( string host[, string user[, string password[, string dbname[, string prefix]]]] );
899 aga 1.2 @param host 謗・邯壼?縲ら怐逡・譎ゅ?NULL
900 aga 1.1 @param user DB謗・邯壽凾縺ョ繝ヲ繝シ繧カ蜷阪?ら怐逡・譎ゅ?NULL
901     @param password DB謗・邯壽凾縺ョ繝代せ繝ッ繝シ繝峨?ら怐逡・譎ゅ?NULL
902 aga 1.2 @param dbname DB謗・邯壽凾縺ョDB蜷阪?ら怐逡・譎ゅ?""
903     @param prefix XOOPS DB 縺ョprefix縲?/span>
904 aga 1.1 @return 0 success <br>
905     */
906     ZEND_FUNCTION(vp_initialize_db)
907     {
908     zval **parameters[5];
909     char *host;
910     char *user;
911 aga 1.2 char *password;
912     char *dbname;
913     char *prefix;
914 aga 1.1
915     /* get the number of arguments */
916     int argNum = ZEND_NUM_ARGS();
917     if (argNum > 5)
918     WRONG_PARAM_COUNT;
919    
920     /* argument count is correct, now retrieve arguments */
921     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
922     WRONG_PARAM_COUNT;
923    
924 aga 1.2 if (argNum < 1) host = NULL;
925 aga 1.1 else host = getZvalString( parameters[0] );
926    
927     if (argNum < 2) user = NULL;
928     else user = getZvalString( parameters[1] );
929    
930 aga 1.2 if (argNum < 3) password = NULL;
931     else password = getZvalString( parameters[2] );
932 aga 1.1
933 aga 1.2 if (argNum < 4) dbname = "";
934     else dbname = getZvalString( parameters[3] );
935 aga 1.1
936 aga 1.2 if (argNum < 5) prefix = "";
937     else prefix = getZvalString( parameters[4] );
938 aga 1.1
939 aga 1.2 result_t result = initializeDB( host, user, password, dbname, prefix );
940 aga 1.1
941 aga 1.2 RETURN_LONG(result);
942 aga 1.1 }
943    
944 aga 1.4 /** 繝ュ繧ー繧、繝ウ縺吶k縲?lt;br>
945 aga 1.14 int vp_login_user(string uname, string password, int &session_id)
946 aga 1.4 @param uname 繝ヲ繝シ繧カ蜷?xoops_users.uname)
947     @param password 繝代せ繝ッ繝シ繝?md5(password)=xoops_users.pass)
948     @return 0 success
949     */
950 aga 1.1 ZEND_FUNCTION(vp_login_user)
951     {
952     char *uname;
953     int unameLen;
954     char *passwd;
955     int passwdLen;
956 aga 1.14 zval *zVPSessionID;
957 aga 1.1
958 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
959     &uname, &unameLen, &passwd, &passwdLen, &zVPSessionID) == FAILURE) {
960 aga 1.1 return;
961     }
962    
963 aga 1.14 if (!PZVAL_IS_REF(zVPSessionID)) {
964     zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
965     RETURN_LONG(RES_PHP_NONREF);
966     }
967    
968 aga 1.4 sessionid_t vpSessionID;
969 aga 1.5 result_t result = loginUser( uname, passwd, &vpSessionID );
970 aga 1.14 if ( result == RES_OK )
971     ZVAL_LONG(zVPSessionID, (long)vpSessionID);
972     RETURN_LONG((long)result);
973 aga 1.1 }
974    
975 aga 1.4 /** 繝ュ繧ー繧「繧ヲ繝医☆繧九??lt;br>
976     void vp_logout_user(int vp_session_id)
977 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
978 aga 1.4 @return 縺ェ縺?/span>
979     */
980 aga 1.1 ZEND_FUNCTION(vp_logout_user)
981     {
982 aga 1.4 long vpSessionID;
983 aga 1.1
984 aga 1.4 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &vpSessionID) == FAILURE) {
985 aga 1.1 return;
986     }
987 aga 1.4 logoutUser( (sessionid_t)vpSessionID );
988 aga 1.1
989     RETURN_NULL();
990     }
991    
992 aga 1.16 /** VP縺ョ繧サ繝?す繝ァ繝ウID 菴懈?<br>
993 aga 1.14 int vp_create_session( string xoops_sess_id, int uid, int &session )
994 aga 1.16 @param xoops_sess_id xoops縺ョ繧サ繝?す繝ァ繝ウID
995 aga 1.4 @param uid xoops 縺ョ uid (xoops_users.uid)
996 aga 1.16 @param session 菴懈?縺励◆VP縺ョsession繧貞女縺大叙繧句、画焚
997 aga 1.14 @return 0 謌仙粥
998 aga 1.4 */
999 aga 1.2 ZEND_FUNCTION(vp_create_session)
1000     {
1001     char *xoopsSessionID;
1002     int xoopsSessionIDLen;
1003 aga 1.5 long uid;
1004 aga 1.14 zval *zVPSessionID;
1005 aga 1.2
1006 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1007     &xoopsSessionID, &xoopsSessionIDLen, &uid, &zVPSessionID) == FAILURE) {
1008 aga 1.2 return;
1009     }
1010    
1011 aga 1.14 if (!PZVAL_IS_REF(zVPSessionID)) {
1012     zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1013     RETURN_LONG(RES_PHP_NONREF);
1014     }
1015    
1016 aga 1.4 sessionid_t vpSessionID = 0;
1017     result_t result = createSession( xoopsSessionID, (userid_t)uid, &vpSessionID );
1018 aga 1.14 if ( result == RES_OK )
1019     ZVAL_LONG(zVPSessionID, (long)vpSessionID);
1020     RETURN_LONG((long)result);
1021 aga 1.4 }
1022    
1023 aga 1.16 /** VP 縺ョ session 縺ョ隧ウ邏ー諠??ア繧貞セ励k<br>
1024 aga 1.4 int vp_get_session( int vp_session_id, array session_info )
1025 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1026 aga 1.4 @param session_info 邨先棡繧貞女縺大叙繧矩?蛻?/span>
1027     @return 0 success
1028     */
1029     ZEND_FUNCTION(vp_get_session)
1030     {
1031     long vpSessionID;
1032     zval *sessionInfo;
1033     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1034     &vpSessionID, &sessionInfo) == FAILURE) {
1035     return;
1036     }
1037     const session_t *session = 0;
1038     result_t result = getSession( (sessionid_t)vpSessionID, &session );
1039     if ( result == RES_OK ){
1040     sessionToZval( session, sessionInfo );
1041 youi 1.19 freeSession( session );
1042 aga 1.4 }
1043 aga 1.2
1044 aga 1.4 RETURN_LONG((long)result);
1045 aga 1.2 }
1046 aga 1.1
1047 aga 1.16 /** 繝ヲ繝シ繧カ縺ョactivate迥カ諷九r蜿門セ励☆繧?lt;br>
1048 aga 1.5 bool vp_is_activated( int vp_session_id, int user_id )
1049 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1050 aga 1.5 @param user_id xoops_users.uid
1051     @return 0 success
1052     */
1053 aga 1.2 ZEND_FUNCTION(vp_is_activated)
1054     {
1055     long sid, uid;
1056    
1057 aga 1.5 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1058 aga 1.2 return;
1059     }
1060    
1061     bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1062    
1063     RETURN_BOOL(result);
1064     }
1065 aga 1.1
1066 youi 1.17 /** activate縺吶k縲?lt;br>
1067     bool vp_activate( int vp_session_id, int user_id, bool activated )
1068     @param vp_session_id vp 縺ョ session id
1069 aga 1.5 @param user_id xoops_users.uid
1070     @param activated true:activate, false:inactivate
1071     @return 0 success
1072     */
1073 aga 1.2 ZEND_FUNCTION(vp_activate)
1074     {
1075     long sid, uid;
1076     bool activated;
1077    
1078     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1079     &sid, &uid, &activated) == FAILURE) {
1080     return;
1081     }
1082    
1083     result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1084    
1085     RETURN_LONG(result);
1086     }
1087 aga 1.1
1088 aga 1.16 /** VP縺ョ繧「繧ォ繧ヲ繝ウ繝域焚繧貞セ励k縲?lt;br>
1089 aga 1.5 int vp_get_account_count( int vp_session_id )
1090 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1091 aga 1.5 @return 0 success
1092     */
1093 aga 1.2 ZEND_FUNCTION(vp_get_account_count)
1094     {
1095     long sid;
1096    
1097     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1098     &sid) == FAILURE) {
1099     return;
1100     }
1101    
1102     long count = getAccountCount( (sessionid_t)sid );
1103     RETURN_LONG(count);
1104     }
1105 aga 1.1
1106 aga 1.5 /** 繧「繧ォ繧ヲ繝ウ繝医r蜑企勁縺吶k縲?lt;br>
1107     bool vp_delete_account( int vp_session_id, int user_id )
1108 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1109 aga 1.5 @param user_id xoops_users.uid
1110     @return 0 success
1111     */
1112 aga 1.2 ZEND_FUNCTION(vp_delete_account)
1113     {
1114     long sid, uid;
1115    
1116     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1117     &sid, &uid) == FAILURE) {
1118     return;
1119     }
1120    
1121     result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1122    
1123     RETURN_LONG(result);
1124     }
1125 aga 1.1
1126 aga 1.5 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞セ励k縲?lt;br>
1127     int vp_get_account( int vp_session_id, int user_id, array account_info )
1128 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1129 aga 1.5 @param user_id xoops_users.uid
1130     @param account_info 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞女縺大叙繧矩?」諠ウ驟榊?
1131     @return 0 success
1132     */
1133 aga 1.2 ZEND_FUNCTION(vp_get_account)
1134     {
1135     long sid, uid;
1136     zval *zaccount;
1137    
1138     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1139     &sid, &uid, &zaccount) == FAILURE) {
1140 youi 1.6 fprintf( stderr, "error occured " );
1141 aga 1.2 return;
1142     }
1143    
1144     const account_t *paccount;
1145     result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1146     if ( RES_OK == result ){
1147     accountToZval( paccount, zaccount );
1148 youi 1.19 freeAccount( paccount );
1149 aga 1.2 }
1150    
1151     RETURN_LONG(result);
1152     }
1153 aga 1.1
1154 aga 1.5 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧「繧ォ繧ヲ繝ウ繝医?諠??ア繧貞セ励k縲?lt;br>
1155     int vp_get_accoutns( int sid, array uids, array criteria, array accounts );
1156 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1157 aga 1.5 @param user_id xoops_users.uid
1158     @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1159     @param account_info 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞女縺大叙繧矩?」諠ウ驟榊?
1160     @return 0 success
1161     */
1162 aga 1.2 ZEND_FUNCTION(vp_get_accounts)
1163     {
1164     result_t result;
1165     long sid;
1166     zval *zuids;
1167     zval *zcriteria;
1168     zval *zaccount;
1169    
1170     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1171     &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1172     return;
1173     }
1174    
1175     zCriteria_t zcri(zcriteria);
1176     result = zcri.getResult();
1177     if ( RES_OK == result ){
1178     zUIDs_t zUIDs(zuids);
1179     result = zUIDs.getResult();
1180     if ( RES_OK == result ){
1181     const account_t *paccounts;
1182     int accountLen;
1183     result = getAccounts( (sessionid_t)sid,
1184     zUIDs.getPUID(), zUIDs.getLen(),
1185     &zcri, &paccounts, &accountLen );
1186     if ( RES_OK == result ){
1187     accountsToZval( paccounts, accountLen, zaccount );
1188 youi 1.19 freeAccount( paccounts );
1189 aga 1.2 }
1190     }
1191     }
1192    
1193     RETURN_LONG(result);
1194     }
1195 aga 1.1
1196 youi 1.17 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定ィ倬鹸縺吶k縲?lt;br>
1197     int vp_insert_account( int sid, array account_info, int &user_id );
1198     @param vp_session_id vp 縺ョ session id
1199     @param account_info 險倬鹸縺励◆縺?い繧ォ繧ヲ繝ウ繝医?諠??ア
1200     @param user_id 繝ヲ繝シ繧カID(xoops_users.uid)繧呈嶌縺崎セシ繧?繝ェ繝輔ぃ繝ャ繝ウ繧ケ
1201 aga 1.5 @return 0 success
1202     */
1203 aga 1.2 ZEND_FUNCTION(vp_insert_account)
1204     {
1205     result_t result;
1206     long sid;
1207     zval *zaccount;
1208 youi 1.17 zval *zuid;
1209     userid_t uid;
1210 aga 1.2
1211 youi 1.17 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1212     &sid, &zaccount, &zuid) == FAILURE) {
1213 aga 1.2 return;
1214     }
1215    
1216     zAccount_t zacc(zaccount);
1217     result = zacc.getResult();
1218     if ( RES_OK == result ){
1219 youi 1.17 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1220 aga 1.2 }
1221 youi 1.17 zuid -> type = IS_LONG;
1222     zuid -> value.lval = uid;
1223 aga 1.2 RETURN_LONG(result);
1224     }
1225 aga 1.1
1226 aga 1.5 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧呈峩譁ー縺吶k縲?lt;br>
1227     int vp_update_account( int sid, array account );
1228 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1229 aga 1.5 @param account_info 譖ク縺崎セシ繧?縺ケ縺阪い繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定。ィ縺咎?」諠ウ驟榊?
1230     @return 0 success
1231     */
1232 aga 1.2 ZEND_FUNCTION(vp_update_account)
1233     {
1234     result_t result;
1235     long sid;
1236     zval *zaccount;
1237    
1238     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1239     &sid, &zaccount) == FAILURE) {
1240     return;
1241     }
1242    
1243     zAccount_t zacc(zaccount);
1244     result = zacc.getResult();
1245     if ( RES_OK == result ){
1246     result = updateAccount( (sessionid_t)sid, &zacc );
1247     }
1248    
1249     RETURN_LONG(result);
1250     }
1251 aga 1.1
1252 aga 1.5 /** 譚。莉カ縺ォ蜷医≧繧「繧ォ繧ヲ繝ウ繝医?uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1253     int vp_dump_uids( int vp_session_id, array criteria, array uids );
1254 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1255 aga 1.5 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1256     @param uids uid繧貞女縺大叙繧矩?蛻?/span>
1257     @return 0 success
1258     */
1259 aga 1.2 ZEND_FUNCTION(vp_dump_uids)
1260     {
1261     result_t result;
1262     long sid;
1263     zval *zcriteria;
1264     zval *zuids;
1265    
1266     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1267     &sid, &zcriteria, &zuids) == FAILURE) {
1268     return;
1269     }
1270    
1271     zCriteria_t zcri(zcriteria);
1272     result = zcri.getResult();
1273     if ( RES_OK == result ){
1274     userid_t *puid;
1275     int uidLen;
1276     result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1277     if ( RES_OK == result ){
1278     uidsToZval( puid, uidLen, &zuids );
1279 youi 1.19 freeUID( puid );
1280 aga 1.2 }
1281     }
1282    
1283     RETURN_LONG(result);
1284     }
1285 aga 1.1
1286 aga 1.5 /** VP縺ョ繧ー繝ォ繝シ繝励?謨ー繧貞セ励k<br>
1287 aga 1.16 int vp_get_group_count( int vp_session_id );
1288     @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1289 aga 1.5 @return 繧ー繝ォ繝シ繝玲焚
1290     */
1291 aga 1.2 ZEND_FUNCTION(vp_get_group_count)
1292 aga 1.1 {
1293 aga 1.2 result_t result;
1294     long sid;
1295    
1296     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1297     &sid) == FAILURE) {
1298     return;
1299     }
1300    
1301     int count = getGroupCount( (sessionid_t)sid );
1302    
1303     RETURN_LONG(count);
1304     }
1305 aga 1.1
1306 aga 1.5 /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺悟ア槭☆繧ー繝ォ繝シ繝励〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid繧貞セ励k<br>
1307 aga 1.16 int vp_get_group_by_uid( int vp_session_id, int uid, array criteria, array gids );
1308     @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1309 aga 1.5 @param user_id xoops_users.uid
1310     @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1311     @param gids gid繧貞女縺大叙繧矩?蛻?/span>
1312     @return 0 success
1313     */
1314 aga 1.2 ZEND_FUNCTION(vp_get_groups_by_uid)
1315     {
1316     result_t result;
1317     long sid, uid;
1318     zval *zcriteria;
1319     zval *zgids;
1320    
1321     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1322     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1323     return;
1324 aga 1.1 }
1325    
1326 aga 1.2 zCriteria_t zcri(zcriteria);
1327     result = zcri.getResult();
1328     if ( RES_OK == result ){
1329     groupid_t *pgids;
1330     int gidLen;
1331     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1332     if ( RES_OK == result ){
1333     gidsToZval( pgids, gidLen, &zgids );
1334 youi 1.19 freeGID( pgids );
1335 aga 1.2 }
1336 aga 1.1 }
1337    
1338 aga 1.2 RETURN_LONG(result);
1339     }
1340    
1341    
1342 aga 1.5
1343     /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺携id縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?繧ー繝ォ繝シ繝礼ョ。逅???°縺ゥ縺?°繧貞セ励k<br>
1344     int vp_is_group_admin( int sid, int gid, int uid );
1345 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1346 aga 1.5 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1347     @param user_id xoops_users.uid
1348     @return true: 繧ー繝ォ繝シ繝礼ョ。逅???〒縺ゅk縲?/span>
1349     @return false: 繧ー繝ォ繝シ繝礼ョ。逅???〒縺ェ縺??ゅ≠繧九>縺ッ繧ィ繝ゥ繝シ縺ァ縺ゅk縲?/span>
1350     */
1351 aga 1.2 ZEND_FUNCTION(vp_is_group_admin)
1352     {
1353     result_t result;
1354     long sid, gid, uid;
1355    
1356     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1357     &sid, &gid, &uid) == FAILURE) {
1358     return;
1359 aga 1.1 }
1360    
1361 aga 1.2 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1362 aga 1.1
1363 aga 1.2 RETURN_BOOL(b);
1364     }
1365    
1366 aga 1.5 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1367     int vp_dump_gids( int sid, array criteria, array gids );
1368 aga 1.16 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1369 aga 1.5 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1370     @param gids gid繧貞女縺大叙繧矩?蛻?/span>
1371     @return 0 success
1372     */
1373 aga 1.2 ZEND_FUNCTION(vp_dump_gids)
1374     {
1375     result_t result;
1376     long sid;
1377     zval *zcriteria;
1378     zval *zgids;
1379    
1380     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1381     &sid, &zcriteria, &zgids) == FAILURE) {
1382     return;
1383     }
1384 aga 1.1
1385 aga 1.2 zCriteria_t zcri(zcriteria);
1386     result = zcri.getResult();
1387     if ( RES_OK == result ){
1388     groupid_t *pgid;
1389     int gidLen;
1390     result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
1391     if ( RES_OK == result ){
1392     gidsToZval( pgid, gidLen, &zgids );
1393 youi 1.19 freeGID( pgid );
1394 aga 1.1 }
1395     }
1396    
1397 aga 1.2 RETURN_LONG(result);
1398 aga 1.1 }
1399 aga 1.8
1400     /** gid縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?邂。逅???〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝礼ョ。逅????uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1401     int vp_dump_group_admins(int sid, int group_id, array criteria, array uids )
1402 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1403     @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1404 aga 1.8 @param criteria 譚。莉カ
1405     @param uids uid縺ョ荳?隕ァ繧貞女縺大叙繧矩?蛻?/span>
1406     @return 0 success
1407     */
1408    
1409     ZEND_FUNCTION(vp_dump_group_admins)
1410     {
1411     long sid, gid;
1412     zval *zcriteria;
1413     zval *zuids;
1414    
1415     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1416     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1417     return;
1418     }
1419    
1420     zCriteria_t zcri(zcriteria);
1421     result_t result = zcri.getResult();
1422     if ( result == RES_OK ){
1423     userid_t *uids;
1424     int uidsLen;
1425     result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1426     if ( result == RES_OK ){
1427     uidsToZval( uids, uidsLen, &zuids );
1428 youi 1.19 freeUID( uids );
1429 aga 1.8 }
1430     }
1431     RETURN_LONG( result );
1432     }
1433    
1434 aga 1.11 /** 繧ー繝ォ繝シ繝励°繧峨Γ繝ウ繝舌?繧貞炎髯、縺吶k縲?lt;br>
1435     int vp_delete_member(int sid, int group_id, int user_id )
1436 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1437     @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1438 aga 1.11 @param user_id 繝ヲ繝シ繧カID
1439     @return 0 success
1440     */
1441    
1442     ZEND_FUNCTION(vp_delete_member)
1443     {
1444     long sid, gid, uid;
1445    
1446     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1447     &sid, &gid, &uid) == FAILURE) {
1448     return;
1449     }
1450    
1451     result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1452     RETURN_LONG( result );
1453     }
1454    
1455     /** 繧ー繝ォ繝シ繝励↓繝。繝ウ繝舌?繧定ソス蜉?縺吶k<br>
1456     int vp_insert_member(int sid, int group_id, int user_id, bool admin )
1457 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1458     @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1459 aga 1.11 @param user_id 繝ヲ繝シ繧カID
1460     @param admin 繧ー繝ォ繝シ繝礼ョ。逅???↑繧液rue
1461     @return 0 success
1462     */
1463    
1464     ZEND_FUNCTION(vp_insert_member)
1465     {
1466     long sid, gid, uid;
1467     zend_bool admin;
1468    
1469     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
1470     &sid, &gid, &uid, &admin) == FAILURE) {
1471     return;
1472     }
1473    
1474     result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
1475     RETURN_LONG( result );
1476     }
1477    
1478     /** gid縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?繝。繝ウ繝舌?縺ョuid縺ョ荳?隕ァ繧貞セ励k<br>
1479     int vp_get_members(int sid, int group_id, array criteria, array uids )
1480 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1481     @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1482 aga 1.11 @param criteria 譚。莉カ
1483     @param uids uid縺ョ荳?隕ァ繧貞女縺大叙繧矩?蛻?/span>
1484     @return 0 success
1485     */
1486    
1487     ZEND_FUNCTION(vp_get_members)
1488     {
1489     long sid, gid;
1490     zval *zcriteria;
1491     zval *zuids;
1492    
1493     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1494     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1495     return;
1496     }
1497    
1498     zCriteria_t zcri(zcriteria);
1499     result_t result = zcri.getResult();
1500     if ( result == RES_OK ){
1501     userid_t *uids;
1502     int uidsLen;
1503     result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
1504     if ( result == RES_OK ){
1505     uidsToZval( uids, uidsLen, &zuids );
1506 youi 1.19 freeUID( uids );
1507 aga 1.11 }
1508     }
1509     RETURN_LONG( result );
1510     }
1511 youi 1.7
1512     /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞、画峩縺吶k縲?lt;br>
1513     int vp_update_group(int sid, array group )
1514 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1515 youi 1.7 @param group 繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ騾」諠ウ驟榊?
1516     @return 0 success
1517     */
1518     ZEND_FUNCTION(vp_update_group)
1519     {
1520     long sid;
1521     zval *zgroup;
1522     group_t group;
1523    
1524     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1525     &sid, &zgroup) == FAILURE) {
1526     return;
1527     }
1528    
1529     zvalToGroup( zgroup, &group );
1530     result_t result = updateGroup( sid, &group );
1531     RETURN_LONG( result );
1532 aga 1.10 }
1533    
1534 youi 1.12 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧定ソス蜉?縺吶k縲?lt;br>
1535 youi 1.17 int vp_insert_group( int sid, array group, int &gid )
1536     @param sid 繧サ繝?す繝ァ繝ウID
1537 youi 1.12 @param group 繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ騾」諠ウ驟榊?
1538 youi 1.17 @param gid 蟇セ蠢懊☆繧九げ繝ォ繝シ繝悠D繧呈嶌縺崎セシ繧?繝ェ繝輔ぃ繝ャ繝ウ繧ケ
1539 youi 1.12 @return RES_OK
1540     @return RES_DB_NOT_INITIALIZED
1541     @return RES_NO_SUCH_SESSION
1542     @return RES_DB_QUERY_ERROR
1543     */
1544     ZEND_FUNCTION(vp_insert_group)
1545     {
1546     long sid;
1547     zval *zgroup;
1548 youi 1.17 zval *zgid;
1549 youi 1.12 group_t group;
1550 youi 1.17 groupid_t gid;
1551 youi 1.12
1552 youi 1.17 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1553     &sid, &zgroup, &zgid ) == FAILURE) {
1554 youi 1.12 return;
1555     }
1556    
1557     zvalToGroup( zgroup, &group );
1558 youi 1.17 result_t result = insertGroup( sid, &group, &gid );
1559     zgid -> type = IS_LONG;
1560     zgid -> value.lval = gid;
1561 youi 1.12 RETURN_LONG( result );
1562     }
1563    
1564    
1565     /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞炎髯、縺吶k縲?lt;br>
1566     int vp_delete_group( int sid, int gid )
1567 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1568 youi 1.12 @param gid 蜑企勁縺励◆縺?げ繝ォ繝シ繝励?ID
1569     @return RES_OK
1570     @return RES_DB_QUERY_ERROR
1571     @return RES_NO_SUCH_SESSION
1572     @return RES_DB_NOT_INITIALIZED
1573     */
1574     ZEND_FUNCTION(vp_delete_group)
1575     {
1576     long sid;
1577     long gid;
1578    
1579     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1580     &sid, &gid) == FAILURE) {
1581     return;
1582     }
1583     RETURN_LONG( deleteGroup( sid, gid ) );
1584     }
1585    
1586     /** 繧ー繝ォ繝シ繝励?邂。逅???r蜿門セ励??lt;br>
1587     int vp_dump_group_admins( int sid, int gid, array criteria, array uids )
1588 aga 1.16 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1589     @param gid VP繧ー繝ォ繝シ繝励?ID
1590 youi 1.12 @param criteria uids縺ォ譖ク縺崎セシ繧?縺ィ縺阪?繧ス繝シ繝域擅莉カ?檎ッ?峇縺ョ謖?ョ?/span>
1591     @param uids 邂。逅????UID繧呈嶌縺崎セシ繧?驟榊?
1592     @return RES_OK
1593     @return RES_DB_QUERY_ERROR
1594     @return RES_NO_SUCH_SESSION
1595     @return RES_DB_NOT_INITIALIZED
1596     */
1597     /*
1598     ZEND_FUNCTION(vp_dump_group_admins)
1599     {
1600     long sid;
1601     long gid;
1602     zval *zcriteria;
1603     zval *zuids;
1604    
1605     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1606     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1607     return;
1608     }
1609     zCriteria_t zcri(zcriteria);
1610     result_t result = zcri.getResult();
1611     if ( RES_OK == result ){
1612     userid_t* uids;
1613     int uidsLen;
1614     result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1615     if( result != RES_OK ) RETURN_LONG( result );
1616     uidsToZval( uids, uidsLen, &zuids );
1617     fprintf( stderr, "uidsLen=%d\n", uidsLen );
1618     for( int i = 0; i < uidsLen; i++ ){
1619     fprintf( stderr, "%d, \n", uids[ i ] );
1620     }
1621 youi 1.19 freeUID( uids );
1622 youi 1.12 RETURN_LONG( result );
1623     }
1624     RETURN_LONG( result );
1625     }
1626     */
1627    
1628 aga 1.16 /** VP縺ョsession_id縺ョ豁」蠖捺?ァ繝√ぉ繝?け<br>
1629 aga 1.10 bool vp_is_valid_session_id( int vp_session_id)
1630 aga 1.16 @return true 譛牙柑縺ェVP縺ョsession_id縺ァ縺ゅk<br>
1631 aga 1.10 @return false 辟。蜉ケ縺ェsession_id縺セ縺溘?繧ィ繝ゥ繝シ
1632     */
1633     ZEND_FUNCTION(vp_is_valid_session_id)
1634     {
1635     long sid;
1636     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
1637     return;
1638     }
1639    
1640     RETURN_BOOL(isValidSessionID((sessionid_t)sid));
1641 aga 1.9 }
1642    
1643     /** 繧ィ繝ゥ繝シ譁?ュ怜?繧貞セ励k<br>
1644     string vp_get_last_error_string()
1645     @return 0 success
1646     */
1647     ZEND_FUNCTION(vp_get_last_error_string)
1648     {
1649     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
1650     return;
1651     }
1652    
1653     string str( getLastErrorString() );
1654     RETURN_STRING((char *)str.c_str(), 1);
1655 youi 1.7 }
1656    

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