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.31 - (hide annotations) (download) (as text)
Wed Feb 9 02:14:15 2005 UTC (19 years, 2 months ago) by aga
Branch: MAIN
Changes since 1.30: +8 -3 lines
File MIME type: text/x-c++src
・initializeDB()にdbtype引数を追加(SQLite用).

1 aga 1.1 /*
2 aga 1.31 $Revision: 1.30 $
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 ( hashGetString( ht, "base_url" , &p ) ) setBaseURL ( p );
513     if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
514     if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
515 aga 1.22 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
516 aga 1.14
517     result = RES_OK;
518 aga 1.2 }
519 aga 1.16 public:
520 aga 1.2 zAccount_t() : account(){ result = RES_ERROR; }
521 youi 1.24
522     /** ?潟?潟?鴻????????/span>
523     @param pz array( 'uid'=>1, 'uname'=>'root', ... ); ??????就???f?渇???? */
524 aga 1.2 zAccount_t( zval *pz ) : account(){ initialize(pz); }
525     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
526     result_t getResult(){ return result; };
527     };
528    
529 aga 1.22 class zIndex_t : public index {
530     private:
531     result_t result;
532 youi 1.24
533 aga 1.22 void initialize(zval *pz){
534     HashTable *ht = Z_ARRVAL_P(pz);
535     long l;
536     char *p;
537     if ( hashGetLong ( ht, "item_id" , &l ) ) setItemID ( l );
538     if ( hashGetLong ( ht, "item_type_id" , &l ) ) setItemTypeID ( l );
539     if ( hashGetLong ( ht, "contributor_uid" , &l ) ) setContributorUID ( l );
540     if ( hashGetString( ht, "title" , &p ) ) setTitle ( p );
541     if ( hashGetString( ht, "keywords" , &p ) ) setKeywords ( p );
542     if ( hashGetString( ht, "description" , &p ) ) setDescription ( p );
543     if ( hashGetLong ( ht, "last_update_date" , &l ) ) setLastUpdateDate ( l );
544     if ( hashGetLong ( ht, "creation_date" , &l ) ) setCreationDate ( l );
545     if ( hashGetLong ( ht, "parent_index_id" , &l ) ) setParentIndexID ( l );
546     if ( hashGetLong ( ht, "owner_uid" , &l ) ) setOwnerUID ( l );
547     if ( hashGetLong ( ht, "owner_gid" , &l ) ) setOwnerGID ( l );
548     if ( hashGetLong ( ht, "open_level" , &l ) ) setOpenLevel ( l );
549     if ( hashGetLong ( ht, "sort_number" , &l ) ) setSortNumber ( l );
550    
551     result = RES_OK;
552     }
553     public:
554     zIndex_t() : index(){ result = RES_ERROR; }
555     zIndex_t( zval *pz ) : index(){ initialize(pz); }
556     zIndex_t( zval **ppz ) : index() { initialize(*ppz); }
557     result_t getResult(){ return result; };
558 youi 1.24
559 aga 1.22 void dump(){
560     }
561     };
562    
563 aga 1.16 /** zval*????(userid_t *puid,int uidLen)?????????????????????鴻?? <br>
564 youi 1.24 ????紊掩??????getResult()!=RES_OK <br>
565 aga 1.2 */
566     class zUIDs_t {
567     private:
568     result_t result;
569     userid_t *pUID;
570     int len;
571     public:
572     zUIDs_t(){
573     pUID = 0;
574     len = 0;
575     result = RES_ERROR;
576     }
577 youi 1.24
578     /** ?潟?潟?鴻????????/span>
579     @param pza array( '1', '3', '4', '6', ... ); ??????就?????? */
580 aga 1.2 zUIDs_t( zval *pza ){
581     pUID = 0;
582     len = 0;
583     result = RES_ERROR;
584 youi 1.24
585 aga 1.2 if ( Z_TYPE_P(pza) != IS_ARRAY ){
586     result = RES_ERROR;
587     }
588     else {
589     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
590     if(len == 0) {
591     pUID = new userid_t[1];
592     result = RES_OK;
593     }
594     else {
595     /* php/ext/standard/string.c ? implode??????????????????
596     zend_hash_*???????ャ?<?潟???c????????????????鐚?
597     */
598     zval **tmp;
599     HashPosition pos;
600     int i = 0;
601     pUID = new userid_t[len];
602 youi 1.24
603 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
604     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
605     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ????/span>
606     convert_to_long_ex(tmp);
607     if ( i < len )
608     pUID[i++] = Z_LVAL_PP(tmp);
609     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
610     }
611     len = i;
612     result = RES_OK;
613     }
614     }
615     }
616 youi 1.24
617 aga 1.2 ~zUIDs_t(){
618     if ( pUID ) delete[] pUID;
619     }
620     result_t getResult(){ return result; }
621     userid_t *getPUID(){ return pUID; }
622     int getLen(){ return len; }
623     void dump(){
624 youi 1.24 zend_printf( "dumping zUIDs...<br>\n" );
625 aga 1.2 zend_printf( "result=%d<br>\n", (int)result );
626     zend_printf( "len=%d<br>\n", len );
627     for ( int i = 0; i < len; i++ ){
628     zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
629     }
630     }
631     };
632    
633 youi 1.24 /** zval*????(itemid_t *piid,int iidLen)?????????????????????鴻?? <br>
634     ????紊掩??????getResult()!=RES_OK <br>
635     */
636     class zIIDs_t {
637     private:
638     result_t result;
639     itemid_t *pIID;
640     int len;
641     public:
642     zIIDs_t(){
643     pIID = 0;
644     len = 0;
645     result = RES_ERROR;
646     }
647    
648     /** ?潟?潟?鴻????????/span>
649     @param pza array( '1', '3', '4', '6', ... ); ??????就?????? */
650     zIIDs_t( zval *pza ){
651     pIID = 0;
652     len = 0;
653     result = RES_ERROR;
654    
655     if ( Z_TYPE_P(pza) != IS_ARRAY ){
656     result = RES_ERROR;
657     }
658     else {
659     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
660     if(len == 0) {
661     pIID = new itemid_t[1];
662     result = RES_OK;
663     }
664     else {
665     /* php/ext/standard/string.c ? implode??????????????????
666     zend_hash_*???????ャ?<?潟???c????????????????鐚?
667     */
668     zval **tmp;
669     HashPosition pos;
670     int i = 0;
671     pIID = new itemid_t[len];
672    
673     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
674     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
675     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ????/span>
676     convert_to_long_ex(tmp);
677     if ( i < len )
678     pIID[i++] = Z_LVAL_PP(tmp);
679     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
680     }
681     len = i;
682     result = RES_OK;
683     }
684     }
685     }
686    
687     ~zIIDs_t(){
688     if ( pIID ) delete[] pIID;
689     }
690     result_t getResult(){ return result; }
691     itemid_t *getPIID(){ return pIID; }
692     int getLen(){ return len; }
693     void dump(){
694     zend_printf( "dumping zIIDs...<br>\n" );
695     zend_printf( "result=%d<br>\n", (int)result );
696     zend_printf( "len=%d<br>\n", len );
697     for ( int i = 0; i < len; i++ ){
698     zend_printf( "pIID[%d] = %d<br>\n", i, pIID[i] );
699     }
700     }
701     };
702    
703     /**
704     *
705     * amazonbook_t????絎鴻??PHP???????????????
706     * @param pAmazonbook 紊???????mazonbook_t*
707     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
708     * @return RES_OK
709     *
710     */
711     result_t amazonbookToZval( const amazonbook_t *pAmazonbook, zval *z )
712     {
713     zend_hash_clean( z -> value.ht );
714    
715     add_assoc_string( z, "title", ( char* )pAmazonbook -> getTitle( ), 1 );
716     add_assoc_string( z, "author", ( char* )pAmazonbook -> getAuthor( ), 1 );
717     add_assoc_string( z, "publisher", ( char* )pAmazonbook -> getPublisher( ), 1 );
718     add_assoc_long( z, "year_of_publication", pAmazonbook -> getYearOfPublication( ) );
719     add_assoc_string( z, "isbn", ( char* )pAmazonbook -> getISBN( ), 1 );
720     add_assoc_string( z, "url", ( char* )pAmazonbook -> getURL( ), 1 );
721    
722     return RES_OK;
723     }
724    
725     /**
726     *
727     * pubmed_t????絎鴻??PHP???????????????
728     * @param pPubmed 紊???????ubmed_t*
729     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
730     * @return RES_OK
731     *
732     */
733     result_t pubmedToZval( const pubmed_t *pPubmed, zval *z )
734     {
735     zend_hash_clean( z -> value.ht );
736    
737     add_assoc_long( z, "pmid", pPubmed -> getID( ) );
738     add_assoc_string( z, "title", ( char* )pPubmed -> getTitle( ), 1 );
739     add_assoc_string( z, "author", ( char* )pPubmed -> getAuthor( ), 1 );
740     add_assoc_string( z, "journal", ( char* )pPubmed -> getJournal( ), 1 );
741     add_assoc_long( z, "year_of_publication", pPubmed -> getYearOfPublication( ) );
742     add_assoc_long( z, "volume", pPubmed -> getVolume( ) );
743     add_assoc_long( z, "number", pPubmed -> getNumber( ) );
744     add_assoc_string( z, "page", ( char* )pPubmed -> getPage( ), 1 );
745     add_assoc_string( z, "abstract", ( char* )pPubmed -> getAbstract( ), 1 );
746    
747     return RES_OK;
748     }
749    
750     /**
751     *
752     * itemid_t????????PHP???????????????
753     * @param piid 紊???????temid_t??????
754     * @param len piid?????????激??
755     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
756     * @return RES_OK
757     *
758     */
759 youi 1.25 result_t itemidsToZval( const itemid_t *piid, int len, zval **ppz )
760 youi 1.24 {
761     zend_hash_clean( Z_ARRVAL_PP(ppz) );
762    
763 youi 1.26 // add IDs
764     for ( int i = 0; i < len; i++ ){
765     add_next_index_long(*ppz, (long)(piid[i]) );
766     }
767    
768     return RES_OK;
769     }
770    
771     /**
772     *
773     * indexid_t????????PHP???????????????
774     * @param piid 紊???????ndexid_t??????
775     * @param len piid?????????激??
776     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
777     * @return RES_OK
778     *
779     */
780     result_t indexidsToZval( const indexid_t *piid, int len, zval **ppz )
781     {
782     zend_hash_clean( Z_ARRVAL_PP(ppz) );
783    
784     // add IDs
785 youi 1.24 for ( int i = 0; i < len; i++ ){
786     add_next_index_long(*ppz, (long)(piid[i]) );
787     }
788    
789     return RES_OK;
790     }
791    
792 aga 1.8 /**
793 youi 1.24 *
794 aga 1.8 * uids_t????????PHP???????????????
795 youi 1.24 *
796 aga 1.16 * @param pUID 紊???????serid_t??????
797 aga 1.8 * @param len pUID?????????激??
798     * @param pz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
799     * @return RES_OK
800 youi 1.24 *
801 aga 1.8 */
802 aga 1.4 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
803     {
804 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
805    
806 aga 1.2 // add UIDs
807     for ( int i = 0; i < len; i++ ){
808 aga 1.8 add_next_index_long(*ppz, (long)(pUID[i]) );
809 aga 1.2 }
810 youi 1.24
811 aga 1.2 return RES_OK;
812     }
813 youi 1.24
814 aga 1.16 /**
815     *
816     * groupid_t????????PHP???????????????
817     * @param pGID 紊???????roupid_t??????
818     * @param len pGID?????????激??
819     * @param ppz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
820     * @return RES_OK
821     *
822     */
823 aga 1.4 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
824     {
825 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
826    
827 aga 1.2 // add GIDs
828     for ( int i = 0; i < len; i++ ){
829 aga 1.8 add_next_index_long(*ppz, (long)(pGID[i]) );
830 aga 1.2 }
831 youi 1.24
832     return RES_OK;
833     }
834    
835     /**
836     *
837     * changelog_t????絎鴻??PHP???????????????
838     * @param pChangelog 紊???????hangelog_t*
839     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
840     * @return RES_OK
841     *
842     */
843     result_t changelogToZval( const changelog_t *pChangelog, zval *z )
844     {
845     zend_hash_clean( z -> value.ht );
846    
847     add_assoc_long( z, "log_id", pChangelog -> getChangelogID( ) );
848     add_assoc_long( z, "item_id", pChangelog -> getItemID( ) );
849     add_assoc_long( z, "log_date", pChangelog -> getDate( ) );
850     add_assoc_string( z, "log", ( char* )pChangelog -> getLog( ), 1 );
851    
852     return RES_OK;
853     }
854    
855     /**
856     *
857     * item_t????絎鴻??PHP???????????????
858     * @param pItem 紊???????tem_t*
859     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
860     * @return RES_OK
861     *
862     */
863     result_t itemToZval( const item_t *pItem, zval *z )
864     {
865     zend_hash_clean( z -> value.ht );
866    
867     add_assoc_long( z, "item_id", pItem -> getItemID( ) );
868     add_assoc_long( z, "item_type_id", pItem -> getItemTypeID( ) );
869     add_assoc_long( z, "uid", pItem -> getContributorUID( ) );
870     add_assoc_string( z, "title", ( char* )pItem -> getTitle( ), 1 );
871     add_assoc_string( z, "keywords", ( char* )pItem -> getKeywords( ), 1 );
872     add_assoc_string( z, "description", ( char* )pItem -> getDescription( ), 1 );
873     add_assoc_string( z, "doi", ( char* )pItem -> getDOI( ), 1 );
874     add_assoc_long( z, "last_update_date", pItem -> getLastUpdateDate( ) );
875     add_assoc_long( z, "creation_date", pItem -> getCreationDate( ) );
876    
877     return RES_OK;
878     }
879    
880    
881     result_t itemsToZval( const item_t *pItems, int itemsLen, zval *z )
882     {
883     zend_hash_clean( z -> value.ht );
884     for( int i = 0; i < itemsLen; i++ ){
885     zval *new_array;
886     MAKE_STD_ZVAL(new_array);
887     if(array_init(new_array) != SUCCESS){
888     return RES_ERROR;
889     }
890     add_index_zval( z, i, new_array );
891     itemToZval( &pItems[ i ], new_array );
892     }
893 aga 1.2 return RES_OK;
894     }
895    
896 youi 1.24 /**
897     *
898     * PHP???f?渇????????絎鴻??group_t?????????
899     *
900     * @param z 紊????????f?渇????
901     * @param pGroup 紊???腟??????吾??莨若???違???若??
902     * @return RES_OK
903     *
904     */
905     result_t zvalToItem( zval *z, item_t* pItem )
906     {
907     zval **tmp;
908     char* key = 0;
909    
910     key = "item_id";
911     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
912     convert_to_long_ex( tmp ) ;
913     pItem -> setItemID( (*tmp) -> value.lval );
914     }
915     key = "item_type_id";
916     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
917     convert_to_long_ex( tmp ) ;
918     pItem -> setItemTypeID( (*tmp) -> value.lval );
919     }
920     key = "uid";
921     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
922     convert_to_long_ex( tmp ) ;
923     pItem -> setContributorUID( (*tmp) -> value.lval );
924     }
925     key = "title";
926     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
927     convert_to_string_ex( tmp ) ;
928     pItem -> setTitle( (*tmp) -> value.str.val );
929     }
930     key = "keywords";
931     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
932     convert_to_string_ex( tmp ) ;
933     pItem -> setKeywords( (*tmp) -> value.str.val );
934     }
935     key = "description";
936     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
937     convert_to_string_ex( tmp ) ;
938     pItem -> setDescription( (*tmp) -> value.str.val );
939     }
940     key = "doi";
941     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
942     convert_to_string_ex( tmp ) ;
943     pItem -> setDOI( (*tmp) -> value.str.val );
944     }
945     key = "last_update_date";
946     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
947     convert_to_long_ex( tmp ) ;
948     pItem -> setLastUpdateDate( (*tmp) -> value.lval );
949     }
950     key = "creation_date";
951     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
952     convert_to_long_ex( tmp ) ;
953     pItem -> setCreationDate( (*tmp) -> value.lval );
954     }
955     return RES_OK;
956     }
957 aga 1.16
958     /**
959     *
960     * account_t????絎鴻??PHP???????????????
961     * @param pAccount 紊???????ccount_t*
962     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
963     * @return RES_OK
964     *
965     */
966 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
967     {
968 youi 1.24 zend_hash_clean( z -> value.ht );
969    
970     add_assoc_long( z, "uid", pAccount -> getUID( ) );
971     add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
972     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
973     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
974     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
975     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
976     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
977     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
978     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
979     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
980     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
981     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
982     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
983     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
984     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
985     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
986     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
987     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
988     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
989     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
990     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
991     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
992     add_assoc_long( z, "level", pAccount -> getLevel( ) );
993     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
994     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
995     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
996     add_assoc_long( z, "rank", pAccount -> getRank( ) );
997     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
998     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
999     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
1000     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
1001    
1002     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
1003     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
1004     add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
1005     add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
1006     add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
1007     add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
1008     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
1009     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
1010     add_assoc_string( z, "base_url", ( char* )pAccount -> getBaseURL( ), 1 );
1011     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
1012     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
1013     add_assoc_long( z, "private_index_id", pAccount -> getPrivateIndexID( ) );
1014 youi 1.6 return RES_OK;
1015     }
1016 youi 1.24
1017 aga 1.16 /**
1018     *
1019     * 茲??違??ccount_t????絎鴻??PHP?????????????????????
1020     * @param pAccounts 紊???????ccount_t*
1021     * @param accountsLen pAccounts?????????激??
1022     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1023     * @return RES_OK
1024     *
1025     z: ?????????????????????????? <br>
1026 youi 1.24 array(
1027     array(
1028     'uid'=>100,
1029     'activate'=>1,
1030     'division'=>'foo',
1031     'tel'=>'123-456-789',
1032     ...
1033     ),
1034     ...
1035     )
1036 aga 1.16 */
1037 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1038 aga 1.4 {
1039 youi 1.24 zend_hash_clean( z -> value.ht );
1040     for( int i = 0; i < accountsLen; i++ ){
1041     zval *new_array;
1042     MAKE_STD_ZVAL(new_array);
1043     if(array_init(new_array) != SUCCESS){
1044     return RES_ERROR;
1045     }
1046     add_index_zval( z, i, new_array );
1047     accountToZval( &pAccounts[ i ], new_array );
1048     }
1049 youi 1.6 return RES_OK;
1050 aga 1.2 }
1051    
1052 aga 1.16 /**
1053     *
1054     * 茲??違??roup_t????絎鴻??PHP?????????????????????
1055     * @param pGroups 紊???????roup_t*
1056     * @param groupsLen pGroups?????????激??
1057     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1058     * @return RES_OK
1059     *
1060     z: ?????????????????????????? <br>
1061 youi 1.24 array(
1062     array(
1063     'gid'=>1,
1064     'gname'=>'foo group',
1065     'gdesc'=>'group of foo'
1066     ),
1067     ...
1068     )
1069 aga 1.16 */
1070 youi 1.6 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1071 aga 1.4 {
1072 youi 1.24 zend_hash_clean( z -> value.ht );
1073     for( int i = 0; i < groupsLen; i++ ){
1074     zval *new_array;
1075     MAKE_STD_ZVAL(new_array);
1076     if(array_init(new_array) != SUCCESS){
1077     return RES_ERROR;
1078     }
1079     add_index_zval( z, i, new_array );
1080     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
1081     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
1082     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
1083     add_assoc_long( new_array, "group_index_id", pGroups[ i ].getGroupIndexID( ) );
1084     }
1085 youi 1.6 return RES_OK;
1086 aga 1.2 }
1087    
1088 youi 1.7 /**
1089 youi 1.24 *
1090 youi 1.7 * group_t????絎鴻??PHP???f?渇?????????????
1091 youi 1.24 *
1092 aga 1.16 * @param pGroup 紊????????違???若??????/span>
1093 youi 1.7 * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1094     * @return RES_OK
1095 youi 1.24 *
1096 youi 1.7 */
1097     result_t groupToZval( const group_t *pGroup, zval *z )
1098 youi 1.6 {
1099 youi 1.24 zend_hash_clean( z -> value.ht );
1100     add_assoc_long( z, "gid", pGroup -> getGID( ) );
1101     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
1102     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
1103     add_assoc_long( z, "group_index_id", pGroup -> getGroupIndexID( ) );
1104 youi 1.6 return RES_OK;
1105     }
1106    
1107 aga 1.16 /**
1108 youi 1.24 *
1109 aga 1.16 * PHP???f?渇????????絎鴻??group_t?????????
1110 youi 1.24 *
1111 aga 1.16 * @param z 紊????????f?渇????
1112     * @param pGroup 紊???腟??????吾??莨若???違???若??
1113     * @return RES_OK
1114 youi 1.24 *
1115 aga 1.16 */
1116 youi 1.7 result_t zvalToGroup( zval *z, group_t *pGroup )
1117     {
1118 youi 1.24 zval **tmp;
1119     char* key = 0;
1120    
1121     key = "gid";
1122     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1123     convert_to_long_ex( tmp ) ;
1124     pGroup -> setGID( (*tmp) -> value.lval );
1125     }
1126     key = "gname";
1127     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1128     convert_to_string_ex( tmp ) ;
1129     pGroup -> setGname( (*tmp) -> value.str.val );
1130     }
1131     key = "gdesc";
1132     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1133     convert_to_string_ex( tmp ) ;
1134     pGroup -> setDesc( (*tmp) -> value.str.val );
1135     }
1136     key = "group_index_id";
1137     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1138     convert_to_long_ex( tmp ) ;
1139     pGroup -> setGroupIndexID( (*tmp) -> value.lval );
1140     }
1141 youi 1.7 return RES_OK;
1142     }
1143    
1144 aga 1.16 /**
1145 youi 1.24 *
1146 aga 1.16 * session_t????絎鴻??PHP???f?渇?????????????
1147 youi 1.24 *
1148 aga 1.16 * @param pSession 紊???????ession_t
1149     * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
1150     * @return RES_OK
1151 youi 1.24 *
1152 aga 1.16 */
1153     result_t sessionToZval( const session_t *pSession, zval *z )
1154     {
1155     string sessionID(unsignedIntToString(pSession->getSessionID()));
1156     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
1157 youi 1.24
1158 aga 1.16 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1159     add_assoc_string(z, "date", (char *)date.c_str(), 1);
1160 youi 1.24
1161 aga 1.20 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1162 aga 1.16 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1163 youi 1.24
1164 aga 1.16 return RES_OK;
1165     }
1166    
1167 aga 1.22 /**
1168     *
1169     * index_t????絎鴻??PHP???????????????
1170     * @param pIndex 紊???????ndex_t*
1171     * @param z 紊???腟??????吾??莨若??????(??????羝??帥?с????????
1172     * @return RES_OK
1173     *
1174     */
1175     result_t indexToZval( const index_t *pIndex, zval *z )
1176     {
1177 youi 1.24 zend_hash_clean( z -> value.ht );
1178    
1179     add_assoc_long( z, "item_id", pIndex -> getItemID( ) );
1180     add_assoc_long( z, "item_type_id", pIndex -> getItemTypeID( ) );
1181     add_assoc_long( z, "contributor_uid", pIndex -> getContributorUID( ) );
1182     add_assoc_string( z, "title", ( char* )pIndex -> getTitle( ), 1 );
1183     add_assoc_string( z, "keywords", ( char* )pIndex -> getKeywords( ), 1 );
1184     add_assoc_string( z, "description", ( char* )pIndex -> getDescription( ), 1 );
1185     add_assoc_long( z, "last_update_date", pIndex -> getLastUpdateDate( ) );
1186     add_assoc_long( z, "creation_date", pIndex-> getCreationDate( ) );
1187     add_assoc_long( z, "parent_index_id", pIndex -> getParentIndexID( ) );
1188     add_assoc_long( z, "owner_uid", pIndex -> getOwnerUID( ) );
1189     add_assoc_long( z, "owner_gid", pIndex -> getOwnerGID( ) );
1190     add_assoc_long( z, "open_level", pIndex -> getOpenLevel( ) );
1191     add_assoc_long( z, "sort_number", pIndex -> getSortNumber( ) );
1192 aga 1.22 return RES_OK;
1193     }
1194    
1195     result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1196     {
1197 youi 1.24 zend_hash_clean( z -> value.ht );
1198     for( int i = 0; i < indexesLen; i++ ){
1199     zval *new_array;
1200     MAKE_STD_ZVAL(new_array);
1201     if(array_init(new_array) != SUCCESS){
1202     return RES_ERROR;
1203     }
1204     add_index_zval( z, i, new_array );
1205     indexToZval( &pIndexes[ i ], new_array );
1206     }
1207 aga 1.22 return RES_OK;
1208     }
1209    
1210    
1211 youi 1.7
1212 aga 1.16
1213     /** ??絎??????違???若???????宴??緇???<br>
1214 youi 1.24 int xnp_get_group( int sid, int gid, array group );
1215     @param sid XNP???祉???激?с??D
1216     @param gid XNP ? group_id
1217     @param group 腟?????????????????
1218     @return 0 success <br>
1219 aga 1.16 */
1220 youi 1.21 ZEND_FUNCTION(xnp_get_group)
1221 aga 1.4 {
1222 youi 1.6 long sid, gid;
1223     zval *zgroup;
1224 youi 1.24
1225 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1226 youi 1.24 &sid, &gid, &zgroup) == FAILURE) {
1227 youi 1.6 return;
1228     }
1229 youi 1.24
1230 youi 1.6 const group_t *pgroup;
1231     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1232     if ( RES_OK == result ){
1233 youi 1.7 groupToZval( pgroup, zgroup );
1234 youi 1.19 freeGroup( pgroup );
1235 youi 1.6 }
1236 youi 1.24
1237     RETURN_LONG(result);
1238 youi 1.6 }
1239    
1240 aga 1.2
1241 aga 1.16 /** ??絎??????違???若??(茲????????宴??緇???<br>
1242 youi 1.24 xnp_get_groups( int sid, array gids, array criteria, array groups );
1243     @param sid XNP???祉???激?с??D
1244     @param gids XNP ? group_id ??????
1245     @param criteria ?>散
1246     @param groups 腟???????????????????????
1247     @return 0 success <br>
1248 aga 1.16 */
1249 youi 1.21 ZEND_FUNCTION(xnp_get_groups)
1250 youi 1.6 {
1251     result_t result;
1252 youi 1.29 long sid;
1253 youi 1.6 zval *zcriteria;
1254     zval *zgids;
1255     zval *zgroups;
1256 youi 1.24 zval **ppzTmp = 0;
1257     HashPosition pos;
1258     int res2;
1259     int gidsLen;
1260     const group_t* groups;
1261     int groupsLen;
1262    
1263 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1264 youi 1.24 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1265 youi 1.6 return;
1266     }
1267 youi 1.24
1268     //gids???違???若??ID???潟???若????
1269     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
1270     groupid_t *gids = new groupid_t[ gidsLen ];
1271     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
1272     for( int i = 0; i < gidsLen; i++ ){
1273     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
1274     SEPARATE_ZVAL(ppzTmp);
1275     convert_to_long_ex(ppzTmp);
1276     gids[ i ] = Z_LVAL_PP(ppzTmp);
1277     }
1278     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
1279     }
1280    
1281 youi 1.6 zCriteria_t zcri(zcriteria);
1282     result = zcri.getResult();
1283     if ( RES_OK == result ){
1284 youi 1.24 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
1285     if ( RES_OK == result ){
1286     groupsToZval( groups, groupsLen, zgroups );
1287     delete[] gids;
1288     freeGroup( groups );
1289     }
1290     }
1291     RETURN_LONG(result);
1292 youi 1.6 }
1293    
1294    
1295 aga 1.16 /** ??絎????????若?吟???≪?????若?帥??????????茯帥?鴻??<br>
1296 youi 1.24 int xnp_is_moderator(int sid, int uid)
1297     @param sid XNP???祉???激?с??D
1298     @param uid xoops ? uid (xoops_users.uid)
1299     @return true ?≪?????若?帥?с???? <br>
1300 aga 1.16 */
1301 youi 1.21 ZEND_FUNCTION(xnp_is_moderator)
1302 youi 1.6 {
1303 youi 1.21 long xnpSessionID;
1304 youi 1.6 userid_t uid;
1305 youi 1.24
1306     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1307     &xnpSessionID, &uid) == FAILURE) {
1308 youi 1.6 return;
1309     }
1310 youi 1.24
1311 youi 1.21 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1312 youi 1.24 RETURN_BOOL(result)
1313 youi 1.6 }
1314    
1315 aga 1.16 /** ???若?九??????uid??茯帥?鴻??<br>
1316 youi 1.24 int xnp_get_uid(string uname,int &uid)
1317     @param sid XNP???祉???激?с??D
1318     @param uname xoops ? uname (xoops_users.uname)
1319     @param uid xoops ? uid (xoops_users.uid) ??????????紊???/span>
1320     @return 0 success
1321 aga 1.16 */
1322 youi 1.21 ZEND_FUNCTION(xnp_get_uid)
1323 youi 1.6 {
1324     char *uname;
1325     int unameLen;
1326 aga 1.14 zval *zuid;
1327 youi 1.6 userid_t uid;
1328 youi 1.24
1329     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1330 aga 1.14 &uname, &unameLen, &zuid) == FAILURE) {
1331 youi 1.6 return;
1332     }
1333 youi 1.24
1334 aga 1.14 if (!PZVAL_IS_REF(zuid)) {
1335     zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
1336     RETURN_LONG(RES_PHP_NONREF);
1337     }
1338 youi 1.24
1339 youi 1.6 string strUname( uname, unameLen );
1340     result_t result = getUid( strUname.c_str(), &uid );
1341 aga 1.14 ZVAL_LONG(zuid, (long)uid);
1342     RETURN_LONG((long)result);
1343 aga 1.2 }
1344    
1345 youi 1.21 ZEND_FUNCTION(xnp_test_criteria)
1346 aga 1.2 {
1347     zval *z;
1348 youi 1.24
1349     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1350 aga 1.2 &z) == FAILURE) {
1351     return;
1352     }
1353     zend_printf("zend_printf...<br>\n");
1354     zCriteria_t zcri(z);
1355     zcri.dump();
1356     RETURN_FALSE
1357     }
1358    
1359 youi 1.21 ZEND_FUNCTION(xnp_test_uids)
1360 aga 1.2 {
1361     zval *z;
1362 youi 1.24
1363     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1364 aga 1.2 &z) == FAILURE) {
1365     return;
1366     }
1367     zend_printf("zend_printf...<br>\n");
1368     zUIDs_t zuids(z);
1369     zuids.dump();
1370     RETURN_FALSE
1371     }
1372    
1373    
1374    
1375 aga 1.4 /** DB??・膓????????≪??・膓?筝???・膓???????????????<br>
1376 aga 1.31 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix, int dbtype]]]] );
1377 youi 1.24 @param host ?ョ????????ユ????ULL
1378     @param user DB?ョ????????若?九???????ユ????ULL
1379     @param password DB?ョ????????鴻???若???????ユ????ULL
1380     @param dbname DB?ョ?????B???????ユ????quot;"
1381     @param prefix XOOPS DB ??refix??
1382 aga 1.31 @param dbtype 1=MySQL 2=SQLite??common.h????/span>
1383 youi 1.24 @return 0 success <br>
1384 aga 1.1 */
1385 youi 1.21 ZEND_FUNCTION(xnp_initialize_db)
1386 aga 1.1 {
1387     zval **parameters[5];
1388     char *host;
1389     char *user;
1390 aga 1.2 char *password;
1391     char *dbname;
1392     char *prefix;
1393 aga 1.31 long dbtype;
1394 aga 1.1
1395     /* get the number of arguments */
1396     int argNum = ZEND_NUM_ARGS();
1397     if (argNum > 5)
1398     WRONG_PARAM_COUNT;
1399    
1400     /* argument count is correct, now retrieve arguments */
1401     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
1402     WRONG_PARAM_COUNT;
1403    
1404 aga 1.2 if (argNum < 1) host = NULL;
1405 aga 1.1 else host = getZvalString( parameters[0] );
1406 youi 1.24
1407 aga 1.1 if (argNum < 2) user = NULL;
1408     else user = getZvalString( parameters[1] );
1409 youi 1.24
1410 aga 1.2 if (argNum < 3) password = NULL;
1411     else password = getZvalString( parameters[2] );
1412 youi 1.24
1413 aga 1.2 if (argNum < 4) dbname = "";
1414     else dbname = getZvalString( parameters[3] );
1415 youi 1.24
1416 aga 1.2 if (argNum < 5) prefix = "";
1417     else prefix = getZvalString( parameters[4] );
1418 youi 1.24
1419 aga 1.31 if (argNum < 6) dbtype = DBTYPE_MYSQL;
1420     else dbtype = getZvalInt( parameters[5] );
1421    
1422     result_t result = initializeDB( host, user, password, dbname, prefix, (dbtype_t)dbtype );
1423 youi 1.24
1424 aga 1.2 RETURN_LONG(result);
1425 aga 1.1 }
1426    
1427 aga 1.4 /** ???違?ゃ?潟??????<br>
1428 youi 1.24 int xnp_login_user(string uname, string password, int &session_id)
1429     @param uname ???若?九??(xoops_users.uname)
1430     @param password ???鴻???若??(md5(password)=xoops_users.pass)
1431     @return 0 success
1432 aga 1.4 */
1433 youi 1.21 ZEND_FUNCTION(xnp_login_user)
1434 aga 1.1 {
1435     char *uname;
1436     int unameLen;
1437     char *passwd;
1438     int passwdLen;
1439 youi 1.21 zval *zXNPSessionID;
1440 youi 1.24
1441     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
1442 youi 1.21 &uname, &unameLen, &passwd, &passwdLen, &zXNPSessionID) == FAILURE) {
1443 aga 1.1 return;
1444     }
1445 youi 1.24
1446 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1447 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1448     RETURN_LONG(RES_PHP_NONREF);
1449     }
1450 youi 1.24
1451 youi 1.21 sessionid_t xnpSessionID;
1452     result_t result = loginUser( uname, passwd, &xnpSessionID );
1453 aga 1.14 if ( result == RES_OK )
1454 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1455 aga 1.14 RETURN_LONG((long)result);
1456 aga 1.1 }
1457    
1458 aga 1.4 /** ???違?≪??????????<br>
1459 youi 1.24 void xnp_logout_user(int xnp_session_id)
1460     @param xnp_session_id XNP???祉???激?с??D
1461     @return ????
1462 aga 1.4 */
1463 youi 1.21 ZEND_FUNCTION(xnp_logout_user)
1464 aga 1.1 {
1465 youi 1.21 long xnpSessionID;
1466 youi 1.24
1467 youi 1.21 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &xnpSessionID) == FAILURE) {
1468 aga 1.1 return;
1469     }
1470 youi 1.21 logoutUser( (sessionid_t)xnpSessionID );
1471 youi 1.24
1472     RETURN_NULL();
1473 aga 1.1 }
1474    
1475 youi 1.21 /** XNP???祉???激?с??D 篏???<br>
1476 youi 1.24 int xnp_create_session( string xoops_sess_id, int uid, int &session )
1477     @param xoops_sess_id xoops???祉???激?с??D
1478     @param uid xoops ? uid (xoops_users.uid)
1479     @param session 篏???????XNP??ession??????????紊???/span>
1480     @return 0 ????
1481 aga 1.4 */
1482 youi 1.21 ZEND_FUNCTION(xnp_create_session)
1483 aga 1.2 {
1484     char *xoopsSessionID;
1485     int xoopsSessionIDLen;
1486 aga 1.5 long uid;
1487 youi 1.21 zval *zXNPSessionID;
1488 youi 1.24
1489 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1490 youi 1.21 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zXNPSessionID) == FAILURE) {
1491 aga 1.2 return;
1492     }
1493 youi 1.24
1494 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1495 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1496     RETURN_LONG(RES_PHP_NONREF);
1497     }
1498 youi 1.24
1499 youi 1.21 sessionid_t xnpSessionID = 0;
1500     result_t result = createSession( xoopsSessionID, (userid_t)uid, &xnpSessionID );
1501 aga 1.14 if ( result == RES_OK )
1502 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1503 aga 1.14 RETURN_LONG((long)result);
1504 aga 1.4 }
1505    
1506 youi 1.21 /** XNP ? session ???膣井???宴??緇???<br>
1507 youi 1.24 int xnp_get_session( int xnp_session_id, array session_info )
1508     @param xnp_session_id XNP???祉???激?с??D
1509     @param session_info 腟?????????????????
1510     @return 0 success
1511 aga 1.4 */
1512 youi 1.21 ZEND_FUNCTION(xnp_get_session)
1513 aga 1.4 {
1514 youi 1.21 long xnpSessionID;
1515 aga 1.4 zval *sessionInfo;
1516     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1517 youi 1.21 &xnpSessionID, &sessionInfo) == FAILURE) {
1518 aga 1.4 return;
1519     }
1520     const session_t *session = 0;
1521 youi 1.21 result_t result = getSession( (sessionid_t)xnpSessionID, &session );
1522 aga 1.4 if ( result == RES_OK ){
1523     sessionToZval( session, sessionInfo );
1524 youi 1.19 freeSession( session );
1525 aga 1.4 }
1526 youi 1.24
1527 aga 1.4 RETURN_LONG((long)result);
1528 aga 1.2 }
1529 aga 1.1
1530 aga 1.16 /** ???若?吟??ctivate?倶??????緇?????<br>
1531 youi 1.24 bool xnp_is_activated( int xnp_session_id, int user_id )
1532     @param xnp_session_id XNP???祉???激?с??D
1533     @param user_id xoops_users.uid
1534     @return 0 success
1535 aga 1.5 */
1536 youi 1.21 ZEND_FUNCTION(xnp_is_activated)
1537 aga 1.2 {
1538     long sid, uid;
1539 youi 1.24
1540 aga 1.5 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1541 aga 1.2 return;
1542     }
1543 youi 1.24
1544 aga 1.2 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1545 youi 1.24
1546     RETURN_BOOL(result);
1547 aga 1.2 }
1548 aga 1.1
1549 youi 1.17 /** activate??????<br>
1550 youi 1.24 bool xnp_activate( int xnp_session_id, int user_id, bool activated )
1551     @param xnp_session_id xnp ? session id
1552     @param user_id xoops_users.uid
1553     @param activated true:activate, false:inactivate
1554     @return 0 success
1555 aga 1.5 */
1556 youi 1.21 ZEND_FUNCTION(xnp_activate)
1557 aga 1.2 {
1558     long sid, uid;
1559     bool activated;
1560 youi 1.24
1561 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1562     &sid, &uid, &activated) == FAILURE) {
1563     return;
1564     }
1565 youi 1.24
1566 aga 1.2 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1567 youi 1.24
1568     RETURN_LONG(result);
1569 aga 1.2 }
1570 aga 1.1
1571 youi 1.21 /** XNP???≪?????潟???違??緇?????<br>
1572 youi 1.24 int xnp_get_account_count( int xnp_session_id )
1573     @param xnp_session_id XNP???祉???激?с??D
1574     @return 0 success
1575 aga 1.5 */
1576 youi 1.21 ZEND_FUNCTION(xnp_get_account_count)
1577 aga 1.2 {
1578     long sid;
1579 youi 1.24
1580 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1581     &sid) == FAILURE) {
1582     return;
1583     }
1584 youi 1.24
1585 aga 1.2 long count = getAccountCount( (sessionid_t)sid );
1586 youi 1.24 RETURN_LONG(count);
1587 aga 1.2 }
1588 aga 1.1
1589 aga 1.5 /** ?≪?????潟???????ゃ??????<br>
1590 youi 1.24 bool xnp_delete_account( int xnp_session_id, int user_id )
1591     @param xnp_session_id XNP???祉???激?с??D
1592     @param user_id xoops_users.uid
1593     @return 0 success
1594 aga 1.5 */
1595 youi 1.21 ZEND_FUNCTION(xnp_delete_account)
1596 aga 1.2 {
1597     long sid, uid;
1598 youi 1.24
1599 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1600     &sid, &uid) == FAILURE) {
1601     return;
1602     }
1603 youi 1.24
1604 aga 1.2 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1605 youi 1.24
1606     RETURN_LONG(result);
1607 aga 1.2 }
1608 aga 1.1
1609 aga 1.5 /** ?≪?????潟?????宴??緇?????<br>
1610 youi 1.24 int xnp_get_account( int xnp_session_id, int user_id, array account_info )
1611     @param xnp_session_id XNP???祉???激?с??D
1612     @param user_id xoops_users.uid
1613     @param account_info ?≪?????潟?????宴???????????f?渇????
1614     @return 0 success
1615 aga 1.5 */
1616 youi 1.21 ZEND_FUNCTION(xnp_get_account)
1617 aga 1.2 {
1618     long sid, uid;
1619     zval *zaccount;
1620 youi 1.24
1621 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1622     &sid, &uid, &zaccount) == FAILURE) {
1623 youi 1.24 fprintf( stderr, "error occured " );
1624 aga 1.2 return;
1625     }
1626 youi 1.24
1627 aga 1.2 const account_t *paccount;
1628     result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1629     if ( RES_OK == result ){
1630     accountToZval( paccount, zaccount );
1631 youi 1.19 freeAccount( paccount );
1632 aga 1.2 }
1633 youi 1.24
1634     RETURN_LONG(result);
1635 aga 1.2 }
1636 aga 1.1
1637 aga 1.5 /** ?>散????眼?????≪?????潟???????宴??緇?????<br>
1638 youi 1.24 int xnp_get_accoutns( int sid, array uids, array criteria, array accounts );
1639     @param xnp_session_id XNP???祉???激?с??D
1640     @param user_id xoops_users.uid
1641     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1642     @param account_info ?≪?????潟?????宴???????????f?渇????
1643     @return 0 success
1644 aga 1.5 */
1645 youi 1.21 ZEND_FUNCTION(xnp_get_accounts)
1646 aga 1.2 {
1647     result_t result;
1648     long sid;
1649     zval *zuids;
1650     zval *zcriteria;
1651     zval *zaccount;
1652 youi 1.24
1653 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1654     &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1655     return;
1656     }
1657 youi 1.24
1658 aga 1.2 zCriteria_t zcri(zcriteria);
1659     result = zcri.getResult();
1660     if ( RES_OK == result ){
1661     zUIDs_t zUIDs(zuids);
1662     result = zUIDs.getResult();
1663     if ( RES_OK == result ){
1664     const account_t *paccounts;
1665     int accountLen;
1666 youi 1.24 result = getAccounts( (sessionid_t)sid,
1667 aga 1.2 zUIDs.getPUID(), zUIDs.getLen(),
1668     &zcri, &paccounts, &accountLen );
1669     if ( RES_OK == result ){
1670     accountsToZval( paccounts, accountLen, zaccount );
1671 youi 1.19 freeAccount( paccounts );
1672 aga 1.2 }
1673     }
1674     }
1675 youi 1.24
1676     RETURN_LONG(result);
1677 aga 1.2 }
1678 aga 1.1
1679 youi 1.17 /** ?≪?????潟?????宴??荐??蚊??????<br>
1680 youi 1.24 int xnp_insert_account( int sid, array account_info, int &user_id );
1681     @param xnp_session_id xnp ? session id
1682     @param account_info 荐??蚊???????≪?????潟????????/span>
1683     @param user_id ???若??D(xoops_users.uid)???吾??莨若???????<???潟??/span>
1684     @return 0 success
1685 aga 1.5 */
1686 youi 1.21 ZEND_FUNCTION(xnp_insert_account)
1687 aga 1.2 {
1688     result_t result;
1689     long sid;
1690     zval *zaccount;
1691 youi 1.17 zval *zuid;
1692 youi 1.24 userid_t uid;
1693    
1694 youi 1.17 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1695     &sid, &zaccount, &zuid) == FAILURE) {
1696 aga 1.2 return;
1697     }
1698 youi 1.24
1699 aga 1.2 zAccount_t zacc(zaccount);
1700     result = zacc.getResult();
1701     if ( RES_OK == result ){
1702 youi 1.17 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1703 aga 1.2 }
1704 youi 1.24 zuid -> type = IS_LONG;
1705     zuid -> value.lval = uid;
1706     RETURN_LONG(result);
1707 aga 1.2 }
1708 aga 1.1
1709 aga 1.5 /** ?≪?????潟?????宴???贋?違??????<br>
1710 youi 1.24 int xnp_update_account( int sid, array account );
1711     @param xnp_session_id XNP???祉???激?с??D
1712     @param account_info ?吾??莨若???鴻???≪?????潟?????宴??茵????f?渇????
1713     @return 0 success
1714 aga 1.5 */
1715 youi 1.21 ZEND_FUNCTION(xnp_update_account)
1716 aga 1.2 {
1717     result_t result;
1718     long sid;
1719     zval *zaccount;
1720 youi 1.24
1721 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1722     &sid, &zaccount) == FAILURE) {
1723     return;
1724     }
1725 youi 1.24
1726 aga 1.2 zAccount_t zacc(zaccount);
1727     result = zacc.getResult();
1728     if ( RES_OK == result ){
1729     result = updateAccount( (sessionid_t)sid, &zacc );
1730     }
1731 youi 1.24
1732     RETURN_LONG(result);
1733 aga 1.2 }
1734 aga 1.1
1735 aga 1.5 /** ?>散???????≪?????潟????id???荀с??緇?????<br>
1736 youi 1.24 int xnp_dump_uids( int xnp_session_id, array criteria, array uids );
1737     @param xnp_session_id XNP???祉???激?с??D
1738     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1739     @param uids uid??????????????
1740     @return 0 success
1741 aga 1.5 */
1742 youi 1.21 ZEND_FUNCTION(xnp_dump_uids)
1743 aga 1.2 {
1744     result_t result;
1745     long sid;
1746     zval *zcriteria;
1747     zval *zuids;
1748 youi 1.24
1749 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1750     &sid, &zcriteria, &zuids) == FAILURE) {
1751     return;
1752     }
1753 youi 1.24
1754 aga 1.2 zCriteria_t zcri(zcriteria);
1755     result = zcri.getResult();
1756     if ( RES_OK == result ){
1757     userid_t *puid;
1758     int uidLen;
1759     result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1760     if ( RES_OK == result ){
1761     uidsToZval( puid, uidLen, &zuids );
1762 youi 1.19 freeUID( puid );
1763 aga 1.2 }
1764     }
1765 youi 1.24
1766     RETURN_LONG(result);
1767 aga 1.2 }
1768 aga 1.1
1769 youi 1.21 /** XNP???違???若?????違??緇???<br>
1770 youi 1.24 int xnp_get_group_count( int xnp_session_id );
1771     @param xnp_session_id XNP???祉???激?с??D
1772     @return ?違???若????/span>
1773 aga 1.5 */
1774 youi 1.21 ZEND_FUNCTION(xnp_get_group_count)
1775 aga 1.1 {
1776 aga 1.2 long sid;
1777 youi 1.24
1778 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1779     &sid) == FAILURE) {
1780     return;
1781     }
1782 youi 1.24
1783 aga 1.2 int count = getGroupCount( (sessionid_t)sid );
1784 youi 1.24
1785     RETURN_LONG(count);
1786 aga 1.2 }
1787 aga 1.1
1788 aga 1.5 /** uid?ф??絎????????若?吟??絮????違???若???с?????ゆ?>散????眼?????違???若????id??緇???<br>
1789 youi 1.24 int xnp_get_group_by_uid( int xnp_session_id, int uid, array criteria, array gids );
1790     @param xnp_session_id XNP???祉???激?с??D
1791     @param user_id xoops_users.uid
1792     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1793     @param gids gid??????????????
1794     @return 0 success
1795 aga 1.5 */
1796 youi 1.21 ZEND_FUNCTION(xnp_get_groups_by_uid)
1797 aga 1.2 {
1798     result_t result;
1799     long sid, uid;
1800     zval *zcriteria;
1801     zval *zgids;
1802 youi 1.24
1803 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1804     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1805     return;
1806 aga 1.1 }
1807 youi 1.24
1808 aga 1.2 zCriteria_t zcri(zcriteria);
1809     result = zcri.getResult();
1810     if ( RES_OK == result ){
1811     groupid_t *pgids;
1812     int gidLen;
1813     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1814     if ( RES_OK == result ){
1815     gidsToZval( pgids, gidLen, &zgids );
1816 youi 1.19 freeGID( pgids );
1817 aga 1.2 }
1818 aga 1.1 }
1819 youi 1.24
1820     RETURN_LONG(result);
1821 aga 1.2 }
1822    
1823    
1824 aga 1.5
1825     /** uid?ф??絎????????若?吟??gid?ф??絎??????違???若?????違???若??膊∞??????????????緇???<br>
1826 youi 1.24 int xnp_is_group_admin( int sid, int gid, int uid );
1827     @param xnp_session_id XNP???祉???激?с??D
1828     @param group_id XNP???違???若??ID
1829     @param user_id xoops_users.uid
1830     @return true: ?違???若??膊∞?????с??????
1831     @return false: ?違???若??膊∞?????с???????????????????若?с??????
1832 aga 1.5 */
1833 youi 1.21 ZEND_FUNCTION(xnp_is_group_admin)
1834 aga 1.2 {
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    
2384     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2385     &sid, &iid, &op) == FAILURE) {
2386     fprintf( stderr, "error occured " );
2387     return;
2388     }
2389     RETURN_BOOL( getItemPermission( (sessionid_t)sid, iid, op ) );
2390 youi 1.24 }
2391    
2392    
2393     /**
2394     *
2395     * ?ゃ?潟???????鴻?吾???≪???祉?号┤???????с????????
2396     *
2397     * @refer indexop_t
2398     * @param sid ?祉???激?с??D
2399     * @param xid ???с?????莟<???????ゃ?潟???????鴻??D
2400     * @param op ?≪???祉?鴻??┏蕁?
2401     * @return true 罔???????
2402     * @return false 罔???????
2403     *
2404     */
2405     ZEND_FUNCTION(xnp_get_index_permission)
2406     {
2407 youi 1.27 long sid;
2408     indexid_t xid;
2409     long op;
2410    
2411     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2412     &sid, &xid, &op) == FAILURE) {
2413     fprintf( stderr, "error occured " );
2414     return;
2415     }
2416     RETURN_BOOL( getIndexPermission( (sessionid_t)sid, xid, op ) );
2417 youi 1.24 }
2418    
2419    
2420     /**
2421     *
2422     * ?≪?ゃ???????粋??倶????紊??眼????罔????????<??茯帥?鴻?障??鐚?/span>
2423     * @refer certify_t
2424     * @param sid ?祉???激?с??D
2425     * @param xid 紊??翫?莟<?≪?ゃ???????脂?蚊???????????ゃ?潟???????鴻??D
2426     * @param iid 紊??翫?莟<?≪?ゃ??????D
2427     * @param state ?違???鎀??眼???????粋??倶??
2428     * @return true 罔???????
2429     * @return false 罔???????
2430     *
2431     */
2432     ZEND_FUNCTION(xnp_get_certify_permission)
2433     {
2434 youi 1.27 long sid;
2435     itemid_t iid;
2436     indexid_t xid;
2437     certify_t state;
2438    
2439     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2440     &sid, &xid, &iid, &state) == FAILURE) {
2441     fprintf( stderr, "error occured " );
2442