Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/xnpal.cc

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


Revision 1.37 - (show 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 /*
2 $Revision: 1.36 $
3 XNPAL: XooNiPs Platform Abstract Layer
4
5 zend_parse_parameters縺ッphp4.1.0縺悟ソ?ヲ?/span>
6 .so繝輔ぃ繧、繝ォ縺ッ螟悶°繧芽ヲ九∴縺ェ縺??エ謇?縺ォ鄂ョ縺上∋縺阪??/span>
7 C++縺ァ縺ッ縲‘xtern "C"{}, BEGIN/END_EXTERN_C()縺悟ソ?ヲ√??/span>
8 */
9
10
11 #include <stdio.h>
12 #include "criteria.h"
13 #include "common.h"
14 #include "commonal.h"
15 #include "session.h"
16 #include "group.h"
17 #include "index.h"
18 #include "xnpal.h"
19 #include "amazonbook.h"
20
21 // for inet_aton
22 #include <sys/socket.h>
23 #include <netinet/in.h>
24 #include <arpa/inet.h>
25
26 // global variables
27
28 PHP_MSHUTDOWN_FUNCTION(xnpalmod)
29 {
30 uninitializeDB();
31 return SUCCESS;
32 }
33
34 /* declaration of functions to be exported */
35 extern "C" {
36 ZEND_FUNCTION(first_module );
37 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
67 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 ZEND_FUNCTION(xnp_is_valid_session_id );
78 ZEND_FUNCTION(xnp_get_last_error_string );
79
80 ZEND_FUNCTION(xnp_test_criteria );
81 ZEND_FUNCTION(xnp_test_uids );
82
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 ZEND_FUNCTION(xnp_get_uncertified_link );
120 ZEND_FUNCTION(xnp_get_private_item_id );
121 ZEND_FUNCTION(xnp_get_group_item_id );
122
123 ZEND_FUNCTION(xnp_get_item_types );
124 ZEND_FUNCTION(xnp_get_index_id_by_item_id );
125 ZEND_FUNCTION(xnp_get_own_public_item_id );
126
127 ZEND_FUNCTION(xnp_zip_create );
128 ZEND_FUNCTION(xnp_get_item_count );
129 };
130 /* compiled function list so Zend knows what's in this module */
131 zend_function_entry xnpalmod_functions[] =
132 {
133 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 ZEND_FE(xnp_get_uncertified_link ,NULL)
215 ZEND_FE(xnp_get_private_item_id ,NULL)
216 ZEND_FE(xnp_get_group_item_id ,NULL)
217
218 ZEND_FE(xnp_get_item_types ,NULL)
219
220 ZEND_FE(xnp_get_index_id_by_item_id ,NULL)
221 ZEND_FE(xnp_get_own_public_item_id ,NULL)
222
223 ZEND_FE(xnp_zip_create ,NULL)
224 ZEND_FE(xnp_get_item_count ,NULL)
225
226 {NULL, NULL, NULL}
227 };
228
229 /* compiled module information */
230 zend_module_entry xnpalmod_module_entry =
231 {
232 STANDARD_MODULE_HEADER,
233 "Visiome Platform Abstract Layer",
234 xnpalmod_functions,
235 NULL,
236 PHP_MSHUTDOWN(xnpalmod),
237 NULL,
238 NULL,
239 NULL,
240 NO_VERSION_YET,
241 STANDARD_MODULE_PROPERTIES
242 };
243
244 /* implement standard "stub" routine to introduce ourselves to Zend */
245 #if COMPILE_DL_FIRST_MODULE
246 BEGIN_EXTERN_C()
247 ZEND_GET_MODULE(xnpalmod)
248 END_EXTERN_C()
249 #endif
250
251
252 /* implement function that is meant to be made available to PHP */
253 ZEND_FUNCTION(first_module)
254 {
255 long parameter;
256 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
257 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
258 return;
259 }
260 parameter++;
261 RETURN_LONG(parameter);
262 }
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 // 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 /** zval*縺九icriteria_t繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲ら函謌仙、ア謨励↑繧曳etResult()!=RES_OK <br>
293 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 */
300 class zCriteria_t : public criteria {
301 private:
302 result_t result;
303
304 // 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
310 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 //print_hash_key( keyType, key, keyLen, index );
321 if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
322 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
333 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
340 result = RES_OK;
341 }
342
343 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
344 void setOrders( zval *pz ){
345 HashPosition pos;
346
347 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
348
349 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 //print_hash_key( keyType, key, keyLen, index );
358 setOrder( *ppzTmp );
359 }
360 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
361 }
362 result = RES_OK;
363 }
364
365 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 //print_hash_key( keyType, key, keyLen, index );
377 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
402 public:
403 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
408 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
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 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 }
436
437 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※譁?ュ怜?繧貞セ励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 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 }
452
453 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※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 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 }
468
469 /** zval*縺九iaccount繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
470 逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
471 */
472 class zAccount_t : public account {
473 private:
474 result_t result;
475 void initialize(zval *pz){
476 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 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
514 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
515 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
516 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 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
522 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
526 result = RES_OK;
527 }
528 public:
529 zAccount_t() : account(){ result = RES_ERROR; }
530
531 /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
532 @param pz array( 'uid'=>1, 'uname'=>'root', ... ); 縺薙s縺ェ蠖「縺ョ騾」諠ウ驟榊? */
533 zAccount_t( zval *pz ) : account(){ initialize(pz); }
534 zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
535 result_t getResult(){ return result; };
536 };
537
538 class zIndex_t : public index {
539 private:
540 result_t result;
541
542 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
568 void dump(){
569 }
570 };
571
572 /** zval*縺九i(userid_t *puid,int uidLen)繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
573 逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
574 */
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
587 /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
588 @param pza array( '1', '3', '4', '6', ... ); 縺薙s縺ェ蠖「縺ョ驟榊? */
589 zUIDs_t( zval *pza ){
590 pUID = 0;
591 len = 0;
592 result = RES_ERROR;
593
594 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
612 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
626 ~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 zend_printf( "dumping zUIDs...<br>\n" );
634 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 /** 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 result_t itemidsToZval( const itemid_t *piid, int len, zval **ppz )
769 {
770 zend_hash_clean( Z_ARRVAL_PP(ppz) );
771
772 // 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 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 /**
802 *
803 * uids_t縺ョ驟榊?繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
804 *
805 * @param pUID 螟画鋤蜈??userid_t縺ョ驟榊?
806 * @param len pUID縺ョ驟榊?縺ョ髟キ縺?/span>
807 * @param pz 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
808 * @return RES_OK
809 *
810 */
811 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
812 {
813 zend_hash_clean( Z_ARRVAL_PP(ppz) );
814
815 // add UIDs
816 for ( int i = 0; i < len; i++ ){
817 add_next_index_long(*ppz, (long)(pUID[i]) );
818 }
819
820 return RES_OK;
821 }
822
823 /**
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 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
833 {
834 zend_hash_clean( Z_ARRVAL_PP(ppz) );
835
836 // add GIDs
837 for ( int i = 0; i < len; i++ ){
838 add_next_index_long(*ppz, (long)(pGID[i]) );
839 }
840
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 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
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 return RES_OK;
906 }
907
908 /**
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 }
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 }
982 return RES_OK;
983 }
984
985 /**
986 *
987 * account_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
988 * @param pAccount 螟画鋤蜈??account_t*
989 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
990 * @return RES_OK
991 *
992 */
993 result_t accountToZval( const account_t *pAccount, zval *z )
994 {
995 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 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 return RES_OK;
1044 }
1045
1046 /**
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 array(
1056 array(
1057 'uid'=>100,
1058 'activate'=>1,
1059 'division'=>'foo',
1060 'tel'=>'123-456-789',
1061 ...
1062 ),
1063 ...
1064 )
1065 */
1066 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1067 {
1068 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 return RES_OK;
1079 }
1080
1081 /**
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 array(
1091 array(
1092 'gid'=>1,
1093 'gname'=>'foo group',
1094 'gdesc'=>'group of foo'
1095 ),
1096 ...
1097 )
1098 */
1099 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1100 {
1101 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 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 }
1117 return RES_OK;
1118 }
1119
1120 /**
1121 *
1122 * group_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
1123 *
1124 * @param pGroup 螟画鋤蜈??繧ー繝ォ繝シ繝玲ュ蝣ア
1125 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
1126 * @return RES_OK
1127 *
1128 */
1129 result_t groupToZval( const group_t *pGroup, zval *z )
1130 {
1131 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 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 return RES_OK;
1140 }
1141
1142 /**
1143 *
1144 * PHP縺ョ騾」諠ウ驟榊?縺ョ蜀?ョケ繧暖roup_t縺ォ螟画鋤縺吶k
1145 *
1146 * @param z 螟画鋤蜈??騾」諠ウ驟榊?
1147 * @param pGroup 螟画鋤邨先棡繧呈嶌縺崎セシ繧?繧ー繝ォ繝シ繝?/span>
1148 * @return RES_OK
1149 *
1150 */
1151 result_t zvalToGroup( zval *z, group_t *pGroup )
1152 {
1153 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 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 return RES_OK;
1192 }
1193
1194 /**
1195 *
1196 * session_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
1197 *
1198 * @param pSession 螟画鋤蜈??session_t
1199 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
1200 * @return RES_OK
1201 *
1202 */
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
1208 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1209 add_assoc_string(z, "date", (char *)date.c_str(), 1);
1210
1211 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1212 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1213
1214 return RES_OK;
1215 }
1216
1217 /**
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 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 return RES_OK;
1243 }
1244
1245 result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1246 {
1247 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 return RES_OK;
1258 }
1259
1260
1261
1262
1263 /** 謖?ョ壹@縺溘げ繝ォ繝シ繝励?諠??ア繧貞セ励k<br>
1264 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 */
1270 ZEND_FUNCTION(xnp_get_group)
1271 {
1272 long sid, gid;
1273 zval *zgroup;
1274
1275 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1276 &sid, &gid, &zgroup) == FAILURE) {
1277 return;
1278 }
1279
1280 const group_t *pgroup;
1281 result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1282 if ( RES_OK == result ){
1283 groupToZval( pgroup, zgroup );
1284 freeGroup( pgroup );
1285 }
1286
1287 RETURN_LONG(result);
1288 }
1289
1290
1291 /** 謖?ョ壹@縺溘げ繝ォ繝シ繝?隍?焚)縺ョ諠??ア繧貞セ励k<br>
1292 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 */
1299 ZEND_FUNCTION(xnp_get_groups)
1300 {
1301 result_t result;
1302 long sid;
1303 zval *zcriteria;
1304 zval *zgids;
1305 zval *zgroups;
1306 zval **ppzTmp = 0;
1307 HashPosition pos;
1308 int res2;
1309 int gidsLen;
1310 const group_t* groups;
1311 int groupsLen;
1312
1313 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1314 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1315 return;
1316 }
1317
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 zCriteria_t zcri(zcriteria);
1332 result = zcri.getResult();
1333 if ( RES_OK == result ){
1334 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 }
1343
1344
1345 /** 謖?ョ壹@縺溘Θ繝シ繧カ縺後Δ繝?Ξ繝シ繧ソ縺九←縺?°繧定ェソ縺ケ繧?lt;br>
1346 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 */
1351 ZEND_FUNCTION(xnp_is_moderator)
1352 {
1353 long xnpSessionID;
1354 userid_t uid;
1355
1356 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1357 &xnpSessionID, &uid) == FAILURE) {
1358 return;
1359 }
1360
1361 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1362 RETURN_BOOL(result)
1363 }
1364
1365 /** 繝ヲ繝シ繧カ蜷阪°繧疫id繧定ェソ縺ケ繧?lt;br>
1366 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 */
1372 ZEND_FUNCTION(xnp_get_uid)
1373 {
1374 char *uname;
1375 int unameLen;
1376 zval *zuid;
1377 userid_t uid;
1378
1379 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1380 &uname, &unameLen, &zuid) == FAILURE) {
1381 return;
1382 }
1383
1384 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
1389 string strUname( uname, unameLen );
1390 result_t result = getUid( strUname.c_str(), &uid );
1391 ZVAL_LONG(zuid, (long)uid);
1392 RETURN_LONG((long)result);
1393 }
1394
1395 ZEND_FUNCTION(xnp_test_criteria)
1396 {
1397 zval *z;
1398
1399 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1400 &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 ZEND_FUNCTION(xnp_test_uids)
1410 {
1411 zval *z;
1412
1413 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1414 &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 /** DB縺ォ謗・邯壹☆繧九?よ里縺ォ謗・邯壻クュ縺ョ謗・邯壹?髢峨§繧峨l繧九??lt;br>
1426 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix, int dbtype]]]] );
1427 @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 @param dbtype 1=MySQL 2=SQLite縲Dommon.h蜿ら?
1433 @return 0 success <br>
1434 */
1435 ZEND_FUNCTION(xnp_initialize_db)
1436 {
1437 zval **parameters[5];
1438 char *host;
1439 char *user;
1440 char *password;
1441 char *dbname;
1442 char *prefix;
1443 long dbtype;
1444
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 if (argNum < 1) host = NULL;
1455 else host = getZvalString( parameters[0] );
1456
1457 if (argNum < 2) user = NULL;
1458 else user = getZvalString( parameters[1] );
1459
1460 if (argNum < 3) password = NULL;
1461 else password = getZvalString( parameters[2] );
1462
1463 if (argNum < 4) dbname = "";
1464 else dbname = getZvalString( parameters[3] );
1465
1466 if (argNum < 5) prefix = "";
1467 else prefix = getZvalString( parameters[4] );
1468
1469 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
1474 RETURN_LONG(result);
1475 }
1476
1477 /** 繝ュ繧ー繧、繝ウ縺吶k縲?lt;br>
1478 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 */
1483 ZEND_FUNCTION(xnp_login_user)
1484 {
1485 char *uname;
1486 int unameLen;
1487 char *passwd;
1488 int passwdLen;
1489 zval *zXNPSessionID;
1490
1491 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
1492 &uname, &unameLen, &passwd, &passwdLen, &zXNPSessionID) == FAILURE) {
1493 return;
1494 }
1495
1496 if (!PZVAL_IS_REF(zXNPSessionID)) {
1497 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1498 RETURN_LONG(RES_PHP_NONREF);
1499 }
1500
1501 sessionid_t xnpSessionID;
1502 result_t result = loginUser( uname, passwd, &xnpSessionID );
1503 if ( result == RES_OK )
1504 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1505 RETURN_LONG((long)result);
1506 }
1507
1508 /** 繝ュ繧ー繧「繧ヲ繝医☆繧九??lt;br>
1509 void xnp_logout_user(int xnp_session_id)
1510 @param xnp_session_id XNP縺ョ繧サ繝?す繝ァ繝ウID
1511 @return 縺ェ縺?/span>
1512 */
1513 ZEND_FUNCTION(xnp_logout_user)
1514 {
1515 long xnpSessionID;
1516
1517 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &xnpSessionID) == FAILURE) {
1518 return;
1519 }
1520 logoutUser( (sessionid_t)xnpSessionID );
1521
1522 RETURN_NULL();
1523 }
1524
1525 /** XNP縺ョ繧サ繝?す繝ァ繝ウID 菴懈?<br>
1526 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 */
1532 ZEND_FUNCTION(xnp_create_session)
1533 {
1534 char *xoopsSessionID;
1535 int xoopsSessionIDLen;
1536 long uid;
1537 zval *zXNPSessionID;
1538
1539 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1540 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zXNPSessionID) == FAILURE) {
1541 return;
1542 }
1543
1544 if (!PZVAL_IS_REF(zXNPSessionID)) {
1545 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1546 RETURN_LONG(RES_PHP_NONREF);
1547 }
1548
1549 sessionid_t xnpSessionID = 0;
1550 result_t result = createSession( xoopsSessionID, (userid_t)uid, &xnpSessionID );
1551 if ( result == RES_OK )
1552 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1553 RETURN_LONG((long)result);
1554 }
1555
1556 /** XNP 縺ョ session 縺ョ隧ウ邏ー諠??ア繧貞セ励k<br>
1557 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 */
1562 ZEND_FUNCTION(xnp_get_session)
1563 {
1564 long xnpSessionID;
1565 zval *sessionInfo;
1566 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1567 &xnpSessionID, &sessionInfo) == FAILURE) {
1568 return;
1569 }
1570 const session_t *session = 0;
1571 result_t result = getSession( (sessionid_t)xnpSessionID, &session );
1572 if ( result == RES_OK ){
1573 sessionToZval( session, sessionInfo );
1574 freeSession( session );
1575 }
1576
1577 RETURN_LONG((long)result);
1578 }
1579
1580 /** 繝ヲ繝シ繧カ縺ョactivate迥カ諷九r蜿門セ励☆繧?lt;br>
1581 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 */
1586 ZEND_FUNCTION(xnp_is_activated)
1587 {
1588 long sid, uid;
1589
1590 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1591 return;
1592 }
1593
1594 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1595
1596 RETURN_BOOL(result);
1597 }
1598
1599 /** activate縺吶k縲?lt;br>
1600 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 */
1606 ZEND_FUNCTION(xnp_activate)
1607 {
1608 long sid, uid;
1609 bool activated;
1610
1611 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1612 &sid, &uid, &activated) == FAILURE) {
1613 return;
1614 }
1615
1616 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1617
1618 RETURN_LONG(result);
1619 }
1620
1621 /** XNP縺ョ繧「繧ォ繧ヲ繝ウ繝域焚繧貞セ励k縲?lt;br>
1622 int xnp_get_account_count( int xnp_session_id )
1623 @param xnp_session_id XNP縺ョ繧サ繝?す繝ァ繝ウID
1624 @return 0 success
1625 */
1626 ZEND_FUNCTION(xnp_get_account_count)
1627 {
1628 long sid;
1629
1630 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1631 &sid) == FAILURE) {
1632 return;
1633 }
1634
1635 long count = getAccountCount( (sessionid_t)sid );
1636 RETURN_LONG(count);
1637 }
1638
1639 /** 繧「繧ォ繧ヲ繝ウ繝医r蜑企勁縺吶k縲?lt;br>
1640 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 */
1645 ZEND_FUNCTION(xnp_delete_account)
1646 {
1647 long sid, uid;
1648
1649 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1650 &sid, &uid) == FAILURE) {
1651 return;
1652 }
1653
1654 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1655
1656 RETURN_LONG(result);
1657 }
1658
1659 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞セ励k縲?lt;br>
1660 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 */
1666 ZEND_FUNCTION(xnp_get_account)
1667 {
1668 long sid, uid;
1669 zval *zaccount;
1670
1671 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1672 &sid, &uid, &zaccount) == FAILURE) {
1673 fprintf( stderr, "error occured " );
1674 return;
1675 }
1676
1677 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 freeAccount( paccount );
1682 }
1683
1684 RETURN_LONG(result);
1685 }
1686
1687 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧「繧ォ繧ヲ繝ウ繝医?諠??ア繧貞セ励k縲?lt;br>
1688 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 */
1695 ZEND_FUNCTION(xnp_get_accounts)
1696 {
1697 result_t result;
1698 long sid;
1699 zval *zuids;
1700 zval *zcriteria;
1701 zval *zaccount;
1702
1703 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1704 &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1705 return;
1706 }
1707
1708 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 result = getAccounts( (sessionid_t)sid,
1717 zUIDs.getPUID(), zUIDs.getLen(),
1718 &zcri, &paccounts, &accountLen );
1719 if ( RES_OK == result ){
1720 accountsToZval( paccounts, accountLen, zaccount );
1721 freeAccount( paccounts );
1722 }
1723 }
1724 }
1725
1726 RETURN_LONG(result);
1727 }
1728
1729 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定ィ倬鹸縺吶k縲?lt;br>
1730 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 */
1736 ZEND_FUNCTION(xnp_insert_account)
1737 {
1738 result_t result;
1739 long sid;
1740 zval *zaccount;
1741 zval *zuid;
1742 userid_t uid;
1743
1744 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1745 &sid, &zaccount, &zuid) == FAILURE) {
1746 return;
1747 }
1748
1749 zAccount_t zacc(zaccount);
1750 result = zacc.getResult();
1751 if ( RES_OK == result ){
1752 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1753 }
1754 zuid -> type = IS_LONG;
1755 zuid -> value.lval = uid;
1756 RETURN_LONG(result);
1757 }
1758
1759 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧呈峩譁ー縺吶k縲?lt;br>
1760 int xnp_update_account( int sid, array account );
1761 @param xnp_session_id XNP縺ョ繧サ繝?す繝ァ繝ウID
1762 @param account_info 譖ク縺崎セシ繧?縺ケ縺阪い繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定。ィ縺咎?」諠ウ驟榊?
1763 @return 0 success
1764 */
1765 ZEND_FUNCTION(xnp_update_account)
1766 {
1767 result_t result;
1768 long sid;
1769 zval *zaccount;
1770
1771 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1772 &sid, &zaccount) == FAILURE) {
1773 return;
1774 }
1775
1776 zAccount_t zacc(zaccount);
1777 result = zacc.getResult();
1778 if ( RES_OK == result ){
1779 result = updateAccount( (sessionid_t)sid, &zacc );
1780 }
1781
1782 RETURN_LONG(result);
1783 }
1784
1785 /** 譚。莉カ縺ォ蜷医≧繧「繧ォ繧ヲ繝ウ繝医?uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1786 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 */
1792 ZEND_FUNCTION(xnp_dump_uids)
1793 {
1794 result_t result;
1795 long sid;
1796 zval *zcriteria;
1797 zval *zuids;
1798
1799 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1800 &sid, &zcriteria, &zuids) == FAILURE) {
1801 return;
1802 }
1803
1804 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 freeUID( puid );
1813 }
1814 }
1815
1816 RETURN_LONG(result);
1817 }
1818
1819 /** XNP縺ョ繧ー繝ォ繝シ繝励?謨ー繧貞セ励k<br>
1820 int xnp_get_group_count( int xnp_session_id );
1821 @param xnp_session_id XNP縺ョ繧サ繝?す繝ァ繝ウID
1822 @return 繧ー繝ォ繝シ繝玲焚
1823 */
1824 ZEND_FUNCTION(xnp_get_group_count)
1825 {
1826 long sid;
1827
1828 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1829 &sid) == FAILURE) {
1830 return;
1831 }
1832
1833 int count = getGroupCount( (sessionid_t)sid );
1834
1835 RETURN_LONG(count);
1836 }
1837
1838 /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺悟ア槭☆繧ー繝ォ繝シ繝励〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid繧貞セ励k<br>
1839 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 */
1846 ZEND_FUNCTION(xnp_get_groups_by_uid)
1847 {
1848 result_t result;
1849 long sid, uid;
1850 zval *zcriteria;
1851 zval *zgids;
1852
1853 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1854 &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1855 return;
1856 }
1857
1858 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 freeGID( pgids );
1867 }
1868 }
1869
1870 RETURN_LONG(result);
1871 }
1872
1873
1874
1875 /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺携id縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?繧ー繝ォ繝シ繝礼ョ。逅???°縺ゥ縺?°繧貞セ励k<br>
1876 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 */
1883 ZEND_FUNCTION(xnp_is_group_admin)
1884 {
1885 long sid, gid, uid;
1886
1887 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1888 &sid, &gid, &uid) == FAILURE) {
1889 return;
1890 }
1891
1892 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1893
1894 RETURN_BOOL(b);
1895 }
1896
1897 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1898 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 */
1904 ZEND_FUNCTION(xnp_dump_gids)
1905 {
1906 result_t result;
1907 long sid;
1908 zval *zcriteria;
1909 zval *zgids;
1910
1911 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1912 &sid, &zcriteria, &zgids) == FAILURE) {
1913 return;
1914 }
1915
1916 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 freeGID( pgid );
1925 }
1926 }
1927
1928 RETURN_LONG(result);
1929 }
1930
1931 /** gid縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?邂。逅???〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝礼ョ。逅????uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1932 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 */
1939
1940 ZEND_FUNCTION(xnp_dump_group_admins)
1941 {
1942 long sid, gid;
1943 zval *zcriteria;
1944 zval *zuids;
1945
1946 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1947 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1948 return;
1949 }
1950
1951 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 freeUID( uids );
1960 }
1961 }
1962 RETURN_LONG( result );
1963 }
1964
1965 /** 繧ー繝ォ繝シ繝励°繧峨Γ繝ウ繝舌?繧貞炎髯、縺吶k縲?lt;br>
1966 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 */
1972
1973 ZEND_FUNCTION(xnp_delete_member)
1974 {
1975 long sid, gid, uid;
1976
1977 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1978 &sid, &gid, &uid) == FAILURE) {
1979 return;
1980 }
1981
1982 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1983 RETURN_LONG( result );
1984 }
1985
1986 /** 繧ー繝ォ繝シ繝励↓繝。繝ウ繝舌?繧定ソス蜉?縺吶k<br>
1987 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 */
1994
1995 ZEND_FUNCTION(xnp_insert_member)
1996 {
1997 long sid, gid, uid;
1998 zend_bool admin;
1999
2000 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
2001 &sid, &gid, &uid, &admin) == FAILURE) {
2002 return;
2003 }
2004
2005 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 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 */
2017
2018 ZEND_FUNCTION(xnp_get_members)
2019 {
2020 long sid, gid;
2021 zval *zcriteria;
2022 zval *zuids;
2023
2024 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2025 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2026 return;
2027 }
2028
2029 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 freeUID( uids );
2038 }
2039 }
2040 RETURN_LONG( result );
2041 }
2042
2043 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞、画峩縺吶k縲?lt;br>
2044 int xnp_update_group(int sid, array group )
2045 @param sid XNP縺ョ繧サ繝?す繝ァ繝ウID
2046 @param group 繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ騾」諠ウ驟榊?
2047 @return 0 success
2048 */
2049 ZEND_FUNCTION(xnp_update_group)
2050 {
2051 long sid;
2052 zval *zgroup;
2053 group_t group;
2054
2055 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2056 &sid, &zgroup) == FAILURE) {
2057 return;
2058 }
2059
2060 zvalToGroup( zgroup, &group );
2061 result_t result = updateGroup( sid, &group );
2062 RETURN_LONG( result );
2063 }
2064
2065 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧定ソス蜉?縺吶k縲?lt;br>
2066 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 */
2075 ZEND_FUNCTION(xnp_insert_group)
2076 {
2077 long sid;
2078 zval *zgroup;
2079 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 return;
2086 }
2087
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 }
2094
2095
2096 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞炎髯、縺吶k縲?lt;br>
2097 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 */
2105 ZEND_FUNCTION(xnp_delete_group)
2106 {
2107 long sid;
2108 long gid;
2109
2110 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2111 &sid, &gid) == FAILURE) {
2112 return;
2113 }
2114 RETURN_LONG( deleteGroup( sid, gid ) );
2115 }
2116
2117 /** 繧ー繝ォ繝シ繝励?邂。逅???r蜿門セ励??lt;br>
2118 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 */
2128 /*
2129 ZEND_FUNCTION(xnp_dump_group_admins)
2130 {
2131 long sid;
2132 long gid;
2133 zval *zcriteria;
2134 zval *zuids;
2135
2136 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2137 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2138 return;
2139 }
2140 zCriteria_t zcri(zcriteria);
2141 result_t result = zcri.getResult();
2142 if ( RES_OK == result ){
2143 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 }
2157 */
2158
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
2171 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2172 &sid, &zcriteria, &zindexes) == FAILURE) {
2173 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
2204 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2205 &sid, &parentXID, &zcriteria, &zindexes) == FAILURE) {
2206 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
2236 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2237 &sid, &zindex, &zIndexID) == FAILURE) {
2238 return;
2239 }
2240
2241 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
2264 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2265 &sid, &zindex) == FAILURE) {
2266 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
2287 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2288 &sid, &xid) == FAILURE) {
2289 return;
2290 }
2291
2292 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
2310 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2311 &sid, &xid, &zindex) == FAILURE) {
2312 return;
2313 }
2314
2315 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
2337 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2338 &sid, &xid) == FAILURE) {
2339 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
2356 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2357 &sid, &xid) == FAILURE) {
2358 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
2375 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2376 &sid, &xid1, &xid2) == FAILURE) {
2377 return;
2378 }
2379
2380 result_t result = swapIndexSortNumber( sid, xid1, xid2 );
2381 RETURN_LONG(result);
2382 }
2383
2384
2385
2386 /** XNP縺ョsession_id縺ョ豁」蠖捺?ァ繝√ぉ繝?け<br>
2387 bool xnp_is_valid_session_id( int xnp_session_id)
2388 @return true 譛牙柑縺ェXNP縺ョsession_id縺ァ縺ゅk<br>
2389 @return false 辟。蜉ケ縺ェsession_id縺セ縺溘?繧ィ繝ゥ繝シ
2390 */
2391 ZEND_FUNCTION(xnp_is_valid_session_id)
2392 {
2393 long sid;
2394 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
2395 return;
2396 }
2397
2398 RETURN_BOOL(isValidSessionID((sessionid_t)sid));
2399 }
2400
2401 /** 繧ィ繝ゥ繝シ譁?ュ怜?繧貞セ励k<br>
2402 string xnp_get_last_error_string()
2403 @return 0 success
2404 */
2405 ZEND_FUNCTION(xnp_get_last_error_string)
2406 {
2407 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
2408 return;
2409 }
2410
2411 string str( getLastErrorString() );
2412 RETURN_STRING((char *)str.c_str(), 1);
2413 }
2414
2415
2416 /**
2417 *
2418 * 繧「繧、繝?Β縺ク縺ョ繧「繧ッ繧サ繧ケ讓ゥ髯舌r繝√ぉ繝?け縺吶k
2419 *
2420 * @refer itemop_t
2421 * @param sid 繧サ繝?す繝ァ繝ウID
2422 * @param iid 繝√ぉ繝?け蟇セ雎。縺ィ縺ェ繧九い繧、繝?Β縺ョID
2423 * @param op 繧「繧ッ繧サ繧ケ縺ョ遞ョ鬘?/span>
2424 * @return true 讓ゥ髯舌≠繧?/span>
2425 * @return false 讓ゥ髯舌↑縺?/span>
2426 *
2427 */
2428 ZEND_FUNCTION(xnp_get_item_permission)
2429 {
2430 long sid;
2431 itemid_t iid;
2432 long op;
2433
2434 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2435 &sid, &iid, &op) == FAILURE) {
2436 fprintf( stderr, "error occured " );
2437 return;
2438 }
2439 RETURN_BOOL( getItemPermission( (sessionid_t)sid, iid, op ) );
2440 }
2441
2442
2443 /**
2444 *
2445 * 繧、繝ウ繝?ャ繧ッ繧ケ縺ク縺ョ繧「繧ッ繧サ繧ケ讓ゥ髯舌r繝√ぉ繝?け縺吶k
2446 *
2447 * @refer indexop_t
2448 * @param sid 繧サ繝?す繝ァ繝ウID
2449 * @param xid 繝√ぉ繝?け蟇セ雎。縺ィ縺ェ繧九う繝ウ繝?ャ繧ッ繧ケ縺ョID
2450 * @param op 繧「繧ッ繧サ繧ケ縺ョ遞ョ鬘?/span>
2451 * @return true 讓ゥ髯舌≠繧?/span>
2452 * @return false 讓ゥ髯舌↑縺?/span>
2453 *
2454 */
2455 ZEND_FUNCTION(xnp_get_index_permission)
2456 {
2457 long sid;
2458 indexid_t xid;
2459 long op;
2460
2461 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2462 &sid, &xid, &op) == FAILURE) {
2463 fprintf( stderr, "error occured " );
2464 return;
2465 }
2466 RETURN_BOOL( getIndexPermission( (sessionid_t)sid, xid, op ) );
2467 }
2468
2469
2470 /**
2471 *
2472 * 繧「繧、繝?Β縺ョ謇ソ隱咲憾諷九r螟画峩縺吶k讓ゥ髯舌?譛臥┌繧定ェソ縺ケ縺セ縺呻シ?/span>
2473 * @refer certify_t
2474 * @param sid 繧サ繝?す繝ァ繝ウID
2475 * @param xid 螟画峩蟇セ雎。繧「繧、繝?Β縺檎匳骭イ縺輔l縺ヲ縺?k繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
2476 * @param iid 螟画峩蟇セ雎。繧「繧、繝?Β縺ョID
2477 * @param state 譁ー縺励¥螟画峩縺励◆縺?価隱咲憾諷?/span>
2478 * @return true 讓ゥ髯舌≠繧?/span>
2479 * @return false 讓ゥ髯舌↑縺?/span>
2480 *
2481 */
2482 ZEND_FUNCTION(xnp_get_certify_permission)
2483 {
2484 long sid;
2485 itemid_t iid;
2486 indexid_t xid;
2487 certify_t state;
2488
2489 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2490 &sid, &xid, &iid, &state) == FAILURE) {
2491 fprintf( stderr, "error occured " );
2492 return;
2493 }
2494 RETURN_BOOL( getCertifyPermission( (sessionid_t)sid, xid, iid, state ) );
2495 }
2496
2497
2498 /**
2499 *
2500 * 繧「繧、繝?Β縺ョ謇ソ隱咲憾諷九r蜿門セ励@縺セ縺呻シ?/span>
2501 * @refer certify_t
2502 * @param sid 繧サ繝?す繝ァ繝ウID
2503 * @param xid 蟇セ雎。繧「繧、繝?Β縺檎匳骭イ縺輔l縺ヲ縺?k繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
2504 * @param iid 蟇セ雎。繧「繧、繝?Β縺ョID
2505 * @param state 謇ソ隱咲憾諷九r蜿励¢蜿悶k蠑墓焚
2506 * @return RES_OK
2507 * @return RES_NO_WRITE_ACCESS_RIGHT
2508 *
2509 */
2510 ZEND_FUNCTION(xnp_get_certify_state)
2511 {
2512 long sid;
2513 indexid_t xid;
2514 itemid_t iid;
2515 zval *zstate;
2516 result_t result = RES_ERROR;
2517
2518 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllz",
2519 &sid, &xid, &iid, &zstate) == FAILURE) {
2520 fprintf( stderr, "error occured " );
2521 return;
2522 }
2523 certify_t st;
2524 result = getCertifyState( (sessionid_t)sid, xid, iid, &st );
2525 if ( RES_OK == result ){
2526 zstate -> type = IS_LONG;
2527 zstate -> value.lval = st;
2528 }
2529 RETURN_LONG( result );
2530 }
2531
2532
2533 /**
2534 *
2535 * 繧「繧、繝?Β縺ョ謇ソ隱咲憾諷九r螟画峩縺励∪縺呻シ?/span>
2536 * @refer certify_t
2537 * @param sid 繧サ繝?す繝ァ繝ウID
2538 * @param xid 螟画峩蟇セ雎。繧「繧、繝?Β縺檎匳骭イ縺輔l縺ヲ縺?k繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
2539 * @param iid 螟画峩蟇セ雎。繧「繧、繝?Β縺ョID
2540 * @param state 譁ー縺励¥螟画峩縺励◆縺?価隱咲憾諷?/span>
2541 * @return RES_OK
2542 * @return RES_NO_WRITE_ACCESS_RIGHT
2543 *
2544 */
2545 ZEND_FUNCTION(xnp_set_certify_state)
2546 {
2547 long sid;
2548 indexid_t xid;
2549 itemid_t iid;
2550 certify_t state;
2551 result_t result = RES_ERROR;
2552
2553 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2554 &sid, &xid, &iid, &state) == FAILURE) {
2555 fprintf( stderr, "error occured " );
2556 return;
2557 }
2558 result = setCertifyState( (sessionid_t)sid, xid, iid, state );
2559 RETURN_LONG( result );
2560 }
2561
2562
2563 /**
2564 *
2565 * 螟画峩螻・豁エ繝ュ繧ー繧定ィ倬鹸縺吶k??/span>
2566 *
2567 * @param sid 繧サ繝?す繝ァ繝ウID
2568 * @param itemid 螟画峩螻・豁エ繧定ィ倬鹸縺吶k繧「繧、繝?Β縺ョID
2569 * @param log 繝ュ繧ー蜀?ョケ
2570 * @return RES_OK
2571 * @return RES_NO_SUCH_SESSION
2572 * @return RES_DB_QUERY_ERROR
2573 * @return RES_NO_WRITE_ACCESS_RIGHT
2574 * @return RES_DB_NOT_INITIALIZED
2575 * @return RES_ERROR
2576 *
2577 */
2578 ZEND_FUNCTION(xnp_insert_change_log)
2579 {
2580 long sid;
2581 itemid_t iid;
2582 zval *zlog;
2583 result_t result = RES_ERROR;
2584
2585 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llz",
2586 &sid, &iid, &zlog) == FAILURE) {
2587 fprintf( stderr, "error occured " );
2588 return;
2589 }
2590
2591 result = insertChangeLog( sid, iid, getZvalString( &zlog ) );
2592 RETURN_LONG( result );
2593 }
2594
2595
2596 /**
2597 *
2598 * 繧「繧、繝?Β縺ョ螟画峩螻・豁エ繝ュ繧ー繧貞叙蠕励☆繧具シ?/span>
2599 *
2600 * @param sid 繧サ繝?す繝ァ繝ウID
2601 * @param itemid 螟画峩螻・豁エ繧貞叙蠕励☆繧九い繧、繝?Β縺ョID
2602 * @param logs 繝ュ繧ー蜀?ョケ繧貞女縺大叙繧九?繧、繝ウ繧ソ
2603 * @param logsLen logs縺ォ譬シ邏阪&繧後◆繝ュ繧ー縺ョ蛟区焚
2604 * @return RES_OK
2605 * @return RES_NO_SUCH_SESSION
2606 * @return RES_NO_READ_ACCESS_RIGHT
2607 * @return RES_DB_NOT_INITIALIZED
2608 * @return RES_ERROR
2609 *
2610 */
2611 ZEND_FUNCTION(xnp_get_change_logs)
2612 {
2613 result_t result;
2614 long sid;
2615 itemid_t iid;
2616 zval *zlogs;
2617
2618 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2619 &sid, &iid, &zlogs) == FAILURE) {
2620 return;
2621 }
2622
2623 const changelog_t *plogs;
2624 int logLen;
2625 result = getChangeLogs( (sessionid_t)sid, iid, &plogs, &logLen );
2626 if ( RES_OK == result ){
2627 zend_hash_clean( zlogs -> value.ht );
2628 for( int i = 0; i < logLen; i++ ){
2629 zval *new_array;
2630 MAKE_STD_ZVAL(new_array);
2631 if(array_init(new_array) != SUCCESS){
2632 result = RES_ERROR;
2633 break;
2634 }
2635 add_index_zval( zlogs, i, new_array );
2636 changelogToZval( &plogs[ i ], new_array );
2637 }
2638 freeChangeLog( plogs );
2639 }
2640 RETURN_LONG(result);
2641 }
2642
2643
2644 /**
2645 *
2646 * 險ュ螳壼錐key縺ォ蟇セ蠢懊☆繧句?、繧致aule縺ォ蜿門セ励☆繧具シ?/span>
2647 * value縺ョ菴ソ逕ィ蠕後?freeString縺ァ隗」謾セ縺吶k??/span>
2648 * @param key 險ュ螳壹く繝シ蜷?/span>
2649 * @param value 險ュ螳壼?、繧貞女縺大叙繧九?繧、繝ウ繧ソ
2650 *
2651 * @return RES_OK
2652 * @return RES_DB_QUERY_ERROR
2653 * @return RES_ERROR
2654 */
2655 ZEND_FUNCTION(xnp_get_config_value)
2656 {
2657 zval *zname;
2658 zval *zvalue;
2659 char* value;
2660 result_t result = RES_ERROR;
2661
2662 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz",
2663 &zname, &zvalue) == FAILURE) {
2664 return;
2665 }
2666 result = getConfigValue( getZvalString( &zname ), &value );
2667 if( result == RES_OK ){
2668 zvalue -> type = IS_STRING;
2669 zvalue -> value.str.len = strlen(value);
2670 zvalue -> value.str.val = estrdup(value);
2671 freeString( value );
2672 }
2673 RETURN_LONG( result );
2674 }
2675
2676
2677 /**
2678 *
2679 * 險ュ螳壼錐key縺ォ蛟、繧致aule繧定ィュ螳壹☆繧?/span>
2680 *
2681 * @param key 險ュ螳壹く繝シ蜷?/span>
2682 * @param value 險ュ螳壼?、
2683 *
2684 * @return RES_OK
2685 * @return RES_DB_QUERY_ERROR
2686 * @return RES_ERROR
2687 */
2688 ZEND_FUNCTION(xnp_set_config_value)
2689 {
2690 zval *zname;
2691 zval *zvalue;
2692 result_t result = RES_ERROR;
2693
2694 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz",
2695 &zname, &zvalue) == FAILURE) {
2696 return;
2697 }
2698 result = setConfigValue( getZvalString( &zname ), getZvalString( &zvalue ) );
2699 RETURN_LONG( result );
2700 }
2701
2702
2703 /**
2704 *
2705 * 繧「繧、繝?ΒID縺ョ荳?隕ァ蜿門セ?
2706 * 繧「繧ッ繧サ繧ケ蜿ッ閭ス縺ェ繧「繧、繝?Β縺ョID繧定ソ斐☆.
2707 *
2708 * int xnp_dump_item_id( int sid, array cri, array iids )
2709 * @param sid 繧サ繝?す繝ァ繝ウID
2710 * @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span>
2711 * @param iids 蜿門セ礼オ先棡繧貞女縺大叙繧矩?蛻?/span>
2712 * @return RES_OK
2713 * @return RES_DB_NOT_INITIALIZED
2714 * @return RES_NO_SUCH_SESSION
2715 * @return RES_DB_QUERY_ERROR
2716 *
2717 */
2718 ZEND_FUNCTION(xnp_dump_item_id)
2719 {
2720 long sid;
2721 zval *zcriteria;
2722 zval *ziids;
2723 result_t result = RES_ERROR;
2724
2725 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2726 &sid, &zcriteria, &ziids) == FAILURE) {
2727 fprintf( stderr, "error occured " );
2728 return;
2729 }
2730
2731 zCriteria_t zcri(zcriteria);
2732 result = zcri.getResult();
2733 if ( RES_OK == result ){
2734 const itemid_t *piids;
2735 int iidsLen;
2736 result = dumpItemID( (sessionid_t)sid, &zcri, &piids, &iidsLen );
2737 if ( RES_OK == result ){
2738 itemidsToZval( piids, iidsLen, &ziids );
2739 freeItemID( piids );
2740 }
2741 }
2742
2743 RETURN_LONG( result );
2744 }
2745
2746
2747 /**
2748 *
2749 * 繝舌う繝ウ繝?繝シ縺ォ逋サ骭イ縺輔l縺溘い繧、繝?Β縺ョID繧貞叙蠕励@縺セ縺呻シ?/span>
2750 * @param sid 繧サ繝?す繝ァ繝ウID
2751 * @param binderid 蟇セ雎。繝舌う繝ウ繝?繝シ縺ョID
2752 * @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span>
2753 * @param iids 逋サ骭イ縺輔l縺溘い繧、繝?ΒID繧貞女縺大叙繧句シ墓焚
2754 * @param iidsLen iids縺ォ譬シ邏阪&繧後◆蛟区焚繧貞女縺大叙繧句シ墓焚
2755 * @return RES_OK
2756 * @return RES_DB_NOT_INITIALIZED
2757 * @return RES_NO_SUCH_SESSION
2758 * @return RES_DB_QUERY_ERROR
2759 * @return RES_ERROR
2760 *
2761 */
2762 ZEND_FUNCTION(xnp_get_item_id_by_binder_id)
2763 {
2764 result_t result;
2765 long sid;
2766 itemid_t iid;
2767 zval *zcriteria;
2768 zval *ziids;
2769
2770 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2771 &sid, &iid, &zcriteria, &ziids) == FAILURE) {
2772 return;
2773 }
2774
2775 zCriteria_t zcri(zcriteria);
2776 result = zcri.getResult();
2777 if ( RES_OK == result ){
2778 const itemid_t *pitemids;
2779 int itemidLen;
2780 result = getItemIDByBinderID( (sessionid_t)sid, iid, &zcri, &pitemids, &itemidLen );
2781 if ( RES_OK == result ){
2782 itemidsToZval( pitemids, itemidLen, &ziids );
2783 freeItemID( pitemids );
2784 }
2785 }
2786 RETURN_LONG(result);
2787 }
2788
2789
2790 /**
2791 *
2792 * 繧、繝ウ繝?ャ繧ッ繧ケ縺ォ逋サ骭イ縺輔l縺溘い繧、繝?Β縺ョID繧貞叙蠕励@縺セ縺呻シ?/span>
2793 * 讓ゥ髯舌′辟。縺上※隱ュ繧√↑縺?b縺ョ縺ッ邨先棡縺ォ蜷ォ縺ソ縺セ縺帙s??/span>
2794 * 譛ェ謇ソ隱阪〒隱ュ繧√↑縺?b縺ョ繧らオ先棡縺ォ蜷ォ縺ソ縺セ縺帙s??/span>
2795 *
2796 * @param sid 繧サ繝?す繝ァ繝ウID
2797 * @param xid 蟇セ雎。繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
2798 * @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span>
2799 * @param iids 逋サ骭イ縺輔l縺溘い繧、繝?ΒID繧貞女縺大叙繧句シ墓焚
2800 * @param iidsLen iids縺ォ譬シ邏阪&繧後◆蛟区焚繧貞女縺大叙繧句シ墓焚
2801 * @return RES_OK
2802 * @return RES_DB_NOT_INITIALIZED
2803 * @return RES_NO_SUCH_SESSION
2804 * @return RES_DB_QUERY_ERROR
2805 * @return RES_ERROR
2806 *
2807 */
2808 ZEND_FUNCTION(xnp_get_item_id_by_index_id)
2809 {
2810 result_t result;
2811 long sid;
2812 indexid_t xid;
2813 zval *zcriteria;
2814 zval *ziids;
2815
2816 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2817 &sid, &xid, &zcriteria, &ziids) == FAILURE) {
2818 return;
2819 }
2820
2821 zCriteria_t zcri(zcriteria);
2822 result = zcri.getResult();
2823 if ( RES_OK == result ){
2824 const itemid_t *pitemids;
2825 int itemidLen;
2826 result = getItemIDByIndexID( (sessionid_t)sid, xid, &zcri, &pitemids, &itemidLen );
2827 if ( RES_OK == result ){
2828 itemidsToZval( pitemids, itemidLen, &ziids );
2829 freeItemID( pitemids );
2830 }
2831 }
2832 RETURN_LONG(result);
2833 }
2834
2835
2836 ZEND_FUNCTION(xnp_get_overlapped_items)
2837 {
2838 RETURN_LONG( RES_ERROR );
2839 }
2840
2841 /**
2842 *
2843 * 繧「繧、繝?Β(Basic Information)繧堤匳骭イ縺吶k.
2844 * Platform繝ヲ繝シ繧カ莉・荳翫?讓ゥ髯舌′蠢?ヲ?
2845 *
2846 * @param sid 繧サ繝?す繝ァ繝ウID
2847 * @param item 逋サ骭イ縺励◆縺?い繧、繝?Β縺ョ諠??ア
2848 * @param itemid 逋サ骭イ縺励◆繧「繧、繝?Β縺ョID繧貞女縺大叙繧句シ墓焚
2849 * @return RES_OK
2850 * @return RES_ERROR
2851 * @return RES_NO_SUCH_SESSION
2852 * @return RES_DB_QUERY_ERROR
2853 * @return RES_DB_NOT_INITIALIZED
2854 * @return RES_NO_WRITE_ACCESS_RIGHT
2855 *
2856 */
2857 ZEND_FUNCTION(xnp_insert_item)
2858 {
2859 long sid;
2860 zval *ziid;
2861 zval *zitem;
2862 item_t item;
2863 itemid_t iid;
2864 result_t result = RES_ERROR;
2865
2866 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2867 &sid, &zitem, &ziid) == FAILURE) {
2868 fprintf( stderr, "error occured " );
2869 return;
2870 }
2871
2872 zvalToItem( zitem, &item );
2873 result = insertItem( (sessionid_t)sid, &item, &iid );
2874 if ( RES_OK == result ){
2875 ziid -> type = IS_LONG;
2876 ziid -> value.lval = iid;
2877 }
2878 RETURN_LONG( result );
2879 }
2880
2881 /**
2882 *
2883 * 繧「繧、繝?Β(Basic Information)繧呈峩譁ー縺吶k.
2884 * Platform繝ヲ繝シ繧カ莉・荳翫?讓ゥ髯舌′蠢?ヲ?
2885 * item縺ョitem_id繧呈ュ」縺励¥繧サ繝?ヨ縺吶k縺薙→.
2886 *
2887 * @param sid 繧サ繝?す繝ァ繝ウID
2888 * @param item 譖エ譁ー縺励◆縺?い繧、繝?Β縺ョ諠??ア
2889 * @return RES_OK
2890 * @return RES_ERROR
2891 * @return RES_NO_SUCH_SESSION
2892 * @return RES_DB_QUERY_ERROR
2893 * @return RES_DB_NOT_INITIALIZED
2894 * @return RES_NO_WRITE_ACCESS_RIGHT
2895 */
2896 ZEND_FUNCTION(xnp_update_item)
2897 {
2898 long sid;
2899 zval *zitem;
2900 item_t item;
2901 result_t result = RES_ERROR;
2902
2903 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2904 &sid, &zitem) == FAILURE) {
2905 fprintf( stderr, "error occured " );
2906 return;
2907 }
2908
2909 zvalToItem( zitem, &item );
2910 result = updateItem( (sessionid_t)sid, &item );
2911 RETURN_LONG( result );
2912 }
2913
2914 /**
2915 *
2916 * 繧「繧、繝?Β(Basic Information)繧貞炎髯、縺吶k.
2917 *
2918 * @param sid 繧サ繝?す繝ァ繝ウID
2919 * @param item 蜑企勁縺励◆縺?い繧、繝?Β縺ョ諠??ア
2920 * @return RES_OK
2921 * @return RES_ERROR
2922 * @return RES_NO_SUCH_SESSION
2923 * @return RES_DB_QUERY_ERROR
2924 * @return RES_DB_NOT_INITIALIZED
2925 * @return RES_NO_WRITE_ACCESS_RIGHT
2926 */
2927 ZEND_FUNCTION(xnp_delete_item)
2928 {
2929 long sid;
2930 itemid_t iid;
2931 result_t result = RES_ERROR;
2932
2933 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2934 &sid, &iid) == FAILURE) {
2935 fprintf( stderr, "error occured " );
2936 return;
2937 }
2938 result = deleteItem( (sessionid_t)sid, iid );
2939 RETURN_LONG( result );
2940 }
2941
2942
2943 /**
2944 *
2945 * 蛟倶ココ縺ョ髱槫?髢九い繧、繝?Β縺ョID繧貞叙蠕励@縺セ縺呻シ?/span>
2946 * 蜈ャ髢九う繝ウ繝?ャ繧ッ繧ケ縺ォ逋サ骭イ謇ソ隱阪&繧後◆繧ゅ?縺ッ邨先棡縺ォ蜷ォ縺ソ縺セ縺帙s
2947 *
2948 * @param sid 繧サ繝?す繝ァ繝ウID
2949 * @param uid 蟇セ雎。繝ヲ繝シ繧カ縺ョID
2950 * @param iids 逋サ骭イ縺輔l縺溘い繧、繝?ΒID繧貞女縺大叙繧句シ墓焚
2951 * @param iidsLen iids縺ォ譬シ邏阪&繧後◆蛟区焚繧貞女縺大叙繧句シ墓焚
2952 * @return RES_OK
2953 * @return RES_DB_NOT_INITIALIZED
2954 * @return RES_NO_SUCH_SESSION
2955 * @return RES_DB_QUERY_ERROR
2956 * @return RES_ERROR
2957 *
2958 */
2959 //result_t getPrivateItemID( sessionid_t sid, userid_t uid, const itemid_t** iids, int* iidsLen )
2960 ZEND_FUNCTION(xnp_get_private_item_id)
2961 {
2962 long sid;
2963 userid_t uid;
2964 zval* ziids;
2965
2966 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2967 &sid, &uid, &ziids) == FAILURE) {
2968 return;
2969 }
2970
2971 const itemid_t *piids;
2972 int iidsLen;
2973 result_t result = getPrivateItemID( (sessionid_t)sid, uid, &piids, &iidsLen );
2974 if ( RES_OK == result ){
2975 itemidsToZval( piids, iidsLen, &ziids );
2976 freeItemID( piids );
2977 }
2978
2979 RETURN_LONG( result );
2980
2981 }
2982
2983 /**
2984 *
2985 * 繧ー繝ォ繝シ繝励う繝ウ繝?ャ繧ッ繧ケ縺ォ逋サ骭イ縺輔l縺溘い繧、繝?Β縺ョID繧貞叙蠕励@縺セ縺呻シ?/span>
2986 *
2987 * @param sid 繧サ繝?す繝ァ繝ウID
2988 * @param uid 蟇セ雎。繧ー繝ォ繝シ繝励?ID
2989 * @param iids 逋サ骭イ縺輔l縺溘い繧、繝?ΒID繧貞女縺大叙繧句シ墓焚
2990 * @param iidsLen iids縺ォ譬シ邏阪&繧後◆蛟区焚繧貞女縺大叙繧句シ墓焚
2991 * @return RES_OK
2992 * @return RES_DB_NOT_INITIALIZED
2993 * @return RES_NO_SUCH_SESSION
2994 * @return RES_DB_QUERY_ERROR
2995 * @return RES_ERROR
2996 *
2997 */
2998 //result_t getGroupItemID( sessionid_t sid, groupid_t gid, const itemid_t** iids, int* iidsLen )
2999 ZEND_FUNCTION(xnp_get_group_item_id)
3000 {
3001 long sid;
3002 groupid_t gid;
3003 zval* ziids;
3004
3005 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
3006 &sid, &gid, &ziids) == FAILURE) {
3007 return;
3008 }
3009
3010 const itemid_t *piids;
3011 int iidsLen;
3012 result_t result = getGroupItemID( (sessionid_t)sid, gid, &piids, &iidsLen );
3013 if ( RES_OK == result ){
3014 itemidsToZval( piids, iidsLen, &ziids );
3015 freeItemID( piids );
3016 }
3017
3018 RETURN_LONG( result );
3019 }
3020
3021
3022 /**
3023 *
3024 * 繧「繧、繝?Β諠??ア蜿門セ?
3025 * 蜿門セ励@縺溘い繧、繝?Β縺ッ?御スソ逕ィ蠕掲reeItem縺ァ隗」謾セ縺吶k.
3026 *
3027 * @refer freeItem
3028 * @param sid 繧サ繝?す繝ァ繝ウID
3029 * @param iid 蜿門セ励@縺溘>繧「繧、繝?Β縺ョID
3030 * @param item 邨先棡縺ョ繧「繧、繝?Β諠??ア繧貞女縺大叙繧句シ墓焚
3031 * @return RES_OK
3032 * @return RES_DB_NOT_INITIALIZED
3033 * @return RES_NO_SUCH_SESSION
3034 * @return RES_NO_SUCH_ITEM
3035 * @return RES_DB_QUERY_ERROR
3036 *
3037 */
3038 ZEND_FUNCTION(xnp_get_item)
3039 {
3040 long sid;
3041 long iid;
3042 zval *zitem;
3043 result_t result = RES_ERROR;
3044
3045 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
3046 &sid, &iid, &zitem) == FAILURE) {
3047 fprintf( stderr, "error occured " );
3048 return;
3049 }
3050
3051 const item_t* pitem;
3052 result = getItem( (sessionid_t)sid, iid, &pitem );
3053 if ( RES_OK == result ){
3054 itemToZval( pitem, zitem );
3055 freeItem( pitem );
3056 }
3057 RETURN_LONG( result );
3058 }
3059
3060
3061 /**
3062 *
3063 * 繧「繧、繝?Β諠??ア蜿門セ?
3064 * 蜿門セ励@縺溘い繧、繝?Β縺ッ?御スソ逕ィ蠕掲reeItem縺ァ隗」謾セ縺吶k.
3065 *
3066 * @refer freeItem
3067 * @param sid 繧サ繝?す繝ァ繝ウID
3068 * @param iids 蜿門セ励@縺溘>繧「繧、繝?Β縺ョID縺ョ驟榊?
3069 * @param iidsLen iids驟榊?縺ョ隕∫エ?謨ー
3070 * @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span>
3071 * @param items 讀懃エ「邨先棡縺ョ驟榊?縺ョ繝昴う繝ウ繧ソ繧呈嶌縺崎セシ繧?蠑墓焚
3072 * @param itemsLen 讀懃エ「邨先棡縺ョ謨ー(驟榊?*items縺ョ隕∫エ?謨ー)
3073 * @return RES_OK
3074 * @return RES_DB_NOT_INITIALIZED
3075 * @return RES_NO_SUCH_SESSION
3076 * @return RES_DB_QUERY_ERROR
3077 *
3078 */
3079 ZEND_FUNCTION(xnp_get_items)
3080 {
3081 result_t result;
3082 long sid;
3083 zval *ziids;
3084 zval *zcriteria;
3085 zval *zitem;
3086
3087 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
3088 &sid, &ziids, &zcriteria, &zitem) == FAILURE) {
3089 return;
3090 }
3091
3092 zCriteria_t zcri(zcriteria);
3093 result = zcri.getResult();
3094 if ( RES_OK == result ){
3095 zIIDs_t zIIDs(ziids);
3096 result = zIIDs.getResult();
3097 if ( RES_OK == result ){
3098 const item_t *pitems;
3099 int itemLen;
3100 result = getItems( (sessionid_t)sid,
3101 zIIDs.getPIID(), zIIDs.getLen(),
3102 &zcri, &pitems, &itemLen );
3103 if ( RES_OK == result ){
3104 itemsToZval( pitems, itemLen, zitem );
3105 freeItem( pitems );
3106 }
3107 }
3108 }
3109
3110 RETURN_LONG(result);
3111 }
3112
3113
3114 /**
3115 *
3116 *
3117 * @param pmid PUBMEDID
3118 * @param pubmed 邨先棡繧呈嶌縺崎セシ繧?pubmed_t縺ョ繝昴う繝ウ繧ソ蠑墓焚
3119 *
3120 *
3121 *
3122 */
3123 ZEND_FUNCTION(xnp_pubmed_complete)
3124 {
3125 long pmid;
3126 zval *zpubmed;
3127 result_t result = RES_ERROR;
3128
3129 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
3130 &pmid, &zpubmed) == FAILURE) {
3131 fprintf( stderr, "error occured " );
3132 return;
3133 }
3134
3135 const pubmed_t* ppubmed;
3136 result = pubmedComplete( pmid, &ppubmed );
3137 if ( RES_OK == result ){
3138 pubmedToZval( ppubmed, zpubmed );
3139 freePubmed( ppubmed );
3140 }
3141 RETURN_LONG( result );
3142 }
3143
3144
3145 /**
3146 *
3147 *
3148 * @param isbn ISBN
3149 * @param amazonbook 邨先棡繧呈嶌縺崎セシ繧?amazonbook_t縺ョ繝昴う繝ウ繧ソ蠑墓焚
3150 *
3151 *
3152 *
3153 */
3154 ZEND_FUNCTION(xnp_amazon_complete)
3155 {
3156 zval *zurl;
3157 zval *zamazonbook;
3158 result_t result = RES_ERROR;
3159
3160 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "za",
3161 &zurl, &zamazonbook) == FAILURE) {
3162 fprintf( stderr, "error occured " );
3163 return;
3164 }
3165
3166 const amazonbook_t* pamazonbook;
3167 result = amazonComplete( getZvalString( &zurl ) , &pamazonbook );
3168 if ( RES_OK == result ){
3169 amazonbookToZval( pamazonbook, zamazonbook );
3170 //freeAmazonbook( pamazonbook );
3171 }
3172 RETURN_LONG( result );
3173 }
3174
3175
3176 //ZEND_FUNCTION(xnp_uninitialize_db)
3177 //{
3178 // RETURN_LONG( RES_ERROR );
3179 //}
3180
3181
3182 /**
3183 *
3184 * 繝舌う繝ウ繝?繝シ縺ォ繧「繧、繝?Β繧定ソス蜉?縺吶k
3185 *
3186 * @param sid 繧サ繝?す繝ァ繝ウID
3187 * @param binderid 蜃ヲ逅?ッセ雎。縺ョ繝舌う繝ウ繝?繝シ縺ョID
3188 * @param iid 繝舌う繝ウ繝?繝シ縺ォ霑ス蜉?縺励◆縺?い繧、繝?Β縺ョID
3189 * @return RES_OK
3190 * @return RES_DB_QUERY_ERROR
3191 * @return RES_NO_SUCH_SESSION
3192 * @return RES_NO_WRITE_ACCESS_RIGHT
3193 * @return RES_ERROR
3194 *
3195 */
3196 ZEND_FUNCTION(xnp_register_binder_item)
3197 {
3198 result_t result = RES_ERROR;
3199 long sid;
3200 long bid;
3201 long iid;
3202
3203 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
3204 &sid, &bid, &iid) == FAILURE) {
3205 return;
3206 }
3207
3208 result = registerBinderItem( (sessionid_t)sid, bid, iid );
3209 RETURN_LONG(result);
3210 }
3211
3212
3213 /**
3214 *
3215 * 繝舌う繝ウ繝?繝シ縺九i繧「繧、繝?Β繧貞炎髯、縺吶k
3216 *
3217 * @param sid 繧サ繝?す繝ァ繝ウID
3218 * @param binderid 蜃ヲ逅?ッセ雎。縺ョ繝舌う繝ウ繝?繝シ縺ョID
3219 * @param iid 繝舌う繝ウ繝?繝シ縺九i蜑企勁縺励◆縺?い繧、繝?Β縺ョID
3220 * @return RES_OK
3221 * @return RES_DB_QUERY_ERROR
3222 * @return RES_NO_SUCH_SESSION
3223 * @return RES_NO_WRITE_ACCESS_RIGHT
3224 * @return RES_ERROR
3225 *
3226 */
3227 ZEND_FUNCTION(xnp_unregister_binder_item)
3228 {
3229 result_t result = RES_ERROR;
3230 long sid;
3231 long bid;
3232 long iid;
3233
3234 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
3235 &sid, &bid, &iid) == FAILURE) {
3236 return;
3237 }
3238
3239 result = registerBinderItem( (sessionid_t)sid, bid, iid );
3240 RETURN_LONG(result);
3241 }
3242
3243
3244 /**
3245 *
3246 * 繧、繝ウ繝?ャ繧ッ繧ケ縺ォ繧「繧、繝?Β繧定ソス蜉?縺吶k
3247 *
3248 * @param sid 繧サ繝?す繝ァ繝ウID
3249 * @param xid 蜃ヲ逅?ッセ雎。縺ョ繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
3250 * @param iid 繧、繝ウ繝?ャ繧ッ繧ケ縺ォ霑ス蜉?縺励◆縺?い繧、繝?Β縺ョID
3251 * @return RES_OK
3252 * @return RES_DB_QUERY_ERROR
3253 * @return RES_NO_SUCH_SESSION
3254 * @return RES_NO_WRITE_ACCESS_RIGHT
3255 * @return RES_ERROR
3256 *
3257 */
3258 ZEND_FUNCTION(xnp_register_item)
3259 {
3260 result_t result = RES_ERROR;
3261 long sid;
3262 long xid;
3263 long iid;
3264
3265 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
3266 &sid, &xid, &iid) == FAILURE) {
3267 return;
3268 }
3269
3270 result = registerItem( (sessionid_t)sid, xid, iid );
3271 RETURN_LONG(result);
3272 }
3273
3274
3275 /**
3276 *
3277 * 繧、繝ウ繝?ャ繧ッ繧ケ縺九i繧「繧、繝?Β繧貞炎髯、縺吶k
3278 *
3279 * @param sid 繧サ繝?す繝ァ繝ウID
3280 * @param xid 蜃ヲ逅?ッセ雎。縺ョ繧、繝ウ繝?ャ繧ッ繧ケ縺ョID
3281 * @param iid 繧、繝ウ繝?ャ繧ッ繧ケ縺九i蜑企勁縺励◆縺?い繧、繝?Β縺ョID
3282 * @return RES_OK
3283 * @return RES_DB_QUERY_ERROR
3284 * @return RES_NO_SUCH_SESSION
3285 * @return RES_NO_WRITE_ACCESS_RIGHT
3286 * @return RES_ERROR
3287 *
3288 */
3289 ZEND_FUNCTION(xnp_unregister_item)
3290 {
3291 result_t result = RES_ERROR;
3292 long sid;
3293 long xid;
3294 long iid;
3295
3296 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
3297 &sid, &xid, &iid) == FAILURE) {
3298 return;
3299 }
3300
3301 result = unregisterItem( (sessionid_t)sid, xid, iid );
3302 RETURN_LONG(result);
3303 }
3304
3305
3306 /**
3307 *
3308 * 謇ソ隱榊セ?■迥カ諷九?繧「繧、繝?Β縺ョ縺?■?梧価隱肴ィゥ髯舌?縺ゅk繧「繧、繝?Β縺ョID縺ィ逋サ骭イ蜈医う繝ウ繝?ャ繧ッ繧ケ縺ョID繧偵?繧「縺ァ蜿門セ励@縺セ縺?
3309 * 繧「繧、繝?Βiids[i]縺檎樟蝨ィxids[i]縺ク縺ョ逋サ骭イ縺ョ謇ソ隱榊セ?■迥カ諷九↓縺ゅk縺薙→繧定ソ斐@縺セ縺呻シ?/span>
3310 *
3311 * @param sid 繧サ繝?す繝ァ繝ウID
3312 * @param xids 謇ソ隱榊セ?■繧「繧、繝?Β繧堤匳骭イ縺吶k繧、繝ウ繝?ャ繧ッ繧ケID繧貞女縺大叙繧句シ墓焚
3313 * @param iids 謇ソ隱榊セ?■繧「繧、繝?ΒID繧貞女縺大叙繧句シ墓焚
3314 * @param len iids,xids縺ォ譬シ邏阪&繧後◆蛟区焚繧貞女縺大叙繧句シ墓焚
3315 * @return RES_OK
3316 * @return RES_DB_NOT_INITIALIZED
3317 * @return RES_NO_SUCH_SESSION
3318 * @return RES_DB_QUERY_ERROR
3319 * @return RES_ERROR
3320 *
3321 */
3322 //result_t getUncertifiedLink( sessionid_t sid, const itemid_t** xids, const itemid_t** iids, int* len )
3323 ZEND_FUNCTION(xnp_get_uncertified_link)
3324 {
3325 long sid;
3326 zval* zxids;
3327 zval* ziids;
3328
3329 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
3330 &sid, &zxids, &ziids) == FAILURE) {
3331 return;
3332 }
3333
3334 const itemid_t *pxids;
3335 const itemid_t *piids;
3336 int len;
3337 result_t result = getUncertifiedLink( (sessionid_t)sid, &pxids, &piids, &len );
3338 if ( RES_OK == result ){
3339 indexidsToZval( pxids, len, &zxids );
3340 itemidsToZval( piids, len, &ziids );
3341 freeIndexID( pxids );
3342 freeItemID( piids );
3343 }
3344 RETURN_LONG( result );
3345 }
3346
3347 /**
3348 *
3349 * @param types
3350 * @return RES_OK
3351 * @return RES_DB_NOT_INITIALIZED
3352 * @return RES_NO_SUCH_SESSION
3353 * @return RES_DB_QUERY_ERROR
3354 * @return RES_ERROR
3355 *
3356 */
3357 ZEND_FUNCTION(xnp_get_item_types)
3358 {
3359 zval* ztypes;
3360
3361 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
3362 &ztypes) == FAILURE) {
3363 return;
3364 }
3365
3366 const itemtype_t *ptypes;
3367 int len;
3368 result_t result = getItemTypes( &ptypes, &len );
3369 if ( RES_OK == result ){
3370
3371 zend_hash_clean( ztypes -> value.ht );
3372 for( int i = 0; i < len; i++ ){
3373 zval *new_array;
3374 MAKE_STD_ZVAL(new_array);
3375 if(array_init(new_array) != SUCCESS){
3376 result = RES_ERROR;
3