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.28 - (hide annotations) (download) (as text)
Fri Jan 28 05:14:37 2005 UTC (19 years, 2 months ago) by youi
Branch: MAIN
CVS Tags: demo20050128
Changes since 1.27: +30 -4 lines
File MIME type: text/x-c++src
xnp_get_index_id_by_item_id関数を定義した.

1 aga 1.1 /*
2 youi 1.28 $Revision: 1.27 $
3 youi 1.21 XNPAL: XooNiPs Platform Abstract Layer
4 youi 1.24
5 aga 1.1 zend_parse_parameters??hp4.1.0??綽?荀?
6     .so???<?ゃ?????????荀????????贋????舟??鴻????
7     C++?с????extern "C"{}, BEGIN/END_EXTERN_C()??綽?荀???
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 youi 1.24 #include "index.h"
18 youi 1.21 #include "xnpal.h"
19 youi 1.24 #include "amazonbook.h"
20 aga 1.1
21 aga 1.2 // for inet_aton
22     #include <sys/socket.h>
23     #include <netinet/in.h>
24     #include <arpa/inet.h>
25    
26 aga 1.1 // global variables
27    
28 youi 1.21 PHP_MSHUTDOWN_FUNCTION(xnpalmod)
29 aga 1.18 {
30     uninitializeDB();
31     return SUCCESS;
32     }
33 aga 1.1
34     /* declaration of functions to be exported */
35     extern "C" {
36 aga 1.2 ZEND_FUNCTION(first_module );
37 youi 1.21 ZEND_FUNCTION(xnp_initialize_db );
38     ZEND_FUNCTION(xnp_login_user );
39     ZEND_FUNCTION(xnp_logout_user );
40     ZEND_FUNCTION(xnp_create_session );
41     ZEND_FUNCTION(xnp_get_session );
42     ZEND_FUNCTION(xnp_is_activated );
43     ZEND_FUNCTION(xnp_activate );
44     ZEND_FUNCTION(xnp_get_account_count );
45     ZEND_FUNCTION(xnp_delete_account );
46     ZEND_FUNCTION(xnp_get_account );
47     ZEND_FUNCTION(xnp_get_accounts );
48     ZEND_FUNCTION(xnp_insert_account );
49     ZEND_FUNCTION(xnp_update_account );
50     ZEND_FUNCTION(xnp_dump_uids );
51     ZEND_FUNCTION(xnp_get_group_count );
52     ZEND_FUNCTION(xnp_get_groups_by_uid );
53     ZEND_FUNCTION(xnp_is_group_admin );
54     ZEND_FUNCTION(xnp_dump_gids );
55     ZEND_FUNCTION(xnp_dump_group_admins );
56     ZEND_FUNCTION(xnp_delete_member );
57     ZEND_FUNCTION(xnp_insert_member );
58     ZEND_FUNCTION(xnp_get_members );
59     ZEND_FUNCTION(xnp_delete_group );
60     ZEND_FUNCTION(xnp_insert_group );
61     ZEND_FUNCTION(xnp_update_group );
62     ZEND_FUNCTION(xnp_get_group );
63     ZEND_FUNCTION(xnp_get_groups );
64     ZEND_FUNCTION(xnp_is_moderator );
65     ZEND_FUNCTION(xnp_get_uid );
66 aga 1.2
67 aga 1.22 ZEND_FUNCTION(xnp_get_all_indexes );
68     ZEND_FUNCTION(xnp_get_indexes );
69     ZEND_FUNCTION(xnp_insert_index );
70     ZEND_FUNCTION(xnp_update_index );
71     ZEND_FUNCTION(xnp_delete_index );
72     ZEND_FUNCTION(xnp_get_index );
73     ZEND_FUNCTION(xnp_is_index_readable );
74     ZEND_FUNCTION(xnp_is_index_writable );
75     ZEND_FUNCTION(xnp_swap_index_sort_number );
76    
77 youi 1.21 ZEND_FUNCTION(xnp_is_valid_session_id );
78     ZEND_FUNCTION(xnp_get_last_error_string );
79 aga 1.9
80 youi 1.21 ZEND_FUNCTION(xnp_test_criteria );
81     ZEND_FUNCTION(xnp_test_uids );
82 youi 1.24
83    
84     ZEND_FUNCTION(xnp_get_item_permission );
85     ZEND_FUNCTION(xnp_get_index_permission );
86     ZEND_FUNCTION(xnp_get_certify_permission );
87    
88     ZEND_FUNCTION(xnp_get_certify_state );
89     ZEND_FUNCTION(xnp_set_certify_state );
90    
91     ZEND_FUNCTION(xnp_insert_change_log );
92     ZEND_FUNCTION(xnp_get_change_logs );
93    
94     ZEND_FUNCTION(xnp_get_config_value );
95     ZEND_FUNCTION(xnp_set_config_value );
96    
97     ZEND_FUNCTION(xnp_dump_item_id );
98     ZEND_FUNCTION(xnp_get_item_id_by_binder_id );
99     ZEND_FUNCTION(xnp_get_item_id_by_index_id );
100     ZEND_FUNCTION(xnp_get_overlapped_items );
101    
102     ZEND_FUNCTION(xnp_insert_item );
103     ZEND_FUNCTION(xnp_update_item );
104     ZEND_FUNCTION(xnp_delete_item );
105     ZEND_FUNCTION(xnp_get_item );
106     ZEND_FUNCTION(xnp_get_items );
107    
108     ZEND_FUNCTION(xnp_pubmed_complete );
109     ZEND_FUNCTION(xnp_amazon_complete );
110    
111     //ZEND_FUNCTION(xnp_uninitialize_db );
112    
113     ZEND_FUNCTION(xnp_register_binder_item );
114     ZEND_FUNCTION(xnp_unregister_binder_item );
115    
116     ZEND_FUNCTION(xnp_register_item );
117     ZEND_FUNCTION(xnp_unregister_item );
118    
119 youi 1.26 ZEND_FUNCTION(xnp_get_uncertified_link );
120     ZEND_FUNCTION(xnp_get_private_item_id );
121    
122 youi 1.28 ZEND_FUNCTION(xnp_get_item_types );
123     ZEND_FUNCTION(xnp_get_index_id_by_item_id );
124 youi 1.26
125 aga 1.1 };
126     /* compiled function list so Zend knows what's in this module */
127 youi 1.21 zend_function_entry xnpalmod_functions[] =
128 aga 1.1 {
129 youi 1.24 ZEND_FE(first_module ,NULL)
130     ZEND_FE(xnp_initialize_db ,NULL)
131     ZEND_FE(xnp_login_user ,NULL)
132     ZEND_FE(xnp_logout_user ,NULL)
133     ZEND_FE(xnp_create_session ,NULL)
134     ZEND_FE(xnp_get_session ,NULL)
135     ZEND_FE(xnp_is_activated ,NULL)
136     ZEND_FE(xnp_activate ,NULL)
137     ZEND_FE(xnp_get_account_count ,NULL)
138     ZEND_FE(xnp_delete_account ,NULL)
139     ZEND_FE(xnp_get_account ,NULL)
140     ZEND_FE(xnp_get_accounts ,NULL)
141     ZEND_FE(xnp_insert_account ,NULL)
142     ZEND_FE(xnp_update_account ,NULL)
143     ZEND_FE(xnp_dump_uids ,NULL)
144     ZEND_FE(xnp_get_group_count ,NULL)
145     ZEND_FE(xnp_get_groups_by_uid ,NULL)
146     ZEND_FE(xnp_is_group_admin ,NULL)
147     ZEND_FE(xnp_dump_gids ,NULL)
148     ZEND_FE(xnp_dump_group_admins ,NULL)
149     ZEND_FE(xnp_delete_member ,NULL)
150     ZEND_FE(xnp_insert_member ,NULL)
151     ZEND_FE(xnp_get_members ,NULL)
152     ZEND_FE(xnp_delete_group ,NULL)
153     ZEND_FE(xnp_insert_group ,NULL)
154     ZEND_FE(xnp_update_group ,NULL)
155     ZEND_FE(xnp_get_group ,NULL)
156     ZEND_FE(xnp_get_groups ,NULL)
157     ZEND_FE(xnp_is_moderator ,NULL)
158     ZEND_FE(xnp_get_uid ,NULL)
159    
160     ZEND_FE(xnp_get_all_indexes ,NULL)
161     ZEND_FE(xnp_get_indexes ,NULL)
162     ZEND_FE(xnp_insert_index ,NULL)
163     ZEND_FE(xnp_update_index ,NULL)
164     ZEND_FE(xnp_delete_index ,NULL)
165     ZEND_FE(xnp_get_index ,NULL)
166     ZEND_FE(xnp_is_index_readable ,NULL)
167     ZEND_FE(xnp_is_index_writable ,NULL)
168     ZEND_FE(xnp_swap_index_sort_number ,NULL)
169    
170     ZEND_FE(xnp_is_valid_session_id ,NULL)
171     ZEND_FE(xnp_get_last_error_string ,NULL)
172     ZEND_FE(xnp_test_criteria ,NULL)
173     ZEND_FE(xnp_test_uids ,NULL)
174    
175     ZEND_FE(xnp_get_item_permission ,NULL)
176     ZEND_FE(xnp_get_index_permission ,NULL)
177     ZEND_FE(xnp_get_certify_permission ,NULL)
178    
179     ZEND_FE(xnp_get_certify_state ,NULL)
180     ZEND_FE(xnp_set_certify_state ,NULL)
181    
182     ZEND_FE(xnp_insert_change_log ,NULL)
183     ZEND_FE(xnp_get_change_logs ,NULL)
184    
185     ZEND_FE(xnp_get_config_value ,NULL)
186     ZEND_FE(xnp_set_config_value ,NULL)
187    
188     ZEND_FE(xnp_dump_item_id ,NULL)
189     ZEND_FE(xnp_get_item_id_by_binder_id ,NULL)
190     ZEND_FE(xnp_get_item_id_by_index_id ,NULL)
191     ZEND_FE(xnp_get_overlapped_items ,NULL)
192    
193     ZEND_FE(xnp_insert_item ,NULL)
194     ZEND_FE(xnp_update_item ,NULL)
195     ZEND_FE(xnp_delete_item ,NULL)
196     ZEND_FE(xnp_get_item ,NULL)
197     ZEND_FE(xnp_get_items ,NULL)
198    
199     ZEND_FE(xnp_pubmed_complete ,NULL)
200     ZEND_FE(xnp_amazon_complete ,NULL)
201    
202     // ZEND_FE(xnp_uninitialize_db ,NULL)
203    
204     ZEND_FE(xnp_register_binder_item ,NULL)
205     ZEND_FE(xnp_unregister_binder_item ,NULL)
206    
207     ZEND_FE(xnp_register_item ,NULL)
208     ZEND_FE(xnp_unregister_item ,NULL)
209    
210 youi 1.26 ZEND_FE(xnp_get_uncertified_link ,NULL)
211     ZEND_FE(xnp_get_private_item_id ,NULL)
212    
213 youi 1.28 ZEND_FE(xnp_get_item_types ,NULL)
214 youi 1.26
215 youi 1.28 ZEND_FE(xnp_get_index_id_by_item_id ,NULL)
216    
217 youi 1.24 {NULL, NULL, NULL}
218 aga 1.1 };
219    
220     /* compiled module information */
221 youi 1.21 zend_module_entry xnpalmod_module_entry =
222 aga 1.1 {
223 youi 1.24 STANDARD_MODULE_HEADER,
224     "Visiome Platform Abstract Layer",
225     xnpalmod_functions,
226     NULL,
227 youi 1.21 PHP_MSHUTDOWN(xnpalmod),
228 youi 1.24 NULL,
229     NULL,
230     NULL,
231     NO_VERSION_YET,
232     STANDARD_MODULE_PROPERTIES
233 aga 1.1 };
234    
235     /* implement standard "stub" routine to introduce ourselves to Zend */
236     #if COMPILE_DL_FIRST_MODULE
237     BEGIN_EXTERN_C()
238 youi 1.21 ZEND_GET_MODULE(xnpalmod)
239 aga 1.1 END_EXTERN_C()
240     #endif
241    
242 aga 1.16
243 aga 1.1 /* implement function that is meant to be made available to PHP */
244     ZEND_FUNCTION(first_module)
245     {
246 youi 1.24 long parameter;
247 aga 1.1 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
248 youi 1.24 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
249     return;
250     }
251 aga 1.1 parameter++;
252 youi 1.24 RETURN_LONG(parameter);
253 aga 1.1 }
254     /** zval????C????絖?????緇?????
255     */
256     char *getZvalString( zval **p ){
257     convert_to_string_ex(p);
258     return Z_STRVAL_PP(p); //(**p).value.str.val;
259     }
260    
261     /** zval????int??緇?????
262     */
263     int getZvalInt( zval **p ){
264     convert_to_long_ex(p);
265     return Z_LVAL_PP(p); // (int)(**p).value.lval;
266     }
267    
268 aga 1.2 // keylen????鮎??0????????
269     static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
270     zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
271     if ( res == HASH_KEY_IS_STRING ){
272     char *p = new char[keyLen+1];
273     memcpy( p, key, keyLen );
274     p[keyLen] = 0;
275     zend_printf( " key is string[%s]<br>\n", p );
276     }
277     else {
278     zend_printf( " key is integer[%d]<br>\n", index );
279     }
280     }
281    
282    
283 aga 1.16 /** zval*????criteria_t?????????????????????鴻??????紊掩??????getResult()!=RES_OK <br>
284 youi 1.24 criteria :
285     array( 'start'=>0, 'rows'=>10,
286     'orders'=>array(
287     array('name'=>'id','order'=>'0'),
288     array('name'=>'timestamp','name'=>'1'), ...)
289     ); ??????就???f?渇????
290 aga 1.2 */
291     class zCriteria_t : public criteria {
292     private:
293     result_t result;
294 aga 1.16
295 aga 1.2 // pz: array('name'=>'timestamp','name'=>'1')
296     // ????????orderby??篏???????申????
297     void setOrder( zval *pz ){
298     char *column = 0;
299     order_t order = (order_t)0;
300 youi 1.24
301 aga 1.2 HashPosition pos;
302     zval **ppzTmp = 0;
303     int res2;
304     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
305     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
306     char *key = 0;
307     uint keyLen = 0;
308     ulong index = 0;
309     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
310     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
311 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
312     if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
313 aga 1.2 SEPARATE_ZVAL(ppzTmp);
314     column = getZvalString(ppzTmp);
315     // zend_printf( "column=%s<br>\n", column );
316     }
317     else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
318     SEPARATE_ZVAL(ppzTmp);
319     order = (order_t)getZvalInt(ppzTmp);
320     // zend_printf( "order=%d<br>\n", order );
321     }
322     }
323 youi 1.24
324 aga 1.2 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
325     }
326     if ( column ){
327     orderby *o = new orderby( column, order );
328     addOrderBy( o );
329     }
330 youi 1.24
331 aga 1.2 result = RES_OK;
332     }
333 youi 1.24
334 aga 1.2 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
335     void setOrders( zval *pz ){
336     HashPosition pos;
337 youi 1.24
338 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
339 youi 1.24
340 aga 1.2 zval **ppzTmp = 0;
341     int res2;
342     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
343     char *key = 0;
344     uint keyLen = 0;
345     ulong index = 0;
346     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
347     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
348 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
349 aga 1.2 setOrder( *ppzTmp );
350     }
351     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
352     }
353     result = RES_OK;
354     }
355 youi 1.24
356 aga 1.2 void initialize( zval *pz ){
357     HashPosition pos;
358     zval **ppzTmp = 0;
359     int res2;
360     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
361     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
362     char *key = 0;
363     uint keyLen = 0;
364     ulong index = 0;
365     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
366     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
367 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
368 aga 1.2 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
369     SEPARATE_ZVAL(ppzTmp);
370     int tmp = getZvalInt(ppzTmp);
371     // zend_printf( "start=%d<br>\n", tmp );
372     setLimit( tmp, getLimitRows() );
373     }
374     else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
375     SEPARATE_ZVAL(ppzTmp);
376     int tmp = getZvalInt(ppzTmp);
377     // zend_printf( "rows=%d<br>\n", tmp );
378     setLimit( getLimitStart(), tmp );
379     }
380     else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
381     setOrders( *ppzTmp );
382     }
383     else
384     ; // ignore unknown key
385     }
386     else
387     ; // ignore bad key
388     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
389     }
390     result = RES_OK;
391     }
392 aga 1.16
393     public:
394 aga 1.2 zCriteria_t() : criteria(){ result = RES_ERROR; }
395     zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
396     zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
397     result_t getResult(){ return result; };
398 youi 1.24
399 aga 1.2 void dump(){
400     zend_printf( "dumping zCriteria...<br>\n" );
401     zend_printf( "result=%d<br>\n", (int)result );
402     zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
403     const orderby *p = headOrderBy();
404     while ( p ){
405     zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
406     p = nextOrderBy();
407     }
408     }
409     };
410    
411 aga 1.16
412     /** ?f?渇???????≪???祉?鴻????ong?ゃ??緇?????
413     @param ht ?f?渇????
414     @param key ????/span>
415     @param val long?ゃ?????????????ゃ?潟??/span>
416     @return ????????true
417     */
418     static bool hashGetLong( HashTable *ht, const char *key, long *val ){
419 youi 1.24 zval **tmp;
420     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
421     convert_to_long_ex( tmp );
422     *val = Z_LVAL_PP(tmp);
423     return true;
424     }
425     return false;
426 aga 1.14 }
427    
428 aga 1.16 /** ?f?渇???????≪???祉?鴻??????絖?????緇?????
429     @param ht ?f?渇????
430     @param key ????/span>
431     @param val ??絖????????????????ゃ?潟??/span>
432     @return ????????true
433     */
434     static bool hashGetString( HashTable *ht, const char *key, char **val ){
435 youi 1.24 zval **tmp;
436     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
437     convert_to_string_ex( tmp );
438     *val = Z_STRVAL_PP(tmp);
439     return true;
440     }
441     return false;
442 aga 1.14 }
443    
444 aga 1.16 /** ?f?渇???????≪???祉?鴻????ouble?ゃ??緇?????
445     @param ht ?f?渇????
446     @param key ????/span>
447     @param val double?ゃ?????????????ゃ?潟??/span>
448     @return ????????true
449     */
450     static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
451 youi 1.24 zval **tmp;
452     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
453     convert_to_double_ex( tmp );
454     *val = Z_DVAL_PP(tmp);
455     return true;
456     }
457     return false;
458 aga 1.14 }
459 aga 1.2
460 aga 1.16 /** zval*????account?????????????????????鴻?? <br>
461 youi 1.24 ????紊掩??????getResult()!=RES_OK <br>
462 aga 1.16 */
463 aga 1.2 class zAccount_t : public account {
464     private:
465     result_t result;
466     void initialize(zval *pz){
467 aga 1.14 HashTable *ht = Z_ARRVAL_P(pz);
468     long l;
469     char *p;
470     double d;
471     if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
472     if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
473     if ( hashGetString( ht, "name" , &p ) ) setName ( p );
474     if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
475     if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
476     if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
477     if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
478     if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
479     if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
480     if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
481     if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
482     if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
483     if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
484     if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
485     if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
486     if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
487     if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
488     if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
489     if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
490     if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
491     if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
492     if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
493     if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
494     if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
495     if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
496     if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
497     if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
498     if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
499     if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
500     if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
501     if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
502     if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
503     if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
504 aga 1.16 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
505 aga 1.14 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
506 aga 1.16 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
507 aga 1.14 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
508     if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
509     if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
510     if ( hashGetString( ht, "base_url" , &p ) ) setBaseURL ( p );
511     if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
512     if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
513 aga 1.22 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
514 aga 1.14
515     result = RES_OK;
516 aga 1.2 }
517 aga 1.16 public:
518 aga 1.2 zAccount_t() : account(){ result = RES_ERROR; }
519 youi 1.24
520     /** ?潟?潟?鴻????????/span>
521     @param pz array( 'uid'=>1, 'uname'=>'root', ... ); ??????就???f?渇???? */
522 aga 1.2 zAccount_t( zval *pz ) : account(){ initialize(pz); }
523     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
524     result_t getResult(){ return result; };
525     };
526    
527 aga 1.22 class zIndex_t : public index {
528     private:
529     result_t result;
530 youi 1.24
531 aga 1.22 void initialize(zval *pz){
532     HashTable *ht = Z_ARRVAL_P(pz);
533     long l;
534     char *p;
535     double d;
536     if ( hashGetLong ( ht, "item_id" , &l ) ) setItemID ( l );
537     if ( hashGetLong ( ht, "item_type_id" , &l ) ) setItemTypeID ( l );
538     if ( hashGetLong ( ht, "contributor_uid" , &l ) ) setContributorUID ( l );
539     if ( hashGetString( ht, "title" , &p ) ) setTitle ( p );
540     if ( hashGetString( ht, "keywords" , &p ) ) setKeywords ( p );
541     if ( hashGetString( ht, "description" , &p ) ) setDescription ( p );
542     if ( hashGetLong ( ht, "last_update_date" , &l ) ) setLastUpdateDate ( l );
543     if ( hashGetLong ( ht, "creation_date" , &l ) ) setCreationDate ( l );
544     if ( hashGetLong ( ht, "parent_index_id" , &l ) ) setParentIndexID ( l );
545     if ( hashGetLong ( ht, "owner_uid" , &l ) ) setOwnerUID ( l );
546     if ( hashGetLong ( ht, "owner_gid" , &l ) ) setOwnerGID ( l );
547     if ( hashGetLong ( ht, "open_level" , &l ) ) setOpenLevel ( l );
548     if ( hashGetLong ( ht, "sort_number" , &l ) ) setSortNumber ( l );
549    
550     result = RES_OK;
551     }
552     public:
553     zIndex_t() : index(){ result = RES_ERROR; }
554     zIndex_t( zval *pz ) : index(){ initialize(pz); }
555     zIndex_t( zval **ppz ) : index() { initialize(*ppz); }
556     result_t getResult(){ return result; };
557 youi 1.24
558 aga 1.22 void dump(){
559     }
560     };
561    
562 aga 1.16 /** zval*????(userid_t *puid,int uidLen)?????????????????????鴻?? <br>
563 youi 1.24 ????紊掩??????getResult()!=RES_OK <br>
564 aga 1.2 */
565     class zUIDs_t {
566     private:
567     result_t result;
568     userid_t *pUID;
569     int len;
570     public:
571     zUIDs_t(){
572     pUID = 0;
573     len = 0;
574     result = RES_ERROR;
575     }
576 youi 1.24
577     /** ?潟?潟?鴻????????/span>
578     @param pza array( '1', '3', '4', '6', ... ); ??????就?????? */
579 aga 1.2 zUIDs_t( zval *pza ){
580     pUID = 0;
581     len = 0;
582     result = RES_ERROR;
583 youi 1.24
584 aga 1.2 if ( Z_TYPE_P(pza) != IS_ARRAY ){
585     result = RES_ERROR;
586     }
587     else {
588     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
589     if(len == 0) {
590     pUID = new userid_t[1];
591     result = RES_OK;
592     }
593     else {
594     /* php/ext/standard/string.c ? implode??????????????????
595     zend_hash_*???????ャ?<?潟???c????????????????鐚?
596     */
597     zval **tmp;
598     HashPosition pos;
599     int i = 0;
600     pUID = new userid_t[len];
601 youi 1.24
602 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
603     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
604     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ????/span>
605     convert_to_long_ex(tmp);
606     if ( i < len )
607     pUID[i++] = Z_LVAL_PP(tmp);
608     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
609     }
610     len = i;
611     result = RES_OK;
612     }
613     }
614     }
615 youi 1.24
616 aga 1.2 ~zUIDs_t(){
617     if ( pUID ) delete[] pUID;
618     }
619     result_t getResult(){ return result; }
620     userid_t *getPUID(){ return pUID; }
621     int getLen(){ return len; }
622     void dump(){
623 youi 1.24 zend_printf( "dumping zUIDs...<br>\n" );
624 aga 1.2 zend_printf( "result=%d<br>\n", (int)result );
625     zend_printf( "len=%d<br>\n", len );
626     for ( int i = 0; i < len; i++ ){
627     zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
628     }
629     }
630     };
631    
632 youi 1.24 /** zval*????(itemid_t *piid,int iidLen)?????????????????????鴻?? <br>
633     ????紊掩??????getResult()!=RES_OK <br>
634     */
635     class zIIDs_t {
636     private:
637     result_t result;
638     itemid_t *pIID;
639     int len;
640     public:
641     zIIDs_t(){
642     pIID = 0;
643     len = 0;
644     result = RES_ERROR;
645     }
646    
647     /** ?潟?潟?鴻????????/span>
648     @param pza array( '1', '3', '4', '6', ... ); ??????就?????? */
649     zIIDs_t( zval *pza ){
650     pIID = 0;
651     len = 0;
652     result = RES_ERROR;
653    
654     if ( Z_TYPE_P(pza) != IS_ARRAY ){
655     result = RES_ERROR;
656     }
657     else {
658     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
659     if(len == 0) {
660     pIID = new itemid_t[1];
661     result = RES_OK;
662     }
663     else {
664     /* php/ext/standard/string.c ? implode??????????????????
665     zend_hash_*???????ャ?<?潟???c????????????????鐚?
666     */
667     zval **tmp;
668     HashPosition pos;
669     int i = 0;
670     pIID = new itemid_t[len];
671    
672     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
673     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
674     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ????/span>
675     convert_to_long_ex(tmp);
676     if ( i < len )
677     pIID[i++] = Z_LVAL_PP(tmp);
678     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
679     }
680     len = i;
681     result = RES_OK;
682     }
683     }
684     }
685    
686     ~zIIDs_t(){
687     if ( pIID ) delete[] pIID;
688     }
689     result_t getResult(){ return result; }
690     itemid_t *getPIID(){ return pIID; }
691     int getLen(){ return len; }
692     void dump(){
693     zend_printf( "dumping zIIDs...<br>\n" );
694     zend_printf( "result=%d<br>\n", (int)result );
695     zend_printf( "len=%d<br>\n", len );
696     for ( int i = 0; i < len; i++ ){
697     zend_printf( "pIID[%d] = %d<br>\n", i, pIID[i] );
698     }
699     }
700     };
701    
702     /**
703     *
704     * amazonbook_t????絎鴻??PHP???????????????
705     * @param pAmazonbook 紊???????mazonbook_t*
706     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
707     * @return RES_OK
708     *
709     */
710     result_t amazonbookToZval( const amazonbook_t *pAmazonbook, zval *z )
711     {
712     zend_hash_clean( z -> value.ht );
713    
714     add_assoc_string( z, "title", ( char* )pAmazonbook -> getTitle( ), 1 );
715     add_assoc_string( z, "author", ( char* )pAmazonbook -> getAuthor( ), 1 );
716     add_assoc_string( z, "publisher", ( char* )pAmazonbook -> getPublisher( ), 1 );
717     add_assoc_long( z, "year_of_publication", pAmazonbook -> getYearOfPublication( ) );
718     add_assoc_string( z, "isbn", ( char* )pAmazonbook -> getISBN( ), 1 );
719     add_assoc_string( z, "url", ( char* )pAmazonbook -> getURL( ), 1 );
720    
721     return RES_OK;
722     }
723    
724     /**
725     *
726     * pubmed_t????絎鴻??PHP???????????????
727     * @param pPubmed 紊???????ubmed_t*
728     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
729     * @return RES_OK
730     *
731     */
732     result_t pubmedToZval( const pubmed_t *pPubmed, zval *z )
733     {
734     zend_hash_clean( z -> value.ht );
735    
736     add_assoc_long( z, "pmid", pPubmed -> getID( ) );
737     add_assoc_string( z, "title", ( char* )pPubmed -> getTitle( ), 1 );
738     add_assoc_string( z, "author", ( char* )pPubmed -> getAuthor( ), 1 );
739     add_assoc_string( z, "journal", ( char* )pPubmed -> getJournal( ), 1 );
740     add_assoc_long( z, "year_of_publication", pPubmed -> getYearOfPublication( ) );
741     add_assoc_long( z, "volume", pPubmed -> getVolume( ) );
742     add_assoc_long( z, "number", pPubmed -> getNumber( ) );
743     add_assoc_string( z, "page", ( char* )pPubmed -> getPage( ), 1 );
744     add_assoc_string( z, "abstract", ( char* )pPubmed -> getAbstract( ), 1 );
745    
746     return RES_OK;
747     }
748    
749     /**
750     *
751     * itemid_t????????PHP???????????????
752     * @param piid 紊???????temid_t??????
753     * @param len piid?????????激??
754     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
755     * @return RES_OK
756     *
757     */
758 youi 1.25 result_t itemidsToZval( const itemid_t *piid, int len, zval **ppz )
759 youi 1.24 {
760     zend_hash_clean( Z_ARRVAL_PP(ppz) );
761    
762 youi 1.26 // add IDs
763     for ( int i = 0; i < len; i++ ){
764     add_next_index_long(*ppz, (long)(piid[i]) );
765     }
766    
767     return RES_OK;
768     }
769    
770     /**
771     *
772     * indexid_t????????PHP???????????????
773     * @param piid 紊???????ndexid_t??????
774     * @param len piid?????????激??
775     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
776     * @return RES_OK
777     *
778     */
779     result_t indexidsToZval( const indexid_t *piid, int len, zval **ppz )
780     {
781     zend_hash_clean( Z_ARRVAL_PP(ppz) );
782    
783     // add IDs
784 youi 1.24 for ( int i = 0; i < len; i++ ){
785     add_next_index_long(*ppz, (long)(piid[i]) );
786     }
787    
788     return RES_OK;
789     }
790    
791 aga 1.8 /**
792 youi 1.24 *
793 aga 1.8 * uids_t????????PHP???????????????
794 youi 1.24 *
795 aga 1.16 * @param pUID 紊???????serid_t??????
796 aga 1.8 * @param len pUID?????????激??
797     * @param pz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
798     * @return RES_OK
799 youi 1.24 *
800 aga 1.8 */
801 aga 1.4 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
802     {
803 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
804    
805 aga 1.2 // add UIDs
806     for ( int i = 0; i < len; i++ ){
807 aga 1.8 add_next_index_long(*ppz, (long)(pUID[i]) );
808 aga 1.2 }
809 youi 1.24
810 aga 1.2 return RES_OK;
811     }
812 youi 1.24
813 aga 1.16 /**
814     *
815     * groupid_t????????PHP???????????????
816     * @param pGID 紊???????roupid_t??????
817     * @param len pGID?????????激??
818     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
819     * @return RES_OK
820     *
821     */
822 aga 1.4 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
823     {
824 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
825    
826 aga 1.2 // add GIDs
827     for ( int i = 0; i < len; i++ ){
828 aga 1.8 add_next_index_long(*ppz, (long)(pGID[i]) );
829 aga 1.2 }
830 youi 1.24
831     return RES_OK;
832     }
833    
834     /**
835     *
836     * changelog_t????絎鴻??PHP???????????????
837     * @param pChangelog 紊???????hangelog_t*
838     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
839     * @return RES_OK
840     *
841     */
842     result_t changelogToZval( const changelog_t *pChangelog, zval *z )
843     {
844     zend_hash_clean( z -> value.ht );
845    
846     add_assoc_long( z, "log_id", pChangelog -> getChangelogID( ) );
847     add_assoc_long( z, "item_id", pChangelog -> getItemID( ) );
848     add_assoc_long( z, "log_date", pChangelog -> getDate( ) );
849     add_assoc_string( z, "log", ( char* )pChangelog -> getLog( ), 1 );
850    
851     return RES_OK;
852     }
853    
854     /**
855     *
856     * item_t????絎鴻??PHP???????????????
857     * @param pItem 紊???????tem_t*
858     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
859     * @return RES_OK
860     *
861     */
862     result_t itemToZval( const item_t *pItem, zval *z )
863     {
864     zend_hash_clean( z -> value.ht );
865    
866     add_assoc_long( z, "item_id", pItem -> getItemID( ) );
867     add_assoc_long( z, "item_type_id", pItem -> getItemTypeID( ) );
868     add_assoc_long( z, "uid", pItem -> getContributorUID( ) );
869     add_assoc_string( z, "title", ( char* )pItem -> getTitle( ), 1 );
870     add_assoc_string( z, "keywords", ( char* )pItem -> getKeywords( ), 1 );
871     add_assoc_string( z, "description", ( char* )pItem -> getDescription( ), 1 );
872     add_assoc_string( z, "doi", ( char* )pItem -> getDOI( ), 1 );
873     add_assoc_long( z, "last_update_date", pItem -> getLastUpdateDate( ) );
874     add_assoc_long( z, "creation_date", pItem -> getCreationDate( ) );
875    
876     return RES_OK;
877     }
878    
879    
880     result_t itemsToZval( const item_t *pItems, int itemsLen, zval *z )
881     {
882     zend_hash_clean( z -> value.ht );
883     for( int i = 0; i < itemsLen; i++ ){
884     zval *new_array;
885     MAKE_STD_ZVAL(new_array);
886     if(array_init(new_array) != SUCCESS){
887     return RES_ERROR;
888     }
889     add_index_zval( z, i, new_array );
890     itemToZval( &pItems[ i ], new_array );
891     }
892 aga 1.2 return RES_OK;
893     }
894    
895 youi 1.24 /**
896     *
897     * PHP???f?渇????????絎鴻??group_t?????????
898     *
899     * @param z 紊????????f?渇????
900     * @param pGroup 紊???腟??????吾??莨若???違???若??
901     * @return RES_OK
902     *
903     */
904     result_t zvalToItem( zval *z, item_t* pItem )
905     {
906     zval **tmp;
907     HashPosition pos;
908     int i = 0;
909     char* key = 0;
910    
911     key = "item_id";
912     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
913     convert_to_long_ex( tmp ) ;
914     pItem -> setItemID( (*tmp) -> value.lval );
915     }
916     key = "item_type_id";
917     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
918     convert_to_long_ex( tmp ) ;
919     pItem -> setItemTypeID( (*tmp) -> value.lval );
920     }
921     key = "uid";
922     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
923     convert_to_long_ex( tmp ) ;
924     pItem -> setContributorUID( (*tmp) -> value.lval );
925     }
926     key = "title";
927     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
928     convert_to_string_ex( tmp ) ;
929     pItem -> setTitle( (*tmp) -> value.str.val );
930     }
931     key = "keywords";
932     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
933     convert_to_string_ex( tmp ) ;
934     pItem -> setKeywords( (*tmp) -> value.str.val );
935     }
936     key = "description";
937     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
938     convert_to_string_ex( tmp ) ;
939     pItem -> setDescription( (*tmp) -> value.str.val );
940     }
941     key = "doi";
942     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
943     convert_to_string_ex( tmp ) ;
944     pItem -> setDOI( (*tmp) -> value.str.val );
945     }
946     key = "last_update_date";
947     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
948     convert_to_long_ex( tmp ) ;
949     pItem -> setLastUpdateDate( (*tmp) -> value.lval );
950     }
951     key = "creation_date";
952     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
953     convert_to_long_ex( tmp ) ;
954     pItem -> setCreationDate( (*tmp) -> value.lval );
955     }
956     return RES_OK;
957     }
958 aga 1.16
959     /**
960     *
961     * account_t????絎鴻??PHP???????????????
962     * @param pAccount 紊???????ccount_t*
963     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
964     * @return RES_OK
965     *
966     */
967 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
968     {
969 youi 1.24 zend_hash_clean( z -> value.ht );
970    
971     add_assoc_long( z, "uid", pAccount -> getUID( ) );
972     add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
973     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
974     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
975     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
976     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
977     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
978     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
979     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
980     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
981     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
982     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
983     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
984     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
985     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
986     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
987     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
988     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
989     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
990     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
991     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
992     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
993     add_assoc_long( z, "level", pAccount -> getLevel( ) );
994     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
995     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
996     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
997     add_assoc_long( z, "rank", pAccount -> getRank( ) );
998     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
999     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
1000     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
1001     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
1002    
1003     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
1004     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
1005     add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
1006     add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
1007     add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
1008     add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
1009     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
1010     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
1011     add_assoc_string( z, "base_url", ( char* )pAccount -> getBaseURL( ), 1 );
1012     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
1013     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
1014     add_assoc_long( z, "private_index_id", pAccount -> getPrivateIndexID( ) );
1015 youi 1.6 return RES_OK;
1016     }
1017 youi 1.24
1018 aga 1.16 /**
1019     *
1020     * 茲??違??ccount_t????絎鴻??PHP?????????????????????
1021     * @param pAccounts 紊???????ccount_t*
1022     * @param accountsLen pAccounts?????????激??
1023     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1024     * @return RES_OK
1025     *
1026     z: ?????????????????????????? <br>
1027 youi 1.24 array(
1028     array(
1029     'uid'=>100,
1030     'activate'=>1,
1031     'division'=>'foo',
1032     'tel'=>'123-456-789',
1033     ...
1034     ),
1035     ...
1036     )
1037 aga 1.16 */
1038 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1039 aga 1.4 {
1040 youi 1.24 zend_hash_clean( z -> value.ht );
1041     for( int i = 0; i < accountsLen; i++ ){
1042     zval *new_array;
1043     MAKE_STD_ZVAL(new_array);
1044     if(array_init(new_array) != SUCCESS){
1045     return RES_ERROR;
1046     }
1047     add_index_zval( z, i, new_array );
1048     accountToZval( &pAccounts[ i ], new_array );
1049     }
1050 youi 1.6 return RES_OK;
1051 aga 1.2 }
1052    
1053 aga 1.16 /**
1054     *
1055     * 茲??違??roup_t????絎鴻??PHP?????????????????????
1056     * @param pGroups 紊???????roup_t*
1057     * @param groupsLen pGroups?????????激??
1058     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1059     * @return RES_OK
1060     *
1061     z: ?????????????????????????? <br>
1062 youi 1.24 array(
1063     array(
1064     'gid'=>1,
1065     'gname'=>'foo group',
1066     'gdesc'=>'group of foo'
1067     ),
1068     ...
1069     )
1070 aga 1.16 */
1071 youi 1.6 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1072 aga 1.4 {
1073 youi 1.24 zend_hash_clean( z -> value.ht );
1074     for( int i = 0; i < groupsLen; i++ ){
1075     zval *new_array;
1076     MAKE_STD_ZVAL(new_array);
1077     if(array_init(new_array) != SUCCESS){
1078     return RES_ERROR;
1079     }
1080     add_index_zval( z, i, new_array );
1081     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
1082     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
1083     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
1084     add_assoc_long( new_array, "group_index_id", pGroups[ i ].getGroupIndexID( ) );
1085     }
1086 youi 1.6 return RES_OK;
1087 aga 1.2 }
1088    
1089 youi 1.7 /**
1090 youi 1.24 *
1091 youi 1.7 * group_t????絎鴻??PHP???f?渇?????????????
1092 youi 1.24 *
1093 aga 1.16 * @param pGroup 紊????????違???若??????/span>
1094 youi 1.7 * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1095     * @return RES_OK
1096 youi 1.24 *
1097 youi 1.7 */
1098     result_t groupToZval( const group_t *pGroup, zval *z )
1099 youi 1.6 {
1100 youi 1.24 zend_hash_clean( z -> value.ht );
1101     add_assoc_long( z, "gid", pGroup -> getGID( ) );
1102     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
1103     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
1104     add_assoc_long( z, "group_index_id", pGroup -> getGroupIndexID( ) );
1105 youi 1.6 return RES_OK;
1106     }
1107    
1108 aga 1.16 /**
1109 youi 1.24 *
1110 aga 1.16 * PHP???f?渇????????絎鴻??group_t?????????
1111 youi 1.24 *
1112 aga 1.16 * @param z 紊????????f?渇????
1113     * @param pGroup 紊???腟??????吾??莨若???違???若??
1114     * @return RES_OK
1115 youi 1.24 *
1116 aga 1.16 */
1117 youi 1.7 result_t zvalToGroup( zval *z, group_t *pGroup )
1118     {
1119 youi 1.24 zval **tmp;
1120     HashPosition pos;
1121     int i = 0;
1122     char* key = 0;
1123    
1124     key = "gid";
1125     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1126     convert_to_long_ex( tmp ) ;
1127     pGroup -> setGID( (*tmp) -> value.lval );
1128     }
1129     key = "gname";
1130     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1131     convert_to_string_ex( tmp ) ;
1132     pGroup -> setGname( (*tmp) -> value.str.val );
1133     }
1134     key = "gdesc";
1135     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1136     convert_to_string_ex( tmp ) ;
1137     pGroup -> setDesc( (*tmp) -> value.str.val );
1138     }
1139     key = "group_index_id";
1140     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1141     convert_to_long_ex( tmp ) ;
1142     pGroup -> setGroupIndexID( (*tmp) -> value.lval );
1143     }
1144 youi 1.7 return RES_OK;
1145     }
1146    
1147 aga 1.16 /**
1148 youi 1.24 *
1149 aga 1.16 * session_t????絎鴻??PHP???f?渇?????????????
1150 youi 1.24 *
1151 aga 1.16 * @param pSession 紊???????ession_t
1152     * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1153     * @return RES_OK
1154 youi 1.24 *
1155 aga 1.16 */
1156     result_t sessionToZval( const session_t *pSession, zval *z )
1157     {
1158     string sessionID(unsignedIntToString(pSession->getSessionID()));
1159     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
1160 youi 1.24
1161 aga 1.16 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1162     add_assoc_string(z, "date", (char *)date.c_str(), 1);
1163 youi 1.24
1164 aga 1.20 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1165 aga 1.16 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1166 youi 1.24
1167 aga 1.16 return RES_OK;
1168     }
1169    
1170 aga 1.22 /**
1171     *
1172     * index_t????絎鴻??PHP???????????????
1173     * @param pIndex 紊???????ndex_t*
1174     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1175     * @return RES_OK
1176     *
1177     */
1178     result_t indexToZval( const index_t *pIndex, zval *z )
1179     {
1180 youi 1.24 zend_hash_clean( z -> value.ht );
1181    
1182     add_assoc_long( z, "item_id", pIndex -> getItemID( ) );
1183     add_assoc_long( z, "item_type_id", pIndex -> getItemTypeID( ) );
1184     add_assoc_long( z, "contributor_uid", pIndex -> getContributorUID( ) );
1185     add_assoc_string( z, "title", ( char* )pIndex -> getTitle( ), 1 );
1186     add_assoc_string( z, "keywords", ( char* )pIndex -> getKeywords( ), 1 );
1187     add_assoc_string( z, "description", ( char* )pIndex -> getDescription( ), 1 );
1188     add_assoc_long( z, "last_update_date", pIndex -> getLastUpdateDate( ) );
1189     add_assoc_long( z, "creation_date", pIndex-> getCreationDate( ) );
1190     add_assoc_long( z, "parent_index_id", pIndex -> getParentIndexID( ) );
1191     add_assoc_long( z, "owner_uid", pIndex -> getOwnerUID( ) );
1192     add_assoc_long( z, "owner_gid", pIndex -> getOwnerGID( ) );
1193     add_assoc_long( z, "open_level", pIndex -> getOpenLevel( ) );
1194     add_assoc_long( z, "sort_number", pIndex -> getSortNumber( ) );
1195 aga 1.22 return RES_OK;
1196     }
1197    
1198     result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1199     {
1200 youi 1.24 zend_hash_clean( z -> value.ht );
1201     for( int i = 0; i < indexesLen; i++ ){
1202     zval *new_array;
1203     MAKE_STD_ZVAL(new_array);
1204     if(array_init(new_array) != SUCCESS){
1205     return RES_ERROR;
1206     }
1207     add_index_zval( z, i, new_array );
1208     indexToZval( &pIndexes[ i ], new_array );
1209     }
1210 aga 1.22 return RES_OK;
1211     }
1212    
1213    
1214 youi 1.7
1215 aga 1.16
1216     /** ??絎??????違???若???????宴??緇???<br>
1217 youi 1.24 int xnp_get_group( int sid, int gid, array group );
1218     @param sid XNP???祉???激?с??D
1219     @param gid XNP ? group_id
1220     @param group 腟?????????????????
1221     @return 0 success <br>
1222 aga 1.16 */
1223 youi 1.21 ZEND_FUNCTION(xnp_get_group)
1224 aga 1.4 {
1225 youi 1.6 long sid, gid;
1226     zval *zgroup;
1227 youi 1.24
1228 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1229 youi 1.24 &sid, &gid, &zgroup) == FAILURE) {
1230 youi 1.6 return;
1231     }
1232 youi 1.24
1233 youi 1.6 const group_t *pgroup;
1234     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1235     if ( RES_OK == result ){
1236 youi 1.7 groupToZval( pgroup, zgroup );
1237 youi 1.19 freeGroup( pgroup );
1238 youi 1.6 }
1239 youi 1.24
1240     RETURN_LONG(result);
1241 youi 1.6 }
1242    
1243 aga 1.2
1244 aga 1.16 /** ??絎??????違???若??(茲????????宴??緇???<br>
1245 youi 1.24 xnp_get_groups( int sid, array gids, array criteria, array groups );
1246     @param sid XNP???祉???激?с??D
1247     @param gids XNP ? group_id ??????
1248     @param criteria ?>散
1249     @param groups 腟???????????????????????
1250     @return 0 success <br>
1251 aga 1.16 */
1252 youi 1.21 ZEND_FUNCTION(xnp_get_groups)
1253 youi 1.6 {
1254     result_t result;
1255     long sid, uid;
1256     zval *zcriteria;
1257     zval *zgids;
1258     zval *zgroups;
1259 youi 1.24 zval **ppzTmp = 0;
1260     HashPosition pos;
1261     int res2;
1262     int gidsLen;
1263     const group_t* groups;
1264     int groupsLen;
1265    
1266 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1267 youi 1.24 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1268 youi 1.6 return;
1269     }
1270 youi 1.24
1271     //gids???違???若??ID???潟???若????
1272     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
1273     groupid_t *gids = new groupid_t[ gidsLen ];
1274     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
1275     for( int i = 0; i < gidsLen; i++ ){
1276     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
1277     SEPARATE_ZVAL(ppzTmp);
1278     convert_to_long_ex(ppzTmp);
1279     gids[ i ] = Z_LVAL_PP(ppzTmp);
1280     }
1281     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
1282     }
1283    
1284 youi 1.6 zCriteria_t zcri(zcriteria);
1285     result = zcri.getResult();
1286     if ( RES_OK == result ){
1287 youi 1.24 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
1288     if ( RES_OK == result ){
1289     groupsToZval( groups, groupsLen, zgroups );
1290     delete[] gids;
1291     freeGroup( groups );
1292     }
1293     }
1294     RETURN_LONG(result);
1295 youi 1.6 }
1296    
1297    
1298 aga 1.16 /** ??絎????????若?吟???≪?????若?帥??????????茯帥?鴻??<br>
1299 youi 1.24 int xnp_is_moderator(int sid, int uid)
1300     @param sid XNP???祉???激?с??D
1301     @param uid xoops ? uid (xoops_users.uid)
1302     @return true ?≪?????若?帥?с???? <br>
1303 aga 1.16 */
1304 youi 1.21 ZEND_FUNCTION(xnp_is_moderator)
1305 youi 1.6 {
1306 youi 1.21 long xnpSessionID;
1307 youi 1.6 userid_t uid;
1308 youi 1.24
1309     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1310     &xnpSessionID, &uid) == FAILURE) {
1311 youi 1.6 return;
1312     }
1313 youi 1.24
1314 youi 1.21 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1315 youi 1.24 RETURN_BOOL(result)
1316 youi 1.6 }
1317    
1318 aga 1.16 /** ???若?九??????uid??茯帥?鴻??<br>
1319 youi 1.24 int xnp_get_uid(string uname,int &uid)
1320     @param sid XNP???祉???激?с??D
1321     @param uname xoops ? uname (xoops_users.uname)
1322     @param uid xoops ? uid (xoops_users.uid) ??????????紊???/span>
1323     @return 0 success
1324 aga 1.16 */
1325 youi 1.21 ZEND_FUNCTION(xnp_get_uid)
1326 youi 1.6 {
1327     char *uname;
1328     int unameLen;
1329 aga 1.14 zval *zuid;
1330 youi 1.6 userid_t uid;
1331 youi 1.24
1332     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1333 aga 1.14 &uname, &unameLen, &zuid) == FAILURE) {
1334 youi 1.6 return;
1335     }
1336 youi 1.24
1337 aga 1.14 if (!PZVAL_IS_REF(zuid)) {
1338     zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
1339     RETURN_LONG(RES_PHP_NONREF);
1340     }
1341 youi 1.24
1342 youi 1.6 string strUname( uname, unameLen );
1343     result_t result = getUid( strUname.c_str(), &uid );
1344 aga 1.14 ZVAL_LONG(zuid, (long)uid);
1345     RETURN_LONG((long)result);
1346 aga 1.2 }
1347    
1348 youi 1.21 ZEND_FUNCTION(xnp_test_criteria)
1349 aga 1.2 {
1350     zval *z;
1351 youi 1.24
1352     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1353 aga 1.2 &z) == FAILURE) {
1354     return;
1355     }
1356     zend_printf("zend_printf...<br>\n");
1357     zCriteria_t zcri(z);
1358     zcri.dump();
1359     RETURN_FALSE
1360     }
1361    
1362 youi 1.21 ZEND_FUNCTION(xnp_test_uids)
1363 aga 1.2 {
1364     zval *z;
1365 youi 1.24
1366     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1367 aga 1.2 &z) == FAILURE) {
1368     return;
1369     }
1370     zend_printf("zend_printf...<br>\n");
1371     zUIDs_t zuids(z);
1372     zuids.dump();
1373     RETURN_FALSE
1374     }
1375    
1376    
1377    
1378 aga 1.4 /** DB??・膓????????≪??・膓?筝???・膓???????????????<br>
1379 youi 1.24 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix]]]] );
1380     @param host ?ョ????????ユ????ULL
1381     @param user DB?ョ????????若?九???????ユ????ULL
1382     @param password DB?ョ????????鴻???若???????ユ????ULL
1383     @param dbname DB?ョ?????B???????ユ????quot;"
1384     @param prefix XOOPS DB ??refix??
1385     @return 0 success <br>
1386 aga 1.1 */
1387 youi 1.21 ZEND_FUNCTION(xnp_initialize_db)
1388 aga 1.1 {
1389     zval **parameters[5];
1390     char *host;
1391     char *user;
1392 aga 1.2 char *password;
1393     char *dbname;
1394     char *prefix;
1395 aga 1.1
1396     /* get the number of arguments */
1397     int argNum = ZEND_NUM_ARGS();
1398     if (argNum > 5)
1399     WRONG_PARAM_COUNT;
1400    
1401     /* argument count is correct, now retrieve arguments */
1402     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
1403     WRONG_PARAM_COUNT;
1404    
1405 aga 1.2 if (argNum < 1) host = NULL;
1406 aga 1.1 else host = getZvalString( parameters[0] );
1407 youi 1.24
1408 aga 1.1 if (argNum < 2) user = NULL;
1409     else user = getZvalString( parameters[1] );
1410 youi 1.24
1411 aga 1.2 if (argNum < 3) password = NULL;
1412     else password = getZvalString( parameters[2] );
1413 youi 1.24
1414 aga 1.2 if (argNum < 4) dbname = "";
1415     else dbname = getZvalString( parameters[3] );
1416 youi 1.24
1417 aga 1.2 if (argNum < 5) prefix = "";
1418     else prefix = getZvalString( parameters[4] );
1419 youi 1.24
1420 aga 1.2 result_t result = initializeDB( host, user, password, dbname, prefix );
1421 youi 1.24
1422 aga 1.2 RETURN_LONG(result);
1423 aga 1.1 }
1424    
1425 aga 1.4 /** ???違?ゃ?潟??????<br>
1426 youi 1.24 int xnp_login_user(string uname, string password, int &session_id)
1427     @param uname ???若?九??(xoops_users.uname)
1428     @param password ???鴻???若??(md5(password)=xoops_users.pass)
1429     @return 0 success
1430 aga 1.4 */
1431 youi 1.21 ZEND_FUNCTION(xnp_login_user)
1432 aga 1.1 {
1433     char *uname;
1434     int unameLen;
1435     char *passwd;
1436     int passwdLen;
1437 youi 1.21 zval *zXNPSessionID;
1438 youi 1.24
1439     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
1440 youi 1.21 &uname, &unameLen, &passwd, &passwdLen, &zXNPSessionID) == FAILURE) {
1441 aga 1.1 return;
1442     }
1443 youi 1.24
1444 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1445 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1446     RETURN_LONG(RES_PHP_NONREF);
1447     }
1448 youi 1.24
1449 youi 1.21 sessionid_t xnpSessionID;
1450     result_t result = loginUser( uname, passwd, &xnpSessionID );
1451 aga 1.14 if ( result == RES_OK )
1452 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1453 aga 1.14 RETURN_LONG((long)result);
1454 aga 1.1 }
1455    
1456 aga 1.4 /** ???違?≪??????????<br>
1457 youi 1.24 void xnp_logout_user(int xnp_session_id)
1458     @param xnp_session_id XNP???祉???激?с??D
1459     @return ????
1460 aga 1.4 */
1461 youi 1.21 ZEND_FUNCTION(xnp_logout_user)
1462 aga 1.1 {
1463 youi 1.21 long xnpSessionID;
1464 youi 1.24
1465 youi 1.21 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &xnpSessionID) == FAILURE) {
1466 aga 1.1 return;
1467     }
1468 youi 1.21 logoutUser( (sessionid_t)xnpSessionID );
1469 youi 1.24
1470     RETURN_NULL();
1471 aga 1.1 }
1472    
1473 youi 1.21 /** XNP???祉???激?с??D 篏???<br>
1474 youi 1.24 int xnp_create_session( string xoops_sess_id, int uid, int &session )
1475     @param xoops_sess_id xoops???祉???激?с??D
1476     @param uid xoops ? uid (xoops_users.uid)
1477     @param session 篏???????XNP??ession??????????紊???/span>
1478     @return 0 ????
1479 aga 1.4 */
1480 youi 1.21 ZEND_FUNCTION(xnp_create_session)
1481 aga 1.2 {
1482     char *xoopsSessionID;
1483     int xoopsSessionIDLen;
1484 aga 1.5 long uid;
1485 youi 1.21 zval *zXNPSessionID;
1486 youi 1.24
1487 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1488 youi 1.21 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zXNPSessionID) == FAILURE) {
1489 aga 1.2 return;
1490     }
1491 youi 1.24
1492 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1493 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1494     RETURN_LONG(RES_PHP_NONREF);
1495     }
1496 youi 1.24
1497 youi 1.21 sessionid_t xnpSessionID = 0;
1498     result_t result = createSession( xoopsSessionID, (userid_t)uid, &xnpSessionID );
1499 aga 1.14 if ( result == RES_OK )
1500 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1501 aga 1.14 RETURN_LONG((long)result);
1502 aga 1.4 }
1503    
1504 youi 1.21 /** XNP ? session ???膣井???宴??緇???<br>
1505 youi 1.24 int xnp_get_session( int xnp_session_id, array session_info )
1506     @param xnp_session_id XNP???祉???激?с??D
1507     @param session_info 腟?????????????????
1508     @return 0 success
1509 aga 1.4 */
1510 youi 1.21 ZEND_FUNCTION(xnp_get_session)
1511 aga 1.4 {
1512 youi 1.21 long xnpSessionID;
1513 aga 1.4 zval *sessionInfo;
1514     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1515 youi 1.21 &xnpSessionID, &sessionInfo) == FAILURE) {
1516 aga 1.4 return;
1517     }
1518     const session_t *session = 0;
1519 youi 1.21 result_t result = getSession( (sessionid_t)xnpSessionID, &session );
1520 aga 1.4 if ( result == RES_OK ){
1521     sessionToZval( session, sessionInfo );
1522 youi 1.19 freeSession( session );
1523 aga 1.4 }
1524 youi 1.24
1525 aga 1.4 RETURN_LONG((long)result);
1526 aga 1.2 }
1527 aga 1.1
1528 aga 1.16 /** ???若?吟??ctivate?倶??????緇?????<br>
1529 youi 1.24 bool xnp_is_activated( int xnp_session_id, int user_id )
1530     @param xnp_session_id XNP???祉???激?с??D
1531     @param user_id xoops_users.uid
1532     @return 0 success
1533 aga 1.5 */
1534 youi 1.21 ZEND_FUNCTION(xnp_is_activated)
1535 aga 1.2 {
1536     long sid, uid;
1537 youi 1.24
1538 aga 1.5 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1539 aga 1.2 return;
1540     }
1541 youi 1.24
1542 aga 1.2 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1543 youi 1.24
1544     RETURN_BOOL(result);
1545 aga 1.2 }
1546 aga 1.1
1547 youi 1.17 /** activate??????<br>
1548 youi 1.24 bool xnp_activate( int xnp_session_id, int user_id, bool activated )
1549     @param xnp_session_id xnp ? session id
1550     @param user_id xoops_users.uid
1551     @param activated true:activate, false:inactivate
1552     @return 0 success
1553 aga 1.5 */
1554 youi 1.21 ZEND_FUNCTION(xnp_activate)
1555 aga 1.2 {
1556     long sid, uid;
1557     bool activated;
1558 youi 1.24
1559 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1560     &sid, &uid, &activated) == FAILURE) {
1561     return;
1562     }
1563 youi 1.24
1564 aga 1.2 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1565 youi 1.24
1566     RETURN_LONG(result);
1567 aga 1.2 }
1568 aga 1.1
1569 youi 1.21 /** XNP???≪?????潟???違??緇?????<br>
1570 youi 1.24 int xnp_get_account_count( int xnp_session_id )
1571     @param xnp_session_id XNP???祉???激?с??D
1572     @return 0 success
1573 aga 1.5 */
1574 youi 1.21 ZEND_FUNCTION(xnp_get_account_count)
1575 aga 1.2 {
1576     long sid;
1577 youi 1.24
1578 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1579     &sid) == FAILURE) {
1580     return;
1581     }
1582 youi 1.24
1583 aga 1.2 long count = getAccountCount( (sessionid_t)sid );
1584 youi 1.24 RETURN_LONG(count);
1585 aga 1.2 }
1586 aga 1.1
1587 aga 1.5 /** ?≪?????潟???????ゃ??????<br>
1588 youi 1.24 bool xnp_delete_account( int xnp_session_id, int user_id )
1589     @param xnp_session_id XNP???祉???激?с??D
1590     @param user_id xoops_users.uid
1591     @return 0 success
1592 aga 1.5 */
1593 youi 1.21 ZEND_FUNCTION(xnp_delete_account)
1594 aga 1.2 {
1595     long sid, uid;
1596 youi 1.24
1597 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1598     &sid, &uid) == FAILURE) {
1599     return;
1600     }
1601 youi 1.24
1602 aga 1.2 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1603 youi 1.24
1604     RETURN_LONG(result);
1605 aga 1.2 }
1606 aga 1.1
1607 aga 1.5 /** ?≪?????潟?????宴??緇?????<br>
1608 youi 1.24 int xnp_get_account( int xnp_session_id, int user_id, array account_info )
1609     @param xnp_session_id XNP???祉???激?с??D
1610     @param user_id xoops_users.uid
1611     @param account_info ?≪?????潟?????宴???????????f?渇????
1612     @return 0 success
1613 aga 1.5 */
1614 youi 1.21 ZEND_FUNCTION(xnp_get_account)
1615 aga 1.2 {
1616     long sid, uid;
1617     zval *zaccount;
1618 youi 1.24
1619 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1620     &sid, &uid, &zaccount) == FAILURE) {
1621 youi 1.24 fprintf( stderr, "error occured " );
1622 aga 1.2 return;
1623     }
1624 youi 1.24
1625 aga 1.2 const account_t *paccount;
1626     result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1627     if ( RES_OK == result ){
1628     accountToZval( paccount, zaccount );
1629 youi 1.19 freeAccount( paccount );
1630 aga 1.2 }
1631 youi 1.24
1632     RETURN_LONG(result);
1633 aga 1.2 }
1634 aga 1.1
1635 aga 1.5 /** ?>散????眼?????≪?????潟???????宴??緇?????<br>
1636 youi 1.24 int xnp_get_accoutns( int sid, array uids, array criteria, array accounts );
1637     @param xnp_session_id XNP???祉???激?с??D
1638     @param user_id xoops_users.uid
1639     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1640     @param account_info ?≪?????潟?????宴???????????f?渇????
1641     @return 0 success
1642 aga 1.5 */
1643 youi 1.21 ZEND_FUNCTION(xnp_get_accounts)
1644 aga 1.2 {
1645     result_t result;
1646     long sid;
1647     zval *zuids;
1648     zval *zcriteria;
1649     zval *zaccount;
1650 youi 1.24
1651 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1652     &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1653     return;
1654     }
1655 youi 1.24
1656 aga 1.2 zCriteria_t zcri(zcriteria);
1657     result = zcri.getResult();
1658     if ( RES_OK == result ){
1659     zUIDs_t zUIDs(zuids);
1660     result = zUIDs.getResult();
1661     if ( RES_OK == result ){
1662     const account_t *paccounts;
1663     int accountLen;
1664 youi 1.24 result = getAccounts( (sessionid_t)sid,
1665 aga 1.2 zUIDs.getPUID(), zUIDs.getLen(),
1666     &zcri, &paccounts, &accountLen );
1667     if ( RES_OK == result ){
1668     accountsToZval( paccounts, accountLen, zaccount );
1669 youi 1.19 freeAccount( paccounts );
1670 aga 1.2 }
1671     }
1672     }
1673 youi 1.24
1674     RETURN_LONG(result);
1675 aga 1.2 }
1676 aga 1.1
1677 youi 1.17 /** ?≪?????潟?????宴??荐??蚊??????<br>
1678 youi 1.24 int xnp_insert_account( int sid, array account_info, int &user_id );
1679     @param xnp_session_id xnp ? session id
1680     @param account_info 荐??蚊???????≪?????潟????????/span>
1681     @param user_id ???若??D(xoops_users.uid)???吾??莨若???????<???潟??/span>
1682     @return 0 success
1683 aga 1.5 */
1684 youi 1.21 ZEND_FUNCTION(xnp_insert_account)
1685 aga 1.2 {
1686     result_t result;
1687     long sid;
1688     zval *zaccount;
1689 youi 1.17 zval *zuid;
1690 youi 1.24 userid_t uid;
1691    
1692 youi 1.17 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1693     &sid, &zaccount, &zuid) == FAILURE) {
1694 aga 1.2 return;
1695     }
1696 youi 1.24
1697 aga 1.2 zAccount_t zacc(zaccount);
1698     result = zacc.getResult();
1699     if ( RES_OK == result ){
1700 youi 1.17 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1701 aga 1.2 }
1702 youi 1.24 zuid -> type = IS_LONG;
1703     zuid -> value.lval = uid;
1704     RETURN_LONG(result);
1705 aga 1.2 }
1706 aga 1.1
1707 aga 1.5 /** ?≪?????潟?????宴???贋?違??????<br>
1708 youi 1.24 int xnp_update_account( int sid, array account );
1709     @param xnp_session_id XNP???祉???激?с??D
1710     @param account_info ?吾??莨若???鴻???≪?????潟?????宴??茵????f?渇????
1711     @return 0 success
1712 aga 1.5 */
1713 youi 1.21 ZEND_FUNCTION(xnp_update_account)
1714 aga 1.2 {
1715     result_t result;
1716     long sid;
1717     zval *zaccount;
1718 youi 1.24
1719 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1720     &sid, &zaccount) == FAILURE) {
1721     return;
1722     }
1723 youi 1.24
1724 aga 1.2 zAccount_t zacc(zaccount);
1725     result = zacc.getResult();
1726     if ( RES_OK == result ){
1727     result = updateAccount( (sessionid_t)sid, &zacc );
1728     }
1729 youi 1.24
1730     RETURN_LONG(result);
1731 aga 1.2 }
1732 aga 1.1
1733 aga 1.5 /** ?>散???????≪?????潟????id???荀с??緇?????<br>
1734 youi 1.24 int xnp_dump_uids( int xnp_session_id, array criteria, array uids );
1735     @param xnp_session_id XNP???祉???激?с??D
1736     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1737     @param uids uid??????????????
1738     @return 0 success
1739 aga 1.5 */
1740 youi 1.21 ZEND_FUNCTION(xnp_dump_uids)
1741 aga 1.2 {
1742     result_t result;
1743     long sid;
1744     zval *zcriteria;
1745     zval *zuids;
1746 youi 1.24
1747 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1748     &sid, &zcriteria, &zuids) == FAILURE) {
1749     return;
1750     }
1751 youi 1.24
1752 aga 1.2 zCriteria_t zcri(zcriteria);
1753     result = zcri.getResult();
1754     if ( RES_OK == result ){
1755     userid_t *puid;
1756     int uidLen;
1757     result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1758     if ( RES_OK == result ){
1759     uidsToZval( puid, uidLen, &zuids );
1760 youi 1.19 freeUID( puid );
1761 aga 1.2 }
1762     }
1763 youi 1.24
1764     RETURN_LONG(result);
1765 aga 1.2 }
1766 aga 1.1
1767 youi 1.21 /** XNP???違???若?????違??緇???<br>
1768 youi 1.24 int xnp_get_group_count( int xnp_session_id );
1769     @param xnp_session_id XNP???祉???激?с??D
1770     @return ?違???若????/span>
1771 aga 1.5 */
1772 youi 1.21 ZEND_FUNCTION(xnp_get_group_count)
1773 aga 1.1 {
1774 aga 1.2 result_t result;
1775     long sid;
1776 youi 1.24
1777 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1778     &sid) == FAILURE) {
1779     return;
1780     }
1781 youi 1.24
1782 aga 1.2 int count = getGroupCount( (sessionid_t)sid );
1783 youi 1.24
1784     RETURN_LONG(count);
1785 aga 1.2 }
1786 aga 1.1
1787 aga 1.5 /** uid?ф??絎????????若?吟??絮????違???若???с?????ゆ?>散????眼?????違???若????id??緇???<br>
1788 youi 1.24 int xnp_get_group_by_uid( int xnp_session_id, int uid, array criteria, array gids );
1789     @param xnp_session_id XNP???祉???激?с??D
1790     @param user_id xoops_users.uid
1791     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1792     @param gids gid??????????????
1793     @return 0 success
1794 aga 1.5 */
1795 youi 1.21 ZEND_FUNCTION(xnp_get_groups_by_uid)
1796 aga 1.2 {
1797     result_t result;
1798     long sid, uid;
1799     zval *zcriteria;
1800     zval *zgids;
1801 youi 1.24
1802 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1803     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1804     return;
1805 aga 1.1 }
1806 youi 1.24
1807 aga 1.2 zCriteria_t zcri(zcriteria);
1808     result = zcri.getResult();
1809     if ( RES_OK == result ){
1810     groupid_t *pgids;
1811     int gidLen;
1812     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1813     if ( RES_OK == result ){
1814     gidsToZval( pgids, gidLen, &zgids );
1815 youi 1.19 freeGID( pgids );
1816 aga 1.2 }
1817 aga 1.1 }
1818 youi 1.24
1819     RETURN_LONG(result);
1820 aga 1.2 }
1821    
1822    
1823 aga 1.5
1824     /** uid?ф??絎????????若?吟??gid?ф??絎??????違???若?????違???若??膊∞??????????????緇???<br>
1825 youi 1.24 int xnp_is_group_admin( int sid, int gid, int uid );
1826     @param xnp_session_id XNP???祉???激?с??D
1827     @param group_id XNP???違???若??ID
1828     @param user_id xoops_users.uid
1829     @return true: ?違???若??膊∞?????с??????
1830     @return false: ?違???若??膊∞?????с???????????????????若?с??????
1831 aga 1.5 */
1832 youi 1.21 ZEND_FUNCTION(xnp_is_group_admin)
1833 aga 1.2 {
1834     result_t result;
1835     long sid, gid, uid;
1836 youi 1.24
1837 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1838     &sid, &gid, &uid) == FAILURE) {
1839     return;
1840 aga 1.1 }
1841 youi 1.24
1842 aga 1.2 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1843 youi 1.24
1844     RETURN_BOOL(b);
1845 aga 1.2 }
1846    
1847 aga 1.5 /** ?>散????眼?????違???若????id???荀с??緇?????<br>
1848 youi 1.24 int xnp_dump_gids( int sid, array criteria, array gids );
1849     @param xnp_session_id XNP???祉???激?с??D
1850     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1851     @param gids gid??????????????
1852     @return 0 success
1853 aga 1.5 */
1854 youi 1.21 ZEND_FUNCTION(xnp_dump_gids)
1855 aga 1.2 {
1856     result_t result;
1857     long sid;
1858     zval *zcriteria;
1859     zval *zgids;
1860 youi 1.24
1861 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1862     &sid, &zcriteria, &zgids) == FAILURE) {
1863     return;
1864     }
1865 youi 1.24
1866 aga 1.2 zCriteria_t zcri(zcriteria);
1867     result = zcri.getResult();
1868     if ( RES_OK == result ){
1869     groupid_t *pgid;
1870     int gidLen;
1871     result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
1872     if ( RES_OK == result ){
1873     gidsToZval( pgid, gidLen, &zgids );
1874 youi 1.19 freeGID( pgid );
1875 aga 1.1 }
1876     }
1877 youi 1.24
1878     RETURN_LONG(result);
1879 aga 1.1 }
1880 aga 1.8
1881     /** gid?ф??絎??????違???若??????????с?????ゆ?>散????眼?????違???若??膊∞??????id???荀с??緇?????<br>
1882 youi 1.24 int xnp_dump_group_admins(int sid, int group_id, array criteria, array uids )
1883     @param sid XNP???祉???激?с??D
1884     @param group_id XNP???違???若??ID
1885     @param criteria ?>散
1886     @param uids uid???荀с??????????????
1887     @return 0 success
1888 aga 1.8 */
1889    
1890 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
1891 aga 1.8 {
1892     long sid, gid;
1893     zval *zcriteria;
1894     zval *zuids;
1895 youi 1.24
1896     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1897     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1898 aga 1.8 return;
1899     }
1900 youi 1.24
1901 aga 1.8 zCriteria_t zcri(zcriteria);
1902     result_t result = zcri.getResult();
1903     if ( result == RES_OK ){
1904     userid_t *uids;
1905     int uidsLen;
1906     result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1907     if ( result == RES_OK ){
1908     uidsToZval( uids, uidsLen, &zuids );
1909 youi 1.19 freeUID( uids );
1910 aga 1.8 }
1911     }
1912     RETURN_LONG( result );
1913     }
1914    
1915 aga 1.11 /** ?違???若???????<?潟???若?????ゃ??????<br>
1916 youi 1.24 int xnp_delete_member(int sid, int group_id, int user_id )
1917     @param sid XNP???祉???激?с??D
1918     @param group_id XNP???違???若??ID
1919     @param user_id ???若??D
1920     @return 0 success
1921 aga 1.11 */
1922    
1923 youi 1.21 ZEND_FUNCTION(xnp_delete_member)
1924 aga 1.11 {
1925     long sid, gid, uid;
1926 youi 1.24
1927     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1928     &sid, &gid, &uid) == FAILURE) {
1929 aga 1.11 return;
1930     }
1931 youi 1.24
1932 aga 1.11 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1933     RETURN_LONG( result );
1934     }
1935    
1936     /** ?違???若?????<?潟???若??菴遵??????<br>
1937 youi 1.24 int xnp_insert_member(int sid, int group_id, int user_id, bool admin )
1938     @param sid XNP???祉???激?с??D
1939     @param group_id XNP???違???若??ID
1940     @param user_id ???若??D
1941     @param admin ?違???若??膊∞????????true
1942     @return 0 success
1943 aga 1.11 */
1944    
1945 youi 1.21 ZEND_FUNCTION(xnp_insert_member)
1946 aga 1.11 {
1947     long sid, gid, uid;
1948     zend_bool admin;
1949 youi 1.24
1950     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
1951     &sid, &gid, &uid, &admin) == FAILURE) {
1952 aga 1.11 return;
1953     }
1954 youi 1.24
1955 aga 1.11 result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
1956     RETURN_LONG( result );
1957     }
1958    
1959     /** gid?ф??絎??????違???若?????<?潟???若??id???荀с??緇???<br>
1960 youi 1.24 int xnp_get_members(int sid, int group_id, array criteria, array uids )
1961     @param sid XNP???祉???激?с??D
1962     @param group_id XNP???違???若??ID
1963     @param criteria ?>散
1964     @param uids uid???荀с??????????????
1965     @return 0 success
1966 aga 1.11 */
1967    
1968 youi 1.21 ZEND_FUNCTION(xnp_get_members)
1969 aga 1.11 {
1970     long sid, gid;
1971     zval *zcriteria;
1972     zval *zuids;
1973 youi 1.24
1974     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1975     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1976 aga 1.11 return;
1977     }
1978 youi 1.24
1979 aga 1.11 zCriteria_t zcri(zcriteria);
1980     result_t result = zcri.getResult();
1981     if ( result == RES_OK ){
1982     userid_t *uids;
1983     int uidsLen;
1984     result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
1985     if ( result == RES_OK ){
1986     uidsToZval( uids, uidsLen, &zuids );
1987 youi 1.19 freeUID( uids );
1988 aga 1.11 }
1989     }
1990     RETURN_LONG( result );
1991     }
1992 youi 1.7
1993     /** ?違???若?????宴??紊??眼??????<br>
1994 youi 1.24 int xnp_update_group(int sid, array group )
1995     @param sid XNP???祉???激?с??D
1996     @param group ?違???若?????宴???f?渇????
1997     @return 0 success
1998 youi 1.7 */
1999 youi 1.21 ZEND_FUNCTION(xnp_update_group)
2000 youi 1.7 {
2001     long sid;
2002     zval *zgroup;
2003 youi 1.24 group_t group;
2004    
2005     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2006     &sid, &zgroup) == FAILURE) {
2007 youi 1.7 return;
2008     }
2009 youi 1.24
2010     zvalToGroup( zgroup, &group );
2011     result_t result = updateGroup( sid, &group );
2012     RETURN_LONG( result );
2013 aga 1.10 }
2014    
2015 youi 1.12 /** ?違???若?????宴??菴遵????????<br>
2016 youi 1.24 int xnp_insert_group( int sid, array group, int &gid )
2017     @param sid ?祉???激?с??D
2018     @param group ?違???若?????宴???f?渇????
2019     @param gid 絲上??????違???若??ID???吾??莨若???????<???潟??/span>
2020     @return RES_OK
2021     @return RES_DB_NOT_INITIALIZED
2022     @return RES_NO_SUCH_SESSION
2023     @return RES_DB_QUERY_ERROR
2024 youi 1.12 */
2025 youi 1.21 ZEND_FUNCTION(xnp_insert_group)
2026 youi 1.12 {
2027     long sid;
2028     zval *zgroup;
2029 youi 1.24 zval *zgid;
2030     group_t group;
2031     groupid_t gid;
2032    
2033     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2034     &sid, &zgroup, &zgid ) == FAILURE) {
2035 youi 1.12 return;
2036     }
2037 youi 1.24
2038     zvalToGroup( zgroup, &group );
2039     result_t result = insertGroup( sid, &group, &gid );
2040     zgid -> type = IS_LONG;
2041     zgid -> value.lval = gid;
2042     RETURN_LONG( result );
2043 youi 1.12 }
2044    
2045    
2046     /** ?違???若?????宴?????ゃ??????<br>
2047 youi 1.24 int xnp_delete_group( int sid, int gid )
2048     @param sid XNP???祉???激?с??D
2049     @param gid ???ゃ???????違???若????D
2050     @return RES_OK
2051     @return RES_DB_QUERY_ERROR
2052     @return RES_NO_SUCH_SESSION
2053     @return RES_DB_NOT_INITIALIZED
2054 youi 1.12 */
2055 youi 1.21 ZEND_FUNCTION(xnp_delete_group)
2056 youi 1.12 {
2057     long sid;
2058     long gid;
2059 youi 1.24
2060     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2061     &sid, &gid) == FAILURE) {
2062 youi 1.12 return;
2063     }
2064 youi 1.24 RETURN_LONG( deleteGroup( sid, gid ) );
2065 youi 1.12 }
2066    
2067     /** ?違???若?????????????緇???<br>
2068 youi 1.24 int xnp_dump_group_admins( int sid, int gid, array criteria, array uids )
2069     @param sid XNP???祉???激?с??D
2070     @param gid XNP?違???若????D
2071     @param criteria uids???吾??莨若?????????純?若???>散鐚?膀??蚊????絎?
2072     @param uids 膊∞??????ID???吾??莨若??????
2073     @return RES_OK
2074     @return RES_DB_QUERY_ERROR
2075     @return RES_NO_SUCH_SESSION
2076     @return RES_DB_NOT_INITIALIZED
2077 youi 1.12 */
2078     /*
2079 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
2080 youi 1.12 {
2081     long sid;
2082     long gid;
2083     zval *zcriteria;
2084     zval *zuids;
2085 youi 1.24
2086     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2087     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2088 youi 1.12 return;
2089     }
2090     zCriteria_t zcri(zcriteria);
2091     result_t result = zcri.getResult();
2092     if ( RES_OK == result ){
2093 youi 1.24 userid_t* uids;
2094     int uidsLen;
2095     result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2096     if( result != RES_OK ) RETURN_LONG( result );
2097     uidsToZval( uids, uidsLen, &zuids );
2098     fprintf( stderr, "uidsLen=%d\n", uidsLen );
2099     for( int i = 0; i < uidsLen; i++ ){
2100     fprintf( stderr, "%d, \n", uids[ i ] );
2101     }
2102     freeUID( uids );
2103     RETURN_LONG( result );
2104     }
2105     RETURN_LONG( result );
2106 youi 1.12 }
2107     */
2108 aga 1.22
2109     /** ???????ゃ?潟???????鴻??緇???<br>
2110     * int xnp_get_all_indexes( int sid, array criteria, array indexes );
2111     * @param sid XNP???祉???激?с??D
2112     * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
2113     * @return RES_OK
2114     */
2115     ZEND_FUNCTION(xnp_get_all_indexes)
2116     {
2117     long sid;
2118     zval *zcriteria;
2119     zval *zindexes;
2120 youi 1.24
2121     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2122     &sid, &zcriteria, &zindexes) == FAILURE) {
2123 aga 1.22 return;
2124     }
2125     zCriteria_t zcri(zcriteria);
2126     result_t result = zcri.getResult();
2127     if ( RES_OK == result ){
2128     const index_t *indexes;
2129     int indexesLen;
2130     result = getAllIndexes( sid, &zcri, &indexes, &indexesLen );
2131     if ( RES_OK == result ){
2132     result = indexesToZval( indexes, indexesLen, zindexes );
2133     freeIndex( indexes );
2134     }
2135     }
2136     RETURN_LONG(result);
2137     }
2138    
2139     /** ?????ゃ?潟???????鴻??????????ゃ?潟???????鴻??緇???<br>
2140     * int xnp_get_indexes( int sid, int parentXID, array criteria, array indexes );
2141     * @param sid XNP???祉???激?с??D
2142     * @param parentXID 荀???ndexID
2143     * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
2144     * @param indexes 腟?????????????????
2145     * @return RES_OK
2146     */
2147     ZEND_FUNCTION(xnp_get_indexes)
2148     {
2149     long sid;
2150     long parentXID;
2151     zval *zcriteria;
2152     zval *zindexes;
2153 youi 1.24
2154     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2155     &sid, &parentXID, &zcriteria, &zindexes) == FAILURE) {
2156 aga 1.22 return;
2157     }
2158     zCriteria_t zcri(zcriteria);
2159     result_t result = zcri.getResult();
2160     if ( RES_OK == result ){
2161     const index_t *indexes;
2162     int indexesLen;
2163     result = getIndexes( sid, parentXID, &zcri, &indexes, &indexesLen );
2164     if ( RES_OK == result ){
2165     result = indexesToZval( indexes, indexesLen, zindexes );
2166     freeIndex( indexes );
2167     }
2168     }
2169     RETURN_LONG(result);
2170     }
2171    
2172    
2173     /** ?ゃ?潟???????鴻??篏???????<br>
2174     * int xnp_insert_index( int sid, array index, int &indexID );
2175     * @param sid XNP???祉???激?с??D
2176     * @param index 篏????????ゃ?潟????????/span>
2177     * @param indexID 篏??????????ゃ?潟???????鴻??D??????????紊???/span>
2178     * @return RES_OK
2179     */
2180     ZEND_FUNCTION(xnp_insert_index)
2181     {
2182     long sid;
2183     zval *zindex;
2184     zval *zIndexID;
2185 youi 1.24
2186     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2187     &sid, &zindex, &zIndexID) == FAILURE) {
2188 aga 1.22 return;
2189     }
2190 youi 1.24
2191 aga 1.22 if (!PZVAL_IS_REF(zIndexID)) {
2192     zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
2193     RETURN_LONG(RES_PHP_NONREF);
2194     }
2195     zIndex_t index( zindex );
2196     indexid_t xid;
2197     result_t result = insertIndex( sid, &index, &xid );
2198     if ( RES_OK == result )
2199     ZVAL_LONG(zIndexID, (long)xid);
2200     RETURN_LONG(result);
2201     }
2202    
2203     /** ?ゃ?潟???????鴻???贋?違????<br>
2204     * int xnp_update_index( int sid, array index );
2205     * @param sid XNP???祉???激?с??D
2206     * @param index ?贋?違?????ゃ?潟????????/span>
2207     * @return RES_OK
2208     */
2209     ZEND_FUNCTION(xnp_update_index)
2210     {
2211     long sid;
2212     zval *zindex;
2213 youi 1.24
2214     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2215     &sid, &zindex) == FAILURE) {
2216 aga 1.22 return;
2217     }
2218     zIndex_t index(zindex);
2219     result_t result = index.getResult();
2220     if ( RES_OK == result ){
2221     result = updateIndex( sid, &index );
2222     }
2223     RETURN_LONG(result);
2224     }
2225    
2226     /** ?ゃ?潟???????鴻?????ゃ????<br>
2227     * int xnp_delete_index( int sid, int indexID );
2228     * @param sid XNP???祉???激?с??D
2229     * @param indexID ???ゃ?????ゃ?潟????????/span>
2230     * @return RES_OK
2231     */
2232     ZEND_FUNCTION(xnp_delete_index)
2233     {
2234     long sid;
2235     long xid;
2236 youi 1.24
2237     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2238     &sid, &xid) == FAILURE) {
2239 aga 1.22 return;
2240     }
2241 youi 1.24
2242 aga 1.22 result_t result = deleteIndex( sid, xid );
2243     RETURN_LONG(result);
2244     }
2245    
2246    
2247     /** ?ゃ?潟???????鴻????緇?????<br>
2248     * int xnp_get_index( int sid, int indexID, array index );
2249     * @param sid XNP???祉???激?с??D
2250     * @param indexID ??緇??????ゃ?潟???????鴻??D
2251     * @param index ??緇?腟??????????????f?渇????
2252     * @return RES_OK
2253     */
2254     ZEND_FUNCTION(xnp_get_index)
2255     {
2256     long sid;
2257     long xid;
2258     zval *zindex;
2259 youi 1.24
2260     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2261     &sid, &xid, &zindex) == FAILURE) {
2262 aga 1.22 return;
2263     }
2264 youi 1.24
2265 aga 1.22 const index_t *index;
2266     result_t result = getIndex( sid, xid, &index );
2267     if ( RES_OK == result ){
2268     result = indexToZval( index, zindex );
2269     freeIndex( index );
2270     }
2271     RETURN_LONG(result);
2272     }
2273    
2274    
2275    
2276     /** ?ゃ?潟???????鴻??茯??粋昭?水??純??????????茯帥?鴻??<br>
2277     * int xnp_is_index_readable( int sid, int indexID );
2278     * @param sid XNP???祉???激?с??D
2279     * @param indexID 絲乗院?ゃ?潟???????鴻??D
2280     * @return true false
2281     */
2282     ZEND_FUNCTION(xnp_is_index_readable)
2283     {
2284     long sid;
2285     long xid;
2286 youi 1.24
2287     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2288     &sid, &xid) == FAILURE) {
2289 aga 1.22 return;
2290     }
2291     RETURN_BOOL(isIndexReadable(sid,xid));
2292     }
2293    
2294    
2295     /** ?ゃ?潟???????鴻???吾??莨若?水??純??????????茯帥?鴻??<br>
2296     * int xnp_is_index_writable( int sid, int indexID );
2297     * @param sid XNP???祉???激?с??D
2298     * @param indexID 絲乗院?ゃ?潟???????鴻??D
2299     * @return true false
2300     */
2301     ZEND_FUNCTION(xnp_is_index_writable)
2302     {
2303     long sid;
2304     long xid;
2305 youi 1.24
2306     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2307     &sid, &xid) == FAILURE) {
2308 aga 1.22 return;
2309     }
2310     RETURN_BOOL(isIndexWritable(sid,xid));
2311     }
2312    
2313     /** ?ゃ?潟???????鴻????綺???ャ???帥????<br>
2314     * int xnp_swap_index_sort_number( int sid, int indexID1, int indexID2 );
2315     * @param sid XNP???祉???激?с??D
2316     * @param indexID1 絲乗院?ゃ?潟???????鴻??D
2317     * @param indexID2 絲乗院?ゃ?潟???????鴻??D
2318     * @return true false
2319     */
2320     ZEND_FUNCTION(xnp_swap_index_sort_number)
2321     {
2322     long sid;
2323     long xid1, xid2;
2324 youi 1.24
2325     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2326     &sid, &xid1, &xid2) == FAILURE) {
2327 aga 1.22 return;
2328     }
2329 youi 1.24
2330 aga 1.22 result_t result = swapIndexSortNumber( sid, xid1, xid2 );
2331     RETURN_LONG(result);
2332     }
2333    
2334    
2335    
2336 youi 1.21 /** XNP??ession_id???綵??с???с????lt;br>
2337 youi 1.24 bool xnp_is_valid_session_id( int xnp_session_id)
2338     @return true ???鴻??NP??ession_id?с????<br>
2339     @return false ?≦?鴻??ession_id?障??????????/span>
2340 aga 1.10 */
2341 youi 1.21 ZEND_FUNCTION(xnp_is_valid_session_id)
2342 aga 1.10 {
2343     long sid;
2344     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
2345     return;
2346     }
2347 youi 1.24
2348 aga 1.10 RETURN_BOOL(isValidSessionID((sessionid_t)sid));
2349 aga 1.9 }
2350    
2351     /** ?????惹??絖?????緇???<br>
2352 youi 1.24 string xnp_get_last_error_string()
2353     @return 0 success
2354 aga 1.9 */
2355 youi 1.21 ZEND_FUNCTION(xnp_get_last_error_string)
2356 aga 1.9 {
2357     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
2358     return;
2359     }
2360 youi 1.24
2361 aga 1.9 string str( getLastErrorString() );
2362     RETURN_STRING((char *)str.c_str(), 1);
2363 youi 1.7 }
2364    
2365 youi 1.24
2366     /**
2367     *
2368     * ?≪?ゃ?????吾???≪???祉?号┤???????с????????
2369     *
2370     * @refer itemop_t
2371     * @param sid ?祉???激?с??D
2372     * @param iid ???с?????莟<???????≪?ゃ??????D
2373     * @param op ?≪???祉?鴻??┏蕁?
2374     * @return true 罔???????
2375     * @return false 罔???????
2376     *
2377     */
2378     ZEND_FUNCTION(xnp_get_item_permission)
2379     {
2380 youi 1.27 long sid;
2381     itemid_t iid;
2382     long op;
2383     bool result = false;
2384    
2385     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2386     &sid, &iid, &op) == FAILURE) {
2387     fprintf( stderr, "error occured " );
2388     return;
2389     }
2390     RETURN_BOOL( getItemPermission( (sessionid_t)sid, iid, op ) );
2391 youi 1.24 }
2392    
2393    
2394     /**
2395     *
2396     * ?ゃ?潟???????鴻?吾???≪???祉?号┤???????с????????
2397     *
2398     * @refer indexop_t
2399     * @param sid ?祉???激?с??D
2400     * @param xid ???с?????莟<???????ゃ?潟???????鴻??D
2401     * @param op ?≪???祉?鴻??┏蕁?
2402     * @return true 罔???????
2403     * @return false 罔???????
2404     *
2405     */
2406     ZEND_FUNCTION(xnp_get_index_permission)
2407     {
2408 youi 1.27 long sid;
2409     indexid_t xid;
2410     long op;
2411     bool result = false;
2412    
2413     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2414     &sid, &xid, &op) == FAILURE) {
2415     fprintf( stderr, "error occured " );
2416     return;
2417     }
2418     RETURN_BOOL( getIndexPermission( (sessionid_t)sid, xid, op ) );
2419 youi 1.24 }
2420    
2421    
2422     /**
2423     *
2424     * ?≪?ゃ???????粋??倶????紊??眼????罔????????<??茯帥?鴻?障??鐚?/span>
2425     * @refer certify_t
2426     * @param sid ?祉???激?с??D
2427     * @param xid 紊??翫?莟<?≪?ゃ???????脂?蚊???????????ゃ?潟???????鴻??D
2428     * @param iid 紊??翫?莟<?≪?ゃ??????D
2429     * @param state ?違???鎀??眼???????粋??倶??
2430     * @return true 罔???????
2431     * @return false 罔???????
2432     *
2433     */
2434     ZEND_FUNCTION(xnp_get_certify_permission)
2435     {
2436 youi 1.27 long sid;
2437     itemid_t iid;
2438     indexid_t xid;
2439     certify_t state;
2440     bool result = false;
2441    
2442     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2443     &sid, &xid, &iid, &state) == FAILURE) {
2444     fprintf( stderr, "error occured " );
2445     return;
2446