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.37 - (hide annotations) (download) (as text)
Sat Feb 26 05:11:31 2005 UTC (19 years, 1 month ago) by tani
Branch: MAIN
Changes since 1.36: +41 -1 lines
File MIME type: text/x-c++src
getGroupItemIDトノイテ.

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