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.32 - (hide annotations) (download) (as text)
Wed Feb 9 07:23:50 2005 UTC (19 years, 2 months ago) by aga
Branch: MAIN
Changes since 1.31: +1 -3 lines
File MIME type: text/x-c++src
・URL to My Personal Archive をDB・ALから消した.

1 aga 1.1 /*
2 aga 1.32 $Revision: 1.31 $
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.30 ZEND_FUNCTION(xnp_get_own_public_item_id );
125 youi 1.26
126 aga 1.1 };
127     /* compiled function list so Zend knows what's in this module */
128 youi 1.21 zend_function_entry xnpalmod_functions[] =
129 aga 1.1 {
130 youi 1.24 ZEND_FE(first_module ,NULL)
131     ZEND_FE(xnp_initialize_db ,NULL)
132     ZEND_FE(xnp_login_user ,NULL)
133     ZEND_FE(xnp_logout_user ,NULL)
134     ZEND_FE(xnp_create_session ,NULL)
135     ZEND_FE(xnp_get_session ,NULL)
136     ZEND_FE(xnp_is_activated ,NULL)
137     ZEND_FE(xnp_activate ,NULL)
138     ZEND_FE(xnp_get_account_count ,NULL)
139     ZEND_FE(xnp_delete_account ,NULL)
140     ZEND_FE(xnp_get_account ,NULL)
141     ZEND_FE(xnp_get_accounts ,NULL)
142     ZEND_FE(xnp_insert_account ,NULL)
143     ZEND_FE(xnp_update_account ,NULL)
144     ZEND_FE(xnp_dump_uids ,NULL)
145     ZEND_FE(xnp_get_group_count ,NULL)
146     ZEND_FE(xnp_get_groups_by_uid ,NULL)
147     ZEND_FE(xnp_is_group_admin ,NULL)
148     ZEND_FE(xnp_dump_gids ,NULL)
149     ZEND_FE(xnp_dump_group_admins ,NULL)
150     ZEND_FE(xnp_delete_member ,NULL)
151     ZEND_FE(xnp_insert_member ,NULL)
152     ZEND_FE(xnp_get_members ,NULL)
153     ZEND_FE(xnp_delete_group ,NULL)
154     ZEND_FE(xnp_insert_group ,NULL)
155     ZEND_FE(xnp_update_group ,NULL)
156     ZEND_FE(xnp_get_group ,NULL)
157     ZEND_FE(xnp_get_groups ,NULL)
158     ZEND_FE(xnp_is_moderator ,NULL)
159     ZEND_FE(xnp_get_uid ,NULL)
160    
161     ZEND_FE(xnp_get_all_indexes ,NULL)
162     ZEND_FE(xnp_get_indexes ,NULL)
163     ZEND_FE(xnp_insert_index ,NULL)
164     ZEND_FE(xnp_update_index ,NULL)
165     ZEND_FE(xnp_delete_index ,NULL)
166     ZEND_FE(xnp_get_index ,NULL)
167     ZEND_FE(xnp_is_index_readable ,NULL)
168     ZEND_FE(xnp_is_index_writable ,NULL)
169     ZEND_FE(xnp_swap_index_sort_number ,NULL)
170    
171     ZEND_FE(xnp_is_valid_session_id ,NULL)
172     ZEND_FE(xnp_get_last_error_string ,NULL)
173     ZEND_FE(xnp_test_criteria ,NULL)
174     ZEND_FE(xnp_test_uids ,NULL)
175    
176     ZEND_FE(xnp_get_item_permission ,NULL)
177     ZEND_FE(xnp_get_index_permission ,NULL)
178     ZEND_FE(xnp_get_certify_permission ,NULL)
179    
180     ZEND_FE(xnp_get_certify_state ,NULL)
181     ZEND_FE(xnp_set_certify_state ,NULL)
182    
183     ZEND_FE(xnp_insert_change_log ,NULL)
184     ZEND_FE(xnp_get_change_logs ,NULL)
185    
186     ZEND_FE(xnp_get_config_value ,NULL)
187     ZEND_FE(xnp_set_config_value ,NULL)
188    
189     ZEND_FE(xnp_dump_item_id ,NULL)
190     ZEND_FE(xnp_get_item_id_by_binder_id ,NULL)
191     ZEND_FE(xnp_get_item_id_by_index_id ,NULL)
192     ZEND_FE(xnp_get_overlapped_items ,NULL)
193    
194     ZEND_FE(xnp_insert_item ,NULL)
195     ZEND_FE(xnp_update_item ,NULL)
196     ZEND_FE(xnp_delete_item ,NULL)
197     ZEND_FE(xnp_get_item ,NULL)
198     ZEND_FE(xnp_get_items ,NULL)
199    
200     ZEND_FE(xnp_pubmed_complete ,NULL)
201     ZEND_FE(xnp_amazon_complete ,NULL)
202    
203     // ZEND_FE(xnp_uninitialize_db ,NULL)
204    
205     ZEND_FE(xnp_register_binder_item ,NULL)
206     ZEND_FE(xnp_unregister_binder_item ,NULL)
207    
208     ZEND_FE(xnp_register_item ,NULL)
209     ZEND_FE(xnp_unregister_item ,NULL)
210    
211 youi 1.26 ZEND_FE(xnp_get_uncertified_link ,NULL)
212     ZEND_FE(xnp_get_private_item_id ,NULL)
213    
214 youi 1.28 ZEND_FE(xnp_get_item_types ,NULL)
215 youi 1.26
216 youi 1.28 ZEND_FE(xnp_get_index_id_by_item_id ,NULL)
217 youi 1.30 ZEND_FE(xnp_get_own_public_item_id ,NULL)
218 youi 1.28
219 youi 1.24 {NULL, NULL, NULL}
220 aga 1.1 };
221    
222     /* compiled module information */
223 youi 1.21 zend_module_entry xnpalmod_module_entry =
224 aga 1.1 {
225 youi 1.24 STANDARD_MODULE_HEADER,
226     "Visiome Platform Abstract Layer",
227     xnpalmod_functions,
228     NULL,
229 youi 1.21 PHP_MSHUTDOWN(xnpalmod),
230 youi 1.24 NULL,
231     NULL,
232     NULL,
233     NO_VERSION_YET,
234     STANDARD_MODULE_PROPERTIES
235 aga 1.1 };
236    
237     /* implement standard "stub" routine to introduce ourselves to Zend */
238     #if COMPILE_DL_FIRST_MODULE
239     BEGIN_EXTERN_C()
240 youi 1.21 ZEND_GET_MODULE(xnpalmod)
241 aga 1.1 END_EXTERN_C()
242     #endif
243    
244 aga 1.16
245 aga 1.1 /* implement function that is meant to be made available to PHP */
246     ZEND_FUNCTION(first_module)
247     {
248 youi 1.24 long parameter;
249 aga 1.1 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
250 youi 1.24 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
251     return;
252     }
253 aga 1.1 parameter++;
254 youi 1.24 RETURN_LONG(parameter);
255 aga 1.1 }
256     /** zval????C????絖?????緇?????
257     */
258     char *getZvalString( zval **p ){
259     convert_to_string_ex(p);
260     return Z_STRVAL_PP(p); //(**p).value.str.val;
261     }
262    
263     /** zval????int??緇?????
264     */
265     int getZvalInt( zval **p ){
266     convert_to_long_ex(p);
267     return Z_LVAL_PP(p); // (int)(**p).value.lval;
268     }
269    
270 aga 1.2 // keylen????鮎??0????????
271     static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
272     zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
273     if ( res == HASH_KEY_IS_STRING ){
274     char *p = new char[keyLen+1];
275     memcpy( p, key, keyLen );
276     p[keyLen] = 0;
277     zend_printf( " key is string[%s]<br>\n", p );
278     }
279     else {
280     zend_printf( " key is integer[%d]<br>\n", index );
281     }
282     }
283    
284    
285 aga 1.16 /** zval*????criteria_t?????????????????????鴻??????紊掩??????getResult()!=RES_OK <br>
286 youi 1.24 criteria :
287     array( 'start'=>0, 'rows'=>10,
288     'orders'=>array(
289     array('name'=>'id','order'=>'0'),
290     array('name'=>'timestamp','name'=>'1'), ...)
291     ); ??????就???f?渇????
292 aga 1.2 */
293     class zCriteria_t : public criteria {
294     private:
295     result_t result;
296 aga 1.16
297 aga 1.2 // pz: array('name'=>'timestamp','name'=>'1')
298     // ????????orderby??篏???????申????
299     void setOrder( zval *pz ){
300     char *column = 0;
301     order_t order = (order_t)0;
302 youi 1.24
303 aga 1.2 HashPosition pos;
304     zval **ppzTmp = 0;
305     int res2;
306     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
307     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
308     char *key = 0;
309     uint keyLen = 0;
310     ulong index = 0;
311     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
312     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
313 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
314     if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
315 aga 1.2 SEPARATE_ZVAL(ppzTmp);
316     column = getZvalString(ppzTmp);
317     // zend_printf( "column=%s<br>\n", column );
318     }
319     else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
320     SEPARATE_ZVAL(ppzTmp);
321     order = (order_t)getZvalInt(ppzTmp);
322     // zend_printf( "order=%d<br>\n", order );
323     }
324     }
325 youi 1.24
326 aga 1.2 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
327     }
328     if ( column ){
329     orderby *o = new orderby( column, order );
330     addOrderBy( o );
331     }
332 youi 1.24
333 aga 1.2 result = RES_OK;
334     }
335 youi 1.24
336 aga 1.2 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
337     void setOrders( zval *pz ){
338     HashPosition pos;
339 youi 1.24
340 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
341 youi 1.24
342 aga 1.2 zval **ppzTmp = 0;
343     int res2;
344     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
345     char *key = 0;
346     uint keyLen = 0;
347     ulong index = 0;
348     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
349     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
350 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
351 aga 1.2 setOrder( *ppzTmp );
352     }
353     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
354     }
355     result = RES_OK;
356     }
357 youi 1.24
358 aga 1.2 void initialize( zval *pz ){
359     HashPosition pos;
360     zval **ppzTmp = 0;
361     int res2;
362     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
363     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
364     char *key = 0;
365     uint keyLen = 0;
366     ulong index = 0;
367     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
368     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
369 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
370 aga 1.2 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
371     SEPARATE_ZVAL(ppzTmp);
372     int tmp = getZvalInt(ppzTmp);
373     // zend_printf( "start=%d<br>\n", tmp );
374     setLimit( tmp, getLimitRows() );
375     }
376     else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
377     SEPARATE_ZVAL(ppzTmp);
378     int tmp = getZvalInt(ppzTmp);
379     // zend_printf( "rows=%d<br>\n", tmp );
380     setLimit( getLimitStart(), tmp );
381     }
382     else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
383     setOrders( *ppzTmp );
384     }
385     else
386     ; // ignore unknown key
387     }
388     else
389     ; // ignore bad key
390     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
391     }
392     result = RES_OK;
393     }
394 aga 1.16
395     public:
396 aga 1.2 zCriteria_t() : criteria(){ result = RES_ERROR; }
397     zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
398     zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
399     result_t getResult(){ return result; };
400 youi 1.24
401 aga 1.2 void dump(){
402     zend_printf( "dumping zCriteria...<br>\n" );
403     zend_printf( "result=%d<br>\n", (int)result );
404     zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
405     const orderby *p = headOrderBy();
406     while ( p ){
407     zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
408     p = nextOrderBy();
409     }
410     }
411     };
412    
413 aga 1.16
414     /** ?f?渇???????≪???祉?鴻????ong?ゃ??緇?????
415     @param ht ?f?渇????
416     @param key ????/span>
417     @param val long?ゃ?????????????ゃ?潟??/span>
418     @return ????????true
419     */
420     static bool hashGetLong( HashTable *ht, const char *key, long *val ){
421 youi 1.24 zval **tmp;
422     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
423     convert_to_long_ex( tmp );
424     *val = Z_LVAL_PP(tmp);
425     return true;
426     }
427     return false;
428 aga 1.14 }
429    
430 aga 1.16 /** ?f?渇???????≪???祉?鴻??????絖?????緇?????
431     @param ht ?f?渇????
432     @param key ????/span>
433     @param val ??絖????????????????ゃ?潟??/span>
434     @return ????????true
435     */
436     static bool hashGetString( HashTable *ht, const char *key, char **val ){
437 youi 1.24 zval **tmp;
438     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
439     convert_to_string_ex( tmp );
440     *val = Z_STRVAL_PP(tmp);
441     return true;
442     }
443     return false;
444 aga 1.14 }
445    
446 aga 1.16 /** ?f?渇???????≪???祉?鴻????ouble?ゃ??緇?????
447     @param ht ?f?渇????
448     @param key ????/span>
449     @param val double?ゃ?????????????ゃ?潟??/span>
450     @return ????????true
451     */
452     static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
453 youi 1.24 zval **tmp;
454     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
455     convert_to_double_ex( tmp );
456     *val = Z_DVAL_PP(tmp);
457     return true;
458     }
459     return false;
460 aga 1.14 }
461 aga 1.2
462 aga 1.16 /** zval*????account?????????????????????鴻?? <br>
463 youi 1.24 ????紊掩??????getResult()!=RES_OK <br>
464 aga 1.16 */
465 aga 1.2 class zAccount_t : public account {
466     private:
467     result_t result;
468     void initialize(zval *pz){
469 aga 1.14 HashTable *ht = Z_ARRVAL_P(pz);
470     long l;
471     char *p;
472     double d;
473     if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
474     if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
475     if ( hashGetString( ht, "name" , &p ) ) setName ( p );
476     if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
477     if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
478     if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
479     if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
480     if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
481     if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
482     if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
483     if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
484     if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
485     if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
486     if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
487     if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
488     if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
489     if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
490     if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
491     if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
492     if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
493     if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
494     if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
495     if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
496     if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
497     if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
498     if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
499     if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
500     if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
501     if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
502     if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
503     if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
504     if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
505     if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
506 aga 1.16 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
507 aga 1.14 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
508 aga 1.16 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
509 aga 1.14 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
510     if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
511     if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
512     if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
513     if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
514 aga 1.22 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
515 aga 1.14
516     result = RES_OK;
517 aga 1.2 }
518 aga 1.16 public:
519 aga 1.2 zAccount_t() : account(){ result = RES_ERROR; }
520 youi 1.24
521     /** ?潟?潟?鴻????????/span>
522     @param pz array( 'uid'=>1, 'uname'=>'root', ... ); ??????就???f?渇???? */
523 aga 1.2 zAccount_t( zval *pz ) : account(){ initialize(pz); }
524     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
525     result_t getResult(){ return result; };
526     };
527    
528 aga 1.22 class zIndex_t : public index {
529     private:
530     result_t result;
531 youi 1.24
532 aga 1.22 void initialize(zval *pz){
533     HashTable *ht = Z_ARRVAL_P(pz);
534     long l;
535     char *p;
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     char* key = 0;
908    
909     key = "item_id";
910     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
911     convert_to_long_ex( tmp ) ;
912     pItem -> setItemID( (*tmp) -> value.lval );
913     }
914     key = "item_type_id";
915     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
916     convert_to_long_ex( tmp ) ;
917     pItem -> setItemTypeID( (*tmp) -> value.lval );
918     }
919     key = "uid";
920     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
921     convert_to_long_ex( tmp ) ;
922     pItem -> setContributorUID( (*tmp) -> value.lval );
923     }
924     key = "title";
925     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
926     convert_to_string_ex( tmp ) ;
927     pItem -> setTitle( (*tmp) -> value.str.val );
928     }
929     key = "keywords";
930     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
931     convert_to_string_ex( tmp ) ;
932     pItem -> setKeywords( (*tmp) -> value.str.val );
933     }
934     key = "description";
935     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
936     convert_to_string_ex( tmp ) ;
937     pItem -> setDescription( (*tmp) -> value.str.val );
938     }
939     key = "doi";
940     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
941     convert_to_string_ex( tmp ) ;
942     pItem -> setDOI( (*tmp) -> value.str.val );
943     }
944     key = "last_update_date";
945     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
946     convert_to_long_ex( tmp ) ;
947     pItem -> setLastUpdateDate( (*tmp) -> value.lval );
948     }
949     key = "creation_date";
950     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
951     convert_to_long_ex( tmp ) ;
952     pItem -> setCreationDate( (*tmp) -> value.lval );
953     }
954     return RES_OK;
955     }
956 aga 1.16
957     /**
958     *
959     * account_t????絎鴻??PHP???????????????
960     * @param pAccount 紊???????ccount_t*
961     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
962     * @return RES_OK
963     *
964     */
965 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
966     {
967 youi 1.24 zend_hash_clean( z -> value.ht );
968    
969     add_assoc_long( z, "uid", pAccount -> getUID( ) );
970     add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
971     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
972     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
973     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
974     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
975     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
976     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
977     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
978     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
979     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
980     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
981     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
982     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
983     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
984     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
985     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
986     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
987     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
988     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
989     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
990     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
991     add_assoc_long( z, "level", pAccount -> getLevel( ) );
992     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
993     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
994     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
995     add_assoc_long( z, "rank", pAccount -> getRank( ) );
996     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
997     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
998     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
999     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
1000    
1001     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
1002     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
1003     add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
1004     add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
1005     add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
1006     add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
1007     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
1008     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
1009     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
1010     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
1011     add_assoc_long( z, "private_index_id", pAccount -> getPrivateIndexID( ) );
1012 youi 1.6 return RES_OK;
1013     }
1014 youi 1.24
1015 aga 1.16 /**
1016     *
1017     * 茲??違??ccount_t????絎鴻??PHP?????????????????????
1018     * @param pAccounts 紊???????ccount_t*
1019     * @param accountsLen pAccounts?????????激??
1020     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1021     * @return RES_OK
1022     *
1023     z: ?????????????????????????? <br>
1024 youi 1.24 array(
1025     array(
1026     'uid'=>100,
1027     'activate'=>1,
1028     'division'=>'foo',
1029     'tel'=>'123-456-789',
1030     ...
1031     ),
1032     ...
1033     )
1034 aga 1.16 */
1035 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1036 aga 1.4 {
1037 youi 1.24 zend_hash_clean( z -> value.ht );
1038     for( int i = 0; i < accountsLen; i++ ){
1039     zval *new_array;
1040     MAKE_STD_ZVAL(new_array);
1041     if(array_init(new_array) != SUCCESS){
1042     return RES_ERROR;
1043     }
1044     add_index_zval( z, i, new_array );
1045     accountToZval( &pAccounts[ i ], new_array );
1046     }
1047 youi 1.6 return RES_OK;
1048 aga 1.2 }
1049    
1050 aga 1.16 /**
1051     *
1052     * 茲??違??roup_t????絎鴻??PHP?????????????????????
1053     * @param pGroups 紊???????roup_t*
1054     * @param groupsLen pGroups?????????激??
1055     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1056     * @return RES_OK
1057     *
1058     z: ?????????????????????????? <br>
1059 youi 1.24 array(
1060     array(
1061     'gid'=>1,
1062     'gname'=>'foo group',
1063     'gdesc'=>'group of foo'
1064     ),
1065     ...
1066     )
1067 aga 1.16 */
1068 youi 1.6 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1069 aga 1.4 {
1070 youi 1.24 zend_hash_clean( z -> value.ht );
1071     for( int i = 0; i < groupsLen; i++ ){
1072     zval *new_array;
1073     MAKE_STD_ZVAL(new_array);
1074     if(array_init(new_array) != SUCCESS){
1075     return RES_ERROR;
1076     }
1077     add_index_zval( z, i, new_array );
1078     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
1079     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
1080     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
1081     add_assoc_long( new_array, "group_index_id", pGroups[ i ].getGroupIndexID( ) );
1082     }
1083 youi 1.6 return RES_OK;
1084 aga 1.2 }
1085    
1086 youi 1.7 /**
1087 youi 1.24 *
1088 youi 1.7 * group_t????絎鴻??PHP???f?渇?????????????
1089 youi 1.24 *
1090 aga 1.16 * @param pGroup 紊????????違???若??????/span>
1091 youi 1.7 * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1092     * @return RES_OK
1093 youi 1.24 *
1094 youi 1.7 */
1095     result_t groupToZval( const group_t *pGroup, zval *z )
1096 youi 1.6 {
1097 youi 1.24 zend_hash_clean( z -> value.ht );
1098     add_assoc_long( z, "gid", pGroup -> getGID( ) );
1099     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
1100     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
1101     add_assoc_long( z, "group_index_id", pGroup -> getGroupIndexID( ) );
1102 youi 1.6 return RES_OK;
1103     }
1104    
1105 aga 1.16 /**
1106 youi 1.24 *
1107 aga 1.16 * PHP???f?渇????????絎鴻??group_t?????????
1108 youi 1.24 *
1109 aga 1.16 * @param z 紊????????f?渇????
1110     * @param pGroup 紊???腟??????吾??莨若???違???若??
1111     * @return RES_OK
1112 youi 1.24 *
1113 aga 1.16 */
1114 youi 1.7 result_t zvalToGroup( zval *z, group_t *pGroup )
1115     {
1116 youi 1.24 zval **tmp;
1117     char* key = 0;
1118    
1119     key = "gid";
1120     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1121     convert_to_long_ex( tmp ) ;
1122     pGroup -> setGID( (*tmp) -> value.lval );
1123     }
1124     key = "gname";
1125     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1126     convert_to_string_ex( tmp ) ;
1127     pGroup -> setGname( (*tmp) -> value.str.val );
1128     }
1129     key = "gdesc";
1130     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1131     convert_to_string_ex( tmp ) ;
1132     pGroup -> setDesc( (*tmp) -> value.str.val );
1133     }
1134     key = "group_index_id";
1135     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1136     convert_to_long_ex( tmp ) ;
1137     pGroup -> setGroupIndexID( (*tmp) -> value.lval );
1138     }
1139 youi 1.7 return RES_OK;
1140     }
1141    
1142 aga 1.16 /**
1143 youi 1.24 *
1144 aga 1.16 * session_t????絎鴻??PHP???f?渇?????????????
1145 youi 1.24 *
1146 aga 1.16 * @param pSession 紊???????ession_t
1147     * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1148     * @return RES_OK
1149 youi 1.24 *
1150 aga 1.16 */
1151     result_t sessionToZval( const session_t *pSession, zval *z )
1152     {
1153     string sessionID(unsignedIntToString(pSession->getSessionID()));
1154     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
1155 youi 1.24
1156 aga 1.16 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1157     add_assoc_string(z, "date", (char *)date.c_str(), 1);
1158 youi 1.24
1159 aga 1.20 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1160 aga 1.16 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1161 youi 1.24
1162 aga 1.16 return RES_OK;
1163     }
1164    
1165 aga 1.22 /**
1166     *
1167     * index_t????絎鴻??PHP???????????????
1168     * @param pIndex 紊???????ndex_t*
1169     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1170     * @return RES_OK
1171     *
1172     */
1173     result_t indexToZval( const index_t *pIndex, zval *z )
1174     {
1175 youi 1.24 zend_hash_clean( z -> value.ht );
1176    
1177     add_assoc_long( z, "item_id", pIndex -> getItemID( ) );
1178     add_assoc_long( z, "item_type_id", pIndex -> getItemTypeID( ) );
1179     add_assoc_long( z, "contributor_uid", pIndex -> getContributorUID( ) );
1180     add_assoc_string( z, "title", ( char* )pIndex -> getTitle( ), 1 );
1181     add_assoc_string( z, "keywords", ( char* )pIndex -> getKeywords( ), 1 );
1182     add_assoc_string( z, "description", ( char* )pIndex -> getDescription( ), 1 );
1183     add_assoc_long( z, "last_update_date", pIndex -> getLastUpdateDate( ) );
1184     add_assoc_long( z, "creation_date", pIndex-> getCreationDate( ) );
1185     add_assoc_long( z, "parent_index_id", pIndex -> getParentIndexID( ) );
1186     add_assoc_long( z, "owner_uid", pIndex -> getOwnerUID( ) );
1187     add_assoc_long( z, "owner_gid", pIndex -> getOwnerGID( ) );
1188     add_assoc_long( z, "open_level", pIndex -> getOpenLevel( ) );
1189     add_assoc_long( z, "sort_number", pIndex -> getSortNumber( ) );
1190 aga 1.22 return RES_OK;
1191     }
1192    
1193     result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1194     {
1195 youi 1.24 zend_hash_clean( z -> value.ht );
1196     for( int i = 0; i < indexesLen; i++ ){
1197     zval *new_array;
1198     MAKE_STD_ZVAL(new_array);
1199     if(array_init(new_array) != SUCCESS){
1200     return RES_ERROR;
1201     }
1202     add_index_zval( z, i, new_array );
1203     indexToZval( &pIndexes[ i ], new_array );
1204     }
1205 aga 1.22 return RES_OK;
1206     }
1207    
1208    
1209 youi 1.7
1210 aga 1.16
1211     /** ??絎??????違???若???????宴??緇???<br>
1212 youi 1.24 int xnp_get_group( int sid, int gid, array group );
1213     @param sid XNP???祉???激?с??D
1214     @param gid XNP ? group_id
1215     @param group 腟?????????????????
1216     @return 0 success <br>
1217 aga 1.16 */
1218 youi 1.21 ZEND_FUNCTION(xnp_get_group)
1219 aga 1.4 {
1220 youi 1.6 long sid, gid;
1221     zval *zgroup;
1222 youi 1.24
1223 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1224 youi 1.24 &sid, &gid, &zgroup) == FAILURE) {
1225 youi 1.6 return;
1226     }
1227 youi 1.24
1228 youi 1.6 const group_t *pgroup;
1229     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1230     if ( RES_OK == result ){
1231 youi 1.7 groupToZval( pgroup, zgroup );
1232 youi 1.19 freeGroup( pgroup );
1233 youi 1.6 }
1234 youi 1.24
1235     RETURN_LONG(result);
1236 youi 1.6 }
1237    
1238 aga 1.2
1239 aga 1.16 /** ??絎??????違???若??(茲????????宴??緇???<br>
1240 youi 1.24 xnp_get_groups( int sid, array gids, array criteria, array groups );
1241     @param sid XNP???祉???激?с??D
1242     @param gids XNP ? group_id ??????
1243     @param criteria ?>散
1244     @param groups 腟???????????????????????
1245     @return 0 success <br>
1246 aga 1.16 */
1247 youi 1.21 ZEND_FUNCTION(xnp_get_groups)
1248 youi 1.6 {
1249     result_t result;
1250 youi 1.29 long sid;
1251 youi 1.6 zval *zcriteria;
1252     zval *zgids;
1253     zval *zgroups;
1254 youi 1.24 zval **ppzTmp = 0;
1255     HashPosition pos;
1256     int res2;
1257     int gidsLen;
1258     const group_t* groups;
1259     int groupsLen;
1260    
1261 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1262 youi 1.24 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1263 youi 1.6 return;
1264     }
1265 youi 1.24
1266     //gids???違???若??ID???潟???若????
1267     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
1268     groupid_t *gids = new groupid_t[ gidsLen ];
1269     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
1270     for( int i = 0; i < gidsLen; i++ ){
1271     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
1272     SEPARATE_ZVAL(ppzTmp);
1273     convert_to_long_ex(ppzTmp);
1274     gids[ i ] = Z_LVAL_PP(ppzTmp);
1275     }
1276     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
1277     }
1278    
1279 youi 1.6 zCriteria_t zcri(zcriteria);
1280     result = zcri.getResult();
1281     if ( RES_OK == result ){
1282 youi 1.24 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
1283     if ( RES_OK == result ){
1284     groupsToZval( groups, groupsLen, zgroups );
1285     delete[] gids;
1286     freeGroup( groups );
1287     }
1288     }
1289     RETURN_LONG(result);
1290 youi 1.6 }
1291    
1292    
1293 aga 1.16 /** ??絎????????若?吟???≪?????若?帥??????????茯帥?鴻??<br>
1294 youi 1.24 int xnp_is_moderator(int sid, int uid)
1295     @param sid XNP???祉???激?с??D
1296     @param uid xoops ? uid (xoops_users.uid)
1297     @return true ?≪?????若?帥?с???? <br>
1298 aga 1.16 */
1299 youi 1.21 ZEND_FUNCTION(xnp_is_moderator)
1300 youi 1.6 {
1301 youi 1.21 long xnpSessionID;
1302 youi 1.6 userid_t uid;
1303 youi 1.24
1304     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1305     &xnpSessionID, &uid) == FAILURE) {
1306 youi 1.6 return;
1307     }
1308 youi 1.24
1309 youi 1.21 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1310 youi 1.24 RETURN_BOOL(result)
1311 youi 1.6 }
1312    
1313 aga 1.16 /** ???若?九??????uid??茯帥?鴻??<br>
1314 youi 1.24 int xnp_get_uid(string uname,int &uid)
1315     @param sid XNP???祉???激?с??D
1316     @param uname xoops ? uname (xoops_users.uname)
1317     @param uid xoops ? uid (xoops_users.uid) ??????????紊???/span>
1318     @return 0 success
1319 aga 1.16 */
1320 youi 1.21 ZEND_FUNCTION(xnp_get_uid)
1321 youi 1.6 {
1322     char *uname;
1323     int unameLen;
1324 aga 1.14 zval *zuid;
1325 youi 1.6 userid_t uid;
1326 youi 1.24
1327     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1328 aga 1.14 &uname, &unameLen, &zuid) == FAILURE) {
1329 youi 1.6 return;
1330     }
1331 youi 1.24
1332 aga 1.14 if (!PZVAL_IS_REF(zuid)) {
1333     zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
1334     RETURN_LONG(RES_PHP_NONREF);
1335     }
1336 youi 1.24
1337 youi 1.6 string strUname( uname, unameLen );
1338     result_t result = getUid( strUname.c_str(), &uid );
1339 aga 1.14 ZVAL_LONG(zuid, (long)uid);
1340     RETURN_LONG((long)result);
1341 aga 1.2 }
1342    
1343 youi 1.21 ZEND_FUNCTION(xnp_test_criteria)
1344 aga 1.2 {
1345     zval *z;
1346 youi 1.24
1347     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1348 aga 1.2 &z) == FAILURE) {
1349     return;
1350     }
1351     zend_printf("zend_printf...<br>\n");
1352     zCriteria_t zcri(z);
1353     zcri.dump();
1354     RETURN_FALSE
1355     }
1356    
1357 youi 1.21 ZEND_FUNCTION(xnp_test_uids)
1358 aga 1.2 {
1359     zval *z;
1360 youi 1.24
1361     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1362 aga 1.2 &z) == FAILURE) {
1363     return;
1364     }
1365     zend_printf("zend_printf...<br>\n");
1366     zUIDs_t zuids(z);
1367     zuids.dump();
1368     RETURN_FALSE
1369     }
1370    
1371    
1372    
1373 aga 1.4 /** DB??・膓????????≪??・膓?筝???・膓???????????????<br>
1374 aga 1.31 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix, int dbtype]]]] );
1375 youi 1.24 @param host ?ョ????????ユ????ULL
1376     @param user DB?ョ????????若?九???????ユ????ULL
1377     @param password DB?ョ????????鴻???若???????ユ????ULL
1378     @param dbname DB?ョ?????B???????ユ????quot;"
1379     @param prefix XOOPS DB ??refix??
1380 aga 1.31 @param dbtype 1=MySQL 2=SQLite??common.h????/span>
1381 youi 1.24 @return 0 success <br>
1382 aga 1.1 */
1383 youi 1.21 ZEND_FUNCTION(xnp_initialize_db)
1384 aga 1.1 {
1385     zval **parameters[5];
1386     char *host;
1387     char *user;
1388 aga 1.2 char *password;
1389     char *dbname;
1390     char *prefix;
1391 aga 1.31 long dbtype;
1392 aga 1.1
1393     /* get the number of arguments */
1394     int argNum = ZEND_NUM_ARGS();
1395     if (argNum > 5)
1396     WRONG_PARAM_COUNT;
1397    
1398     /* argument count is correct, now retrieve arguments */
1399     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
1400     WRONG_PARAM_COUNT;
1401    
1402 aga 1.2 if (argNum < 1) host = NULL;
1403 aga 1.1 else host = getZvalString( parameters[0] );
1404 youi 1.24
1405 aga 1.1 if (argNum < 2) user = NULL;
1406     else user = getZvalString( parameters[1] );
1407 youi 1.24
1408 aga 1.2 if (argNum < 3) password = NULL;
1409     else password = getZvalString( parameters[2] );
1410 youi 1.24
1411 aga 1.2 if (argNum < 4) dbname = "";
1412     else dbname = getZvalString( parameters[3] );
1413 youi 1.24
1414 aga 1.2 if (argNum < 5) prefix = "";
1415     else prefix = getZvalString( parameters[4] );
1416 youi 1.24
1417 aga 1.31 if (argNum < 6) dbtype = DBTYPE_MYSQL;
1418     else dbtype = getZvalInt( parameters[5] );
1419    
1420     result_t result = initializeDB( host, user, password, dbname, prefix, (dbtype_t)dbtype );
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 long sid;
1775 youi 1.24
1776 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1777     &sid) == FAILURE) {
1778     return;
1779     }
1780 youi 1.24
1781 aga 1.2 int count = getGroupCount( (sessionid_t)sid );
1782 youi 1.24
1783     RETURN_LONG(count);
1784 aga 1.2 }
1785 aga 1.1
1786 aga 1.5 /** uid?ф??絎????????若?吟??絮????違???若???с?????ゆ?>散????眼?????違???若????id??緇???<br>
1787 youi 1.24 int xnp_get_group_by_uid( int xnp_session_id, int uid, array criteria, array gids );
1788     @param xnp_session_id XNP???祉???激?с??D
1789     @param user_id xoops_users.uid
1790     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1791     @param gids gid??????????????
1792     @return 0 success
1793 aga 1.5 */
1794 youi 1.21 ZEND_FUNCTION(xnp_get_groups_by_uid)
1795 aga 1.2 {
1796     result_t result;
1797     long sid, uid;
1798     zval *zcriteria;
1799     zval *zgids;
1800 youi 1.24
1801 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1802     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1803     return;
1804 aga 1.1 }
1805 youi 1.24
1806 aga 1.2 zCriteria_t zcri(zcriteria);
1807     result = zcri.getResult();
1808     if ( RES_OK == result ){
1809     groupid_t *pgids;
1810     int gidLen;
1811     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1812     if ( RES_OK == result ){
1813     gidsToZval( pgids, gidLen, &zgids );
1814 youi 1.19 freeGID( pgids );
1815 aga 1.2 }
1816 aga 1.1 }
1817 youi 1.24
1818     RETURN_LONG(result);
1819 aga 1.2 }
1820    
1821    
1822 aga 1.5
1823     /** uid?ф??絎????????若?吟??gid?ф??絎??????違???若?????違???若??膊∞??????????????緇???<br>
1824 youi 1.24 int xnp_is_group_admin( int sid, int gid, int uid );
1825     @param xnp_session_id XNP???祉???激?с??D
1826     @param group_id XNP???違???若??ID
1827     @param user_id xoops_users.uid
1828     @return true: ?違???若??膊∞?????с??????
1829     @return false: ?違???若??膊∞?????с???????????????????若?с??????
1830 aga 1.5 */
1831 youi 1.21 ZEND_FUNCTION(xnp_is_group_admin)
1832 aga 1.2 {
1833     long sid, gid, uid;
1834 youi 1.24
1835 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1836     &sid, &gid, &uid) == FAILURE) {
1837     return;
1838 aga 1.1 }
1839 youi 1.24
1840 aga 1.2 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1841 youi 1.24
1842     RETURN_BOOL(b);
1843 aga 1.2 }
1844    
1845 aga 1.5 /** ?>散????眼?????違???若????id???荀с??緇?????<br>
1846 youi 1.24 int xnp_dump_gids( int sid, array criteria, array gids );
1847     @param xnp_session_id XNP???祉???激?с??D
1848     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1849     @param gids gid??????????????
1850     @return 0 success
1851 aga 1.5 */
1852 youi 1.21 ZEND_FUNCTION(xnp_dump_gids)
1853 aga 1.2 {
1854     result_t result;
1855     long sid;
1856     zval *zcriteria;
1857     zval *zgids;
1858 youi 1.24
1859 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1860     &sid, &zcriteria, &zgids) == FAILURE) {
1861     return;
1862     }
1863 youi 1.24
1864 aga 1.2 zCriteria_t zcri(zcriteria);
1865     result = zcri.getResult();
1866     if ( RES_OK == result ){
1867     groupid_t *pgid;
1868     int gidLen;
1869     result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
1870     if ( RES_OK == result ){
1871     gidsToZval( pgid, gidLen, &zgids );
1872 youi 1.19 freeGID( pgid );
1873 aga 1.1 }
1874     }
1875 youi 1.24
1876     RETURN_LONG(result);
1877 aga 1.1 }
1878 aga 1.8
1879     /** gid?ф??絎??????違???若??????????с?????ゆ?>散????眼?????違???若??膊∞??????id???荀с??緇?????<br>
1880 youi 1.24 int xnp_dump_group_admins(int sid, int group_id, array criteria, array uids )
1881     @param sid XNP???祉???激?с??D
1882     @param group_id XNP???違???若??ID
1883     @param criteria ?>散
1884     @param uids uid???荀с??????????????
1885     @return 0 success
1886 aga 1.8 */
1887    
1888 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
1889 aga 1.8 {
1890     long sid, gid;
1891     zval *zcriteria;
1892     zval *zuids;
1893 youi 1.24
1894     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1895     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1896 aga 1.8 return;
1897     }
1898 youi 1.24
1899 aga 1.8 zCriteria_t zcri(zcriteria);
1900     result_t result = zcri.getResult();
1901     if ( result == RES_OK ){
1902     userid_t *uids;
1903     int uidsLen;
1904     result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1905     if ( result == RES_OK ){
1906     uidsToZval( uids, uidsLen, &zuids );
1907 youi 1.19 freeUID( uids );
1908 aga 1.8 }
1909     }
1910     RETURN_LONG( result );
1911     }
1912    
1913 aga 1.11 /** ?違???若???????<?潟???若?????ゃ??????<br>
1914 youi 1.24 int xnp_delete_member(int sid, int group_id, int user_id )
1915     @param sid XNP???祉???激?с??D
1916     @param group_id XNP???違???若??ID
1917     @param user_id ???若??D
1918     @return 0 success
1919 aga 1.11 */
1920    
1921 youi 1.21 ZEND_FUNCTION(xnp_delete_member)
1922 aga 1.11 {
1923     long sid, gid, uid;
1924 youi 1.24
1925     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1926     &sid, &gid, &uid) == FAILURE) {
1927 aga 1.11 return;
1928     }
1929 youi 1.24
1930 aga 1.11 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1931     RETURN_LONG( result );
1932     }
1933    
1934     /** ?違???若?????<?潟???若??菴遵??????<br>
1935 youi 1.24 int xnp_insert_member(int sid, int group_id, int user_id, bool admin )
1936     @param sid XNP???祉???激?с??D
1937     @param group_id XNP???違???若??ID
1938     @param user_id ???若??D
1939     @param admin ?違???若??膊∞????????true
1940     @return 0 success
1941 aga 1.11 */
1942    
1943 youi 1.21 ZEND_FUNCTION(xnp_insert_member)
1944 aga 1.11 {
1945     long sid, gid, uid;
1946     zend_bool admin;
1947 youi 1.24
1948     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
1949     &sid, &gid, &uid, &admin) == FAILURE) {
1950 aga 1.11 return;
1951     }
1952 youi 1.24
1953 aga 1.11 result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
1954     RETURN_LONG( result );
1955     }
1956    
1957     /** gid?ф??絎??????違???若?????<?潟???若??id???荀с??緇???<br>
1958 youi 1.24 int xnp_get_members(int sid, int group_id, array criteria, array uids )
1959     @param sid XNP???祉???激?с??D
1960     @param group_id XNP???違???若??ID
1961     @param criteria ?>散
1962     @param uids uid???荀с??????????????
1963     @return 0 success
1964 aga 1.11 */
1965    
1966 youi 1.21 ZEND_FUNCTION(xnp_get_members)
1967 aga 1.11 {
1968     long sid, gid;
1969     zval *zcriteria;
1970     zval *zuids;
1971 youi 1.24
1972     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1973     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1974 aga 1.11 return;
1975     }
1976 youi 1.24
1977 aga 1.11 zCriteria_t zcri(zcriteria);
1978     result_t result = zcri.getResult();
1979     if ( result == RES_OK ){
1980     userid_t *uids;
1981     int uidsLen;
1982     result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
1983     if ( result == RES_OK ){
1984     uidsToZval( uids, uidsLen, &zuids );
1985 youi 1.19 freeUID( uids );
1986 aga 1.11 }
1987     }
1988     RETURN_LONG( result );
1989     }
1990 youi 1.7
1991     /** ?違???若?????宴??紊??眼??????<br>
1992 youi 1.24 int xnp_update_group(int sid, array group )
1993     @param sid XNP???祉???激?с??D
1994     @param group ?違???若?????宴???f?渇????
1995     @return 0 success
1996 youi 1.7 */
1997 youi 1.21 ZEND_FUNCTION(xnp_update_group)
1998 youi 1.7 {
1999     long sid;
2000     zval *zgroup;
2001 youi 1.24 group_t group;
2002    
2003     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2004     &sid, &zgroup) == FAILURE) {
2005 youi 1.7 return;
2006     }
2007 youi 1.24
2008     zvalToGroup( zgroup, &group );
2009     result_t result = updateGroup( sid, &group );
2010     RETURN_LONG( result );
2011 aga 1.10 }
2012    
2013 youi 1.12 /** ?違???若?????宴??菴遵????????<br>
2014 youi 1.24 int xnp_insert_group( int sid, array group, int &gid )
2015     @param sid ?祉???激?с??D
2016     @param group ?違???若?????宴???f?渇????
2017     @param gid 絲上??????違???若??ID???吾??莨若???????<???潟??/span>
2018     @return RES_OK
2019     @return RES_DB_NOT_INITIALIZED
2020     @return RES_NO_SUCH_SESSION
2021     @return RES_DB_QUERY_ERROR
2022 youi 1.12 */
2023 youi 1.21 ZEND_FUNCTION(xnp_insert_group)
2024 youi 1.12 {
2025     long sid;
2026     zval *zgroup;
2027 youi 1.24 zval *zgid;
2028     group_t group;
2029     groupid_t gid;
2030    
2031     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2032     &sid, &zgroup, &zgid ) == FAILURE) {
2033 youi 1.12 return;
2034     }
2035 youi 1.24
2036     zvalToGroup( zgroup, &group );
2037     result_t result = insertGroup( sid, &group, &gid );
2038     zgid -> type = IS_LONG;
2039     zgid -> value.lval = gid;
2040     RETURN_LONG( result );
2041 youi 1.12 }
2042    
2043    
2044     /** ?違???若?????宴?????ゃ??????<br>
2045 youi 1.24 int xnp_delete_group( int sid, int gid )
2046     @param sid XNP???祉???激?с??D
2047     @param gid ???ゃ???????違???若????D
2048     @return RES_OK
2049     @return RES_DB_QUERY_ERROR
2050     @return RES_NO_SUCH_SESSION
2051     @return RES_DB_NOT_INITIALIZED
2052 youi 1.12 */
2053 youi 1.21 ZEND_FUNCTION(xnp_delete_group)
2054 youi 1.12 {
2055     long sid;
2056     long gid;
2057 youi 1.24
2058     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2059     &sid, &gid) == FAILURE) {
2060 youi 1.12 return;
2061     }
2062 youi 1.24 RETURN_LONG( deleteGroup( sid, gid ) );
2063 youi 1.12 }
2064    
2065     /** ?違???若?????????????緇???<br>
2066 youi 1.24 int xnp_dump_group_admins( int sid, int gid, array criteria, array uids )
2067     @param sid XNP???祉???激?с??D
2068     @param gid XNP?違???若????D
2069     @param criteria uids???吾??莨若?????????純?若???>散鐚?膀??蚊????絎?
2070     @param uids 膊∞??????ID???吾??莨若??????
2071     @return RES_OK
2072     @return RES_DB_QUERY_ERROR
2073     @return RES_NO_SUCH_SESSION
2074     @return RES_DB_NOT_INITIALIZED
2075 youi 1.12 */
2076     /*
2077 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
2078 youi 1.12 {
2079     long sid;
2080     long gid;
2081     zval *zcriteria;
2082     zval *zuids;
2083 youi 1.24
2084     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2085     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2086 youi 1.12 return;
2087     }
2088     zCriteria_t zcri(zcriteria);
2089     result_t result = zcri.getResult();
2090     if ( RES_OK == result ){
2091 youi 1.24 userid_t* uids;
2092     int uidsLen;
2093     result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2094     if( result != RES_OK ) RETURN_LONG( result );
2095     uidsToZval( uids, uidsLen, &zuids );
2096     fprintf( stderr, "uidsLen=%d\n", uidsLen );
2097     for( int i = 0; i < uidsLen; i++ ){
2098     fprintf( stderr, "%d, \n", uids[ i ] );
2099     }
2100     freeUID( uids );
2101     RETURN_LONG( result );
2102     }
2103     RETURN_LONG( result );
2104 youi 1.12 }
2105     */
2106 aga 1.22
2107     /** ???????ゃ?潟???????鴻??緇???<br>
2108     * int xnp_get_all_indexes( int sid, array criteria, array indexes );
2109     * @param sid XNP???祉???激?с??D
2110     * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
2111     * @return RES_OK
2112     */
2113     ZEND_FUNCTION(xnp_get_all_indexes)
2114     {
2115     long sid;
2116     zval *zcriteria;
2117     zval *zindexes;
2118 youi 1.24
2119     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2120     &sid, &zcriteria, &zindexes) == FAILURE) {
2121 aga 1.22 return;
2122     }
2123     zCriteria_t zcri(zcriteria);
2124     result_t result = zcri.getResult();
2125     if ( RES_OK == result ){
2126     const index_t *indexes;
2127     int indexesLen;
2128     result = getAllIndexes( sid, &zcri, &indexes, &indexesLen );
2129     if ( RES_OK == result ){
2130     result = indexesToZval( indexes, indexesLen, zindexes );
2131     freeIndex( indexes );
2132     }
2133     }
2134     RETURN_LONG(result);
2135     }
2136    
2137     /** ?????ゃ?潟???????鴻??????????ゃ?潟???????鴻??緇???<br>
2138     * int xnp_get_indexes( int sid, int parentXID, array criteria, array indexes );
2139     * @param sid XNP???祉???激?с??D
2140     * @param parentXID 荀???ndexID
2141     * @param cri 腟???????我??絎?鐚??純?若???>散??絎?
2142     * @param indexes 腟?????????????????
2143     * @return RES_OK
2144     */
2145     ZEND_FUNCTION(xnp_get_indexes)
2146     {
2147     long sid;
2148     long parentXID;
2149     zval *zcriteria;
2150     zval *zindexes;
2151 youi 1.24
2152     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2153     &sid, &parentXID, &zcriteria, &zindexes) == FAILURE) {
2154 aga 1.22 return;
2155     }
2156     zCriteria_t zcri(zcriteria);
2157     result_t result = zcri.getResult();
2158     if ( RES_OK == result ){
2159     const index_t *indexes;
2160     int indexesLen;
2161     result = getIndexes( sid, parentXID, &zcri, &indexes, &indexesLen );
2162     if ( RES_OK == result ){
2163     result = indexesToZval( indexes, indexesLen, zindexes );
2164     freeIndex( indexes );
2165     }
2166     }
2167     RETURN_LONG(result);
2168     }
2169    
2170    
2171     /** ?ゃ?潟???????鴻??篏???????<br>
2172     * int xnp_insert_index( int sid, array index, int &indexID );
2173     * @param sid XNP???祉???激?с??D
2174     * @param index 篏????????ゃ?潟????????/span>
2175     * @param indexID 篏??????????ゃ?潟???????鴻??D??????????紊???/span>
2176     * @return RES_OK
2177     */
2178     ZEND_FUNCTION(xnp_insert_index)
2179     {
2180     long sid;
2181     zval *zindex;
2182     zval *zIndexID;
2183 youi 1.24
2184     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2185     &sid, &zindex, &zIndexID) == FAILURE) {
2186 aga 1.22 return;
2187     }
2188 youi 1.24
2189 aga 1.22 if (!PZVAL_IS_REF(zIndexID)) {
2190     zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
2191     RETURN_LONG(RES_PHP_NONREF);
2192     }
2193     zIndex_t index( zindex );
2194     indexid_t xid;
2195     result_t result = insertIndex( sid, &index, &xid );
2196     if ( RES_OK == result )
2197     ZVAL_LONG(zIndexID, (long)xid);
2198     RETURN_LONG(result);
2199     }
2200    
2201     /** ?ゃ?潟???????鴻???贋?違????<br>
2202     * int xnp_update_index( int sid, array index );
2203     * @param sid XNP???祉???激?с??D
2204     * @param index ?贋?違?????ゃ?潟????????/span>
2205     * @return RES_OK
2206     */
2207     ZEND_FUNCTION(xnp_update_index)
2208     {
2209     long sid;
2210     zval *zindex;
2211 youi 1.24
2212     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2213     &sid, &zindex) == FAILURE) {
2214 aga 1.22 return;
2215     }
2216     zIndex_t index(zindex);
2217     result_t result = index.getResult();
2218     if ( RES_OK == result ){
2219     result = updateIndex( sid, &index );
2220     }
2221     RETURN_LONG(result);
2222     }
2223    
2224     /** ?ゃ?潟???????鴻?????ゃ????<br>
2225     * int xnp_delete_index( int sid, int indexID );
2226     * @param sid XNP???祉???激?с??D
2227     * @param indexID ???ゃ?????ゃ?潟????????/span>
2228     * @return RES_OK
2229     */
2230     ZEND_FUNCTION(xnp_delete_index)
2231     {
2232     long sid;
2233     long xid;
2234 youi 1.24
2235     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2236     &sid, &xid) == FAILURE) {
2237 aga 1.22 return;
2238     }
2239 youi 1.24
2240 aga 1.22 result_t result = deleteIndex( sid, xid );
2241     RETURN_LONG(result);
2242     }
2243    
2244    
2245     /** ?ゃ?潟???????鴻????緇?????<br>
2246     * int xnp_get_index( int sid, int indexID, array index );
2247     * @param sid XNP???祉???激?с??D
2248     * @param indexID ??緇??????ゃ?潟???????鴻??D
2249     * @param index ??緇?腟??????????????f?渇????
2250     * @return RES_OK
2251     */
2252     ZEND_FUNCTION(xnp_get_index)
2253     {
2254     long sid;
2255     long xid;
2256     zval *zindex;
2257 youi 1.24
2258     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2259     &sid, &xid, &zindex) == FAILURE) {
2260 aga 1.22 return;
2261     }
2262 youi 1.24
2263 aga 1.22 const index_t *index;
2264     result_t result = getIndex( sid, xid, &index );
2265     if ( RES_OK == result ){
2266     result = indexToZval( index, zindex );
2267     freeIndex( index );
2268     }
2269     RETURN_LONG(result);
2270     }
2271    
2272    
2273    
2274     /** ?ゃ?潟???????鴻??茯??粋昭?水??純??????????茯帥?鴻??<br>
2275     * int xnp_is_index_readable( int sid, int indexID );
2276     * @param sid XNP???祉???激?с??D
2277     * @param indexID 絲乗院?ゃ?潟???????鴻??D
2278     * @return true false
2279     */
2280     ZEND_FUNCTION(xnp_is_index_readable)
2281     {
2282     long sid;
2283     long xid;
2284 youi 1.24
2285     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2286     &sid, &xid) == FAILURE) {
2287 aga 1.22 return;
2288     }
2289     RETURN_BOOL(isIndexReadable(sid,xid));
2290     }
2291    
2292    
2293     /** ?ゃ?潟???????鴻???吾??莨若?水??純??????????茯帥?鴻??<br>
2294     * int xnp_is_index_writable( int sid, int indexID );
2295     * @param sid XNP???祉???激?с??D
2296     * @param indexID 絲乗院?ゃ?潟???????鴻??D
2297     * @return true false
2298     */
2299     ZEND_FUNCTION(xnp_is_index_writable)
2300     {
2301     long sid;
2302     long xid;
2303 youi 1.24
2304     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2305     &sid, &xid) == FAILURE) {
2306 aga 1.22 return;
2307     }
2308     RETURN_BOOL(isIndexWritable(sid,xid));
2309     }
2310    
2311     /** ?ゃ?潟???????鴻????綺???ャ???帥????<br>
2312     * int xnp_swap_index_sort_number( int sid, int indexID1, int indexID2 );
2313     * @param sid XNP???祉???激?с??D
2314     * @param indexID1 絲乗院?ゃ?潟???????鴻??D
2315     * @param indexID2 絲乗院?ゃ?潟???????鴻??D
2316     * @return true false
2317     */
2318     ZEND_FUNCTION(xnp_swap_index_sort_number)
2319     {
2320     long sid;
2321     long xid1, xid2;
2322 youi 1.24
2323     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2324     &sid, &xid1, &xid2) == FAILURE) {
2325 aga 1.22 return;
2326     }
2327 youi 1.24
2328 aga 1.22 result_t result = swapIndexSortNumber( sid, xid1, xid2 );
2329     RETURN_LONG(result);
2330     }
2331    
2332    
2333    
2334 youi 1.21 /** XNP??ession_id???綵??с???с????lt;br>
2335 youi 1.24 bool xnp_is_valid_session_id( int xnp_session_id)
2336     @return true ???鴻??NP??ession_id?с????<br>
2337     @return false ?≦?鴻??ession_id?障??????????/span>
2338 aga 1.10 */
2339 youi 1.21 ZEND_FUNCTION(xnp_is_valid_session_id)
2340 aga 1.10 {
2341     long sid;
2342     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
2343     return;
2344     }
2345 youi 1.24
2346 aga 1.10 RETURN_BOOL(isValidSessionID((sessionid_t)sid));
2347 aga 1.9 }
2348    
2349     /** ?????惹??絖?????緇???<br>
2350 youi 1.24 string xnp_get_last_error_string()
2351     @return 0 success
2352 aga 1.9 */
2353 youi 1.21 ZEND_FUNCTION(xnp_get_last_error_string)
2354 aga 1.9 {
2355     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
2356     return;
2357     }
2358 youi 1.24
2359 aga 1.9 string str( getLastErrorString() );
2360     RETURN_STRING((char *)str.c_str(), 1);
2361 youi 1.7 }
2362    
2363 youi 1.24
2364     /**
2365     *
2366     * ?≪?ゃ?????吾???≪???祉?号┤???????с????????
2367     *
2368     * @refer itemop_t
2369     * @param sid ?祉???激?с??D
2370     * @param iid ???с?????莟<???????≪?ゃ??????D
2371     * @param op ?≪???祉?鴻??┏蕁?
2372     * @return true 罔???????
2373     * @return false 罔???????
2374     *
2375     */
2376     ZEND_FUNCTION(xnp_get_item_permission)
2377     {
2378 youi 1.27 long sid;
2379     itemid_t iid;
2380     long op;
2381    
2382     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2383     &sid, &iid, &op) == FAILURE) {
2384     fprintf( stderr, "error occured " );
2385     return;
2386     }
2387     RETURN_BOOL( getItemPermission( (sessionid_t)sid, iid, op ) );
2388 youi 1.24 }
2389    
2390    
2391     /**
2392     *
2393     * ?ゃ?潟???????鴻?吾???≪???祉?号┤???????с????????
2394     *
2395     * @refer indexop_t
2396     * @param sid ?祉???激?с??D
2397     * @param xid ???с?????莟<???????ゃ?潟???????鴻??D
2398     * @param op ?≪???祉?鴻??┏蕁?
2399     * @return true 罔???????
2400     * @return false 罔???????
2401     *
2402     */
2403     ZEND_FUNCTION(xnp_get_index_permission)
2404     {
2405 youi 1.27 long sid;
2406     indexid_t xid;
2407     long op;
2408    
2409     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2410     &sid, &xid, &op) == FAILURE) {
2411     fprintf( stderr, "error occured " );
2412     return;
2413     }
2414     RETURN_BOOL( getIndexPermission( (sessionid_t)sid, xid, op ) );
2415 youi 1.24 }
2416    
2417    
2418     /**
2419     *
2420     * ?≪?ゃ???????粋??倶????紊??眼????罔????????<??茯帥?鴻?障??鐚?/span>
2421     * @refer certify_t
2422     * @param sid ?祉???激?с??D
2423     * @param xid 紊??翫?莟<?≪?ゃ???????脂?蚊???????????ゃ?潟???????鴻??D
2424     * @param iid 紊??翫?莟<?≪?ゃ??????D
2425     * @param state ?違???鎀??眼???????粋??倶??
2426     * @return true 罔???????
2427     * @return false 罔???????
2428     *
2429     */
2430     ZEND_FUNCTION(xnp_get_certify_permission)
2431     {
2432 youi 1.27 long sid;
2433     itemid_t iid;
2434     indexid_t xid;
2435     certify_t state;
2436    
2437     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2438     &sid, &xid, &iid, &state) == FAILURE) {
2439     fprintf( stderr, "error occured " );
2440     return;
2441     }
2442     RETURN_BOOL( getCertifyPermission( (sessionid_t)sid, xid, iid, state ) );
2443 youi 1.24 }
2444     <